Spring微服务实战(第2版)
上QQ阅读APP看书,第一时间看更新

微服务的概念最初悄悄蔓延到软件开发社区中,是作为对尝试(在技术上和组织上)扩大大型单体应用程序所面临的诸多挑战的直接回应。微服务是一种小型的、松耦合的分布式服务。微服务允许你将一个大型的应用分解为具有狭义职责定义的便于管理的组件。微服务通过将一个大型代码库分解为多个精确定义的小型代码库,帮助解决了大型代码库中传统的复杂问题。

对微服务的思考需要围绕两个关键概念展开:分解(decomposing)和分离(unbundling)。应用程序的功能应该完全彼此独立。如果我们以前面提到的CRM应用程序为例,将其分解为微服务,那么它看起来可能像图1-2所示的样子。

1-2

图1-2 使用微服务架构,CRM应用将会被分解成一系列完全独立的微服务,
让每个开发团队都能够按各自的步伐前进

图1-2显示了每个团队是如何完全拥有自己的服务代码和服务基础设施的。他们可以彼此独立地去构建、部署和测试,因为他们的代码、源代码控制存储库和基础设施(应用服务器和数据库)现在是完全独立于应用的其他部分的。总的来说,微服务架构具有以下特征。

应用程序逻辑被分解为具有定义明确的、协调的职责边界的细粒度组件。

每个组件都有一个小的职责领域,并且完全独立部署。单个微服务对业务域的某一部分负责。

微服务采用HTTP这样的轻量级通信协议和JSON(JavaScript Object Notation,JavaScript对象表示法),在服务消费者和服务提供者之间进行数据交换。

服务的底层采用什么技术实现并没有什么影响,因为微服务应用程序始终使用技术中立的格式(JSON是最常见的)进行通信。这意味着使用微服务方法构建的应用程序能够使用多种编程语言和技术进行构建。

微服务利用其小、独立和分布式的性质,使组织拥有具有明确责任领域的更小型开发团队。这些团队可能为同一个目标工作,如交付一个应用程序,但是每个团队只负责他们在做的服务。

图1-3对比了一个典型的小型电子商务应用程序的单体设计和微服务设计。

1-3

图1-3 单体架构和微服务架构对比