Close

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 团队可以运行 API、组件库、监控工具和 Docker 镜像的组合,以便用户部署应用。深入了解组件的相关信息非常重要,其中包括组件的负责人、资源以及与其他组件之间不断演变的关系。众多团队之间需要精准沟通和协调,以便参与其中的每个人都能轻松找到了解某个产品所需的知识。

基础架构成本呈指数级增长

添加至生产部署中的每项新微服务都有自己的成本,例如在测试套件、部署手册、托管基础架构和监控工具等方面。

组织开销增加

需要更高层面的沟通和协作来协调微服务架构团队之间的更新和对接。

调试

调试包含多个微服务(各自都有自己的日志集)的应用可能具有挑战性。单个业务流程可能会在不同的时间跨多台计算机运行,从而进一步加大调试难度。

事件响应

掌握微服务事件响应情报非常重要,包括诸如谁在使用微服务、微服务被部署到何处、微服务的部署方式,以及在出现问题时与谁联系等信息。

微服务和 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.

借助 Compass 浏览微服务

使用微服务架构时,Atlassian Compass 可管理扩展的分布式架构的复杂性。它是一个可扩展的开发人员体验平台,可将有关工程产出及团队协作的分散信息整合到一个集中且可搜索的位置。除通过组件目录帮助您控制微服务蔓延之外,Compass 还可帮助您制定最佳实践并使用记分卡来衡量软件的运行状况。此外,您也可借助在 Atlassian Forge 平台上构建的扩展功能,获得整个 DevOps 工具链的数据和洞察信息。

Compass 微服务插图