微服务治理
Spring Cloud 工具套件为微服务治理提供了全面的技术支持。这些治理工具主要包括服务的注册与发现、负载均衡管理、动态路由、服务降级和故障转移、链路跟踪、服务监控等。微服务治理的主要功能组件如下:
- 注册管理服务组件Eureka,提供服务注册和发现的功能。
- 负载均衡服务组件Ribbon,提供负载均衡调度管理的功能。
- 边缘代理服务组件Zuul,提供网关服务和动态路由的功能。
- 断路器组件Hystrix,提供容错机制、服务降级、故障转移等功能。
- 聚合服务事件流组件Turbine,可用来监控集群中服务的运行情况。
- 日志收集组件Sleuth,通过日志收集提供对服务间调用进行跟踪管理的功能。
- 配置管理服务组件Config,提供统一的配置管理服务功能。
有关这些组件的工作原理,我们可以通过一一个服务调用序列图进行说明,如图5-1 所示。
在这个序列图中,Eureka 管理每个注册的微服务实例,并为其建立元数据列表。当一个服务消费者需要调用微服务时,Ribbon将依据微服务的实例列表实行负载均衡调度。这种调度默认使用轮询算法,从实例列表中取出一一个可用的实例,然后Zuul依据实例的元数据,对服务进行路由。在路由的过程中,Hystrix会检查这个微服务实例的断路器状态。如果断路器处于闭合状态,则提供正常的服务;如果断路器处打开状态,则说明服务已经出现故障,Hystrix 将根据实例的配置情况进行故障转移、服务降级等。
此外,其他一些组件也对微服务的治理起到一定的辅助作用。例如,Turbine可以对微服务的断路器实现全面监控,Config可以构建-一个在线更新的配置管理中心,Sleuth和Zipkin结合使用可以组建一个跟踪服务器,等等。通过这些组件和服务的使用,可进一步加大微服务治理的力度。
鉴于在新版本的Spring Cloud中,Eureka 已经不再更新,所以这里使用一个功能更加强大的,由第三方提供的Consul来创建注册中心。当然,这个注册中心在Spring Cloud工具集中,同样提供了对相关组件的支持。
使用 Consul 创建注册中心
Consul 是一个功能非常强大,性能相当稳定的注册中心,而且还包 了统 配置管理功能。另外,它在 Docker 中运行和搭建集群时,更加容易整合。
Consul 的安装并不复杂, 读者可从 Consul 官网中根据自己使用的操作系统,选择相关的版本进行下载。下载解压缩后 ,可以使用如下指令用开发模式启动
consul agent -dev
启动后即可通过浏览器打开其控制台,链接地址如下:
http:l/localhost:8500
如能看到如图 5-2 示的图 ,则说明注册中心已经启动就绪 Consul 默认的服务端口为8500 ,控制台管理和服务接入都使用这一端口。
为了能够将配置信息保存在磁盘文件中,这里使用了类似于生产环境中的启动参数,如下所示:
consul agent - server - bind=127 . 0 . 0.l - client=0.0.0 . 0 -bootstrap-expect=3-data-dir=/Users/apple/consul_data/application/data/- node=server
这些配置参数的意义如下。
- -server 表示以服务端身份启动。
- -bind 表示绑定到哪个 地址(有些服务器会绑定多块网卡,可以通过 bind 参数强制指定绑定的 地址)
- -client :指定客户端访问的 地址( Consul 有丰富的 AP 接口,这里的客户端指的是浏览器或调用方) ' 0.0 0.0 表示不限客户端 地址。
- -bootstrap expect=3 :表示 Serv 集群最低节点数为 ,低于这个值将无法正常工作(注:ZooKeeper 类似,通常集群数为奇数,以方便选举。 onsul 采用的是 Raft 算法)。如果不使用集群,则可以设置为1.
- -d ata-d 表示指定数据的存放目录(该目录必须存在)。
- -node 表示节点在 We 中显示的名称。
其中, data-dir 可以设置配置信息保存的地址,可以根据所使用的机器设备输入一个已经存在的目录路径。
服务注册与发现
微服务在 Consul 中进行注册后,就能够被其他服务发现了。有关服务注册的过程,主要需要完成以下步骤。
1. 侬赖引用
引用与 Co ul 相关的服务发现和配置管理依赖包,代码如下所示:
<dependency>
<groupid>org . springframework . cloud</groupid>
<artifactid>spring-cloud-starter co sul discovery</artifactid>
</dependency>
<dependency>
<group d>org spri gframework cloud</groupid>
<artifactid>spri ng-cloud-starter- consul- config</artifactid>
</dependency>
其中, discovery 组件提供了服务注册与发现的功能, onfig