Microservices: understanding what it is and its benefits
不久前,构建软件应用的首选方法还是采用单体式架构,这是一种独立的的自主单元。对许多开发人员来说,此方案一开始效果确实不错,但当应用的复杂性上升后便不太灵光了。如果要对单体式系统中的一小部分代码进行修改,那就需要重建整个系统,对整个系统运行测试,并且要部署该应用的全新版本。
后来,微服务诞生了。此方案可将软件系统分解成更小的单元,让其自主开发并执行部署。微服务架构经 DevOps 运动推行,力求实现持续频繁交付各类更新,如新功能、缺陷修复和安全性改进等。在许多情况下,微服务也成为企业使用现代编程语言和更新技术堆栈来重写传统应用的一个途径。
什么是微服务?
微服务架构也可简称为“微服务”。作为一种应用构建方法,它可将应用构建为一系列可独立部署、去中心化且能自主开发的服务。这些服务采用松散耦合,可独立部署且易于维护。单体式应用是作为单个不可分单元来构建的,而微服务则将该单元分解为一系列独立单元,从而为更大的整体做贡献。微服务是持续交付实践的基础,能让团队快速适应用户需求,因此是 DevOps 不可或缺的一部分。
一个微服务就是一个负责某段域逻辑的 Web 服务。多个微服务结合起来形成一个应用,各自为网域提供一部分功能。微服务使用 API(如 REST 或 gRPC)彼此交互,但不了解其他服务的内部工作。微服务之间的这种和谐交互就是一种微服务架构。
借助微服务架构,开发人员可以组建小规模团队,使用不同的堆栈和解耦部署来专门开发不同的服务。例如,Jira 由多个微服务提供支持,每个微服务都提供特定的功能,包括搜索事务、查看事务详情、评论和事务转换等。
微服务的特征
微服务架构没有正式的定义,但有一些常见模式或特征需要了解。
微服务的优势
Microservices provide many advantages. They simplify development and project management. Sometimes, they may eliminate the need for separate operations teams since developers can handle operations for the microservices they build.
Some other benefits of microservices include:
灵活扩展
微服务特意设计为分布式并可在集群中部署,因此可以跨服务边界进行动态水平扩展。如果某一微服务达到负载容限,可将该服务的新实例快速部署到相关集群,以帮助缓解压力。
灵活
小型独立团队通常会在微服务内构建服务,因此鼓励团队采用敏捷实践。团队可以独立工作和快速行动,从而缩短开发周期。
技术灵活性
微服务架构不一定要遵循采用某一工具链的固定方法,而是允许团队自由选择想要使用的工具。
频繁发布
微服务的主要优势之一是发布周期频繁且速度更快。作为持续集成和持续交付 (CI/CD) 的关键要素,微服务允许团队试验新的功能,并在出现状况时回滚。这样,代码更新变得更加轻松,新功能的面市时间也得以加快。
微服务的挑战
Microservices-based architecture has many benefits, but it also comes with challenges.
One challenge of microservices is that the independent services generate their logs. This is a disadvantage compared to monoliths' centralized logs, which provide a single source of truth for developers and operations teams. Monitoring and infrastructure management are also more complicated since many moving pieces exist. Testing and debugging are challenging because, unlike monoliths, no integrated development environment (IDE) exists.
Atlassian's Compass can help with all these challenges. Compass facilitates collaboration and allows companies to manage the complexities of distributed architectures as they scale. It does this by bringing the disconnected information together in a central, searchable location.
微服务和 DevOps:步调一致
鉴于微服务的复杂性和依赖性不断增加,DevOps 在部署、监控和生命周期自动化方面的实践被视为微服务架构不可或缺的一部分。正因为此,微服务通常被认为是实施 DevOps 文化的第一步,它可以实现:
- 自动化
- 更好的可扩展性
- 可管理性
- 灵活
- 更快的交付和部署
微服务架构的关键技术和工具
容器仅仅是应用及其所有依赖关系的打包,以便其能够轻松、一致地进行部署。容器没有自身操作系统的开销,因此比传统虚拟机更小巧、更轻盈。它们可以更快运行和停止,非常适合存在于微服务架构中的小型服务。
随着服务和容器的激增,编排和管理大型容器群组变得至关重要。Docker 是一种广受欢迎的容器化平台和运行时环境,可以帮助开发人员构建、部署和运行容器。但是,仅凭借 Docker 实现大规模运行和管理容器并非易事。Kubernetes 以及 Docker Swarm、Mesos 和 HashiCorp Nomad 等其他解决方案有助于解决大规模容器化问题。
容器化和容器部署是分布式基础架构的一种新模式。Docker 和 Kubernetes 将服务打包到一个可以快速部署和丢弃的完整容器中。这些基础架构工具为微服务架构提供了补充。微服务可以使用容器管理系统进行容器化,以及轻松地部署和管理。
什么是微服务?
微服务架构也可简称为“微服务”。作为一种应用构建方法,它可将应用构建为一系列可独立部署、去中心化且能自主开发的服务。这些服务采用松散耦合,可独立部署且易于维护。单体式应用是作为单个不可分单元来构建的,而微服务则将该单元分解为一系列独立单元,从而为更大的整体做贡献。微服务是持续交付实践的基础,能让团队快速适应用户需求,因此是 DevOps 不可或缺的一部分。
一个微服务就是一个负责某段域逻辑的 Web 服务。多个微服务结合起来形成一个应用,各自为网域提供一部分功能。微服务使用 API(如 REST 或 gRPC)彼此交互,但不了解其他服务的内部工作。微服务之间的这种和谐交互就是一种微服务架构。
借助微服务架构,开发人员可以组建小规模团队,使用不同的堆栈和解耦部署来专门开发不同的服务。例如,Jira 由多个微服务提供支持,每个微服务都提供特定的功能,包括搜索事务、查看事务详情、评论和事务转换等。
微服务的未来
What tools do people commonly use in microservices?
Businesses often use containerization tools such as Kubernetes and Docker. They also frequently use API gateways between microservices and their clients. These gateways perform API traffic functions such as authentication, access control, and load balancing.
How do microservices differ from monolithic architecture?
Monoliths are large codebases that function as one system. They require system downtime for updates and debugging. Microservices architectures are distributed applications with smaller, independent chunks of functionality. Developers can upgrade, improve, and debug these modules without taking the entire application offline. This simplifies scaling and aids development velocity.
How do microservices impact DevOps?
Those who understand DevOps know that continuous integration and continuous delivery (the DevOps CI/CD pipeline) are the mainstays of DevOps methodologies. The modular nature of microservices aligns perfectly with this approach. Microservices empower developers to swiftly create, test, and deploy small, frequent releases.
Join the Atlassian Community for more microservices articles and discussions.