Spring Cloud微服务架构进阶
上QQ阅读APP看书,第一时间看更新

1.2 微服务架构的流派

常见的微服务架构方案有四种,分别是ZeroC IceGrid、基于消息队列、Docker Swarm和Spring Cloud。下面分别介绍这四种方案。

1. ZeroC IceGrid

ZeroC IceGrid是基于RPC框架Ice发展而来的一种微服务架构,Ice不仅仅是一个RPC框架,它还为网络应用程序提供了一些补充服务。Ice是一个全面的RPC框架,支持C++、C#、Java、JavaScript、Python等语言。IceGrid具有定位、部署和管理Ice服务器的功能,具有良好的性能与分布式能力,下面具体介绍IceGrid的功能。

Ice DNS。DNS用于将域名信息映射到具体的IP地址,通过域名得到该域名对应的IP地址的过程叫做域名解析。IceGrid为Ice提供了类似的服务:它允许Ice客户端通过简单的名称来查找Ice对象。Ice客户端可以通过提供此对象的完整寻址信息来访问服务器中的Ice对象,例如chatRoom1:ssl -h demo.zeroc.com -p 10000。这样的硬编码虽然很简单,但缺乏灵活性。因为需要为Ice服务器(本例中端口为10000)选择一个固定的端口号,因此将Ice服务器移到不同的主机上需要更新其客户端。

IceGrid提供了对这种寻址信息使用符号名称的选项,例如chatRoom1@chatRoomHost。当Ice客户端尝试访问chatRoomHost中的对象时,它会要求IceGrid提供与此符号名称关联的实际地址。例如,IceGrid返回-h demo.zeroc.com -p 65431,客户端就可以直接并透明地连接到服务器。IceGrid架构如图1-2所示。

图1-2 IceGrid架构图

服务器部署。若直接通过IP地址+端口号的方式,当Ice客户端尝试连接到未运行的服务器时,连接将会失败。通过符号或间接寻址,IceGrid有机会检查目标服务器是否正在运行,并在服务器未运行时启动或重新启动服务器。可以配置IceGrid以各种方式启动服务器:手动(通过管理命令)、按需(无论何时请求服务器)和IceGrid始终保持服务器运行。

服务器的复制。IceGrid允许部署同一服务器的多个副本,并可以配置IceGrid将符号名称解析到此服务器副本的策略。可以在所有副本中对客户端进行负载平衡,或者使用主备配置,客户端只要保持可用状态,就使用主备配置。

管理和监控。IceGrid的管理工具可以完全控制已部署的应用程序。诸如启动服务器或修改配置设置等活动只需单击鼠标即可。图1-3为IceGrid管理工具的界面。

图1-3 IceGrid Admin

IceGrid当前最新的版本为3.7.1,在3.6版本之后增加了容器化的运行方式。总的来说,IceGrid作为微服务架构早期的实践方案,其流行时间并不是很久,当前国内选用这种微服务架构方案的公司非常少。

2.基于消息队列

在微服务架构的定义中讲到,各个微服务之间使用“轻量级”的通信机制。所谓轻量级,是指通信协议与语言无关、与平台无关。微服务之间的通信方式有两种:同步和异步。同步方式有RPC, REST等;除了标准的基于同步通信方式的微服务架构外,还有基于消息队列异步方式通信的微服务架构。

在基于消息队列的微服务架构方式中,微服务之间采用发布消息与监听消息的方式来实现服务之间的交互。图1-4是一个简单的电商系统中商品服务、用户服务、订单服务和库存服务之间的交互示意图,可以看到消息中间件(MQ)是关键,它负责连通各个微服务,承担了整个系统互联互通的重任。

图1-4 基于消息队列的微服务架构

基于消息队列的微服务架构是全异步通信模式的一种设计,各个组件之间没有直接的耦合关系,也不存在服务接口与服务调用的说法,服务之间通过消息来实现彼此的通信与业务流程的驱动。基于消息队列的微服务架构应用的案例并不多,更多地体现为一种与业务相关的设计经验,每个公司都有不同的实现方式,缺乏公认的设计思路与参考架构,也没有形成一个知名的开源平台。因此,如要实施这种微服务架构,需要项目组自己从零开始去设计实现一个微服务架构基础平台,这可能会造成项目的成本较高且风险较大,决策之前需要进行全盘思考与客观评价。

3. Docker Swarm

Swarm项目是Docker公司发布的三剑客中的一员,用来提供容器集群服务,目的是更好地帮助用户管理多个Docker Engine,方便用户使用。通过把多个Docker Engine聚集在一起,形成一个大的Docker Engine,对外提供容器的集群服务。同时这个集群对外提供Swarm API,用户可以像使用Docker Engine一样使用Docker集群。

如图1-5所示Docker三剑客包括:Machine、Compose和Swarm。通过Machine可以在不同云平台上创建包含docker-engine的主机。Machine通过driver机制,支持多个平台的docker-engine环境的部署。Swarm将每一个主机上的docker-engine管理起来,对外提供容器集群服务。Compose项目主要用来提供基于容器的应用的编排。用户通过yaml文件描述由多个容器组成的应用,然后由Compose解析yaml文件,调用Docker API,在Swarm集群上创建对应的容器。Swarm集群结构如图1-6所示。

图1-5 Docker三剑客

图1-6 Docker Swarm结构

从图1-6中我们看到一个Swarm集群中有两种角色的节点:

□ Manager:负责集群的管理、集群状态的维持及将任务(Task)调度到工作节点上等。

□ Worker:承载运行在Swarm集群中的容器实例,每个节点主动汇报其上运行的任务并维持同步状态。

Docker Swarm对外提供Docker API,自身轻量,学习成本、二次开发成本都比较低,是一个插件式框架。从功能上讲,Swarm是类似于Google开源的Kubernetes微服务架构平台的一个产品。

4. Spring Cloud

Spring Cloud是一个基于Spring Boot实现的云应用开发工具,是一系列框架的集合,当添加这些工具库到应用后会增强应用的行为。Spring Boot秉持约定优于配置的思想,因此可以利用这些组件基本的默认行为来快速入门,并在需要的时候可以配置或扩展,以创建自定义解决方案。

Spring Cloud利用Spring Boot的开发便利性,巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以基于Spring Boot组件进行开发,做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将目前比较成熟、经得起实际考验、优秀的开源服务框架组合起来,通过Spring Boot进行封装,屏蔽掉复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

以下为Spring Cloud的核心功能:

□ 分布式/版本化配置

□ 服务注册和发现

□ 服务路由

□ 服务和服务之间的调用

□ 负载均衡

□ 断路器

□ 分布式消息传递

还有很多基础的功能没有列出,每个功能对应Spring Cloud中的一个组件,包括Spring Cloud Config、Spring Cloud Netflix(Eureka、Hystrix、Zuul、Archaius …)、Spring Cloud Bus等组件。