Spring Cloud服务治理框架

目前流行的服务治理框架有Consul、Zookeeper、Eureka。

这些服务治理框架都需要解决一致性算法问题,Consul无疑是这方面的佼佼者。

Consul使用Raft协议复制状态,提供强烈一致性。

Eureka要达到强一致性需借助ZooKeeper。

注:Raft和Paxos不具备可比性。两者都以解决联机网络中的共识问题为目标,Paxos关注共识机制,Raft围绕复制实现。

Consul

Consul是由google开源的go语言版服务治理框架。

Consul特点

内置服务注册、发现,分布式一致性协议实现、健康检查、Key/Value存储、多数据中心方案。

每个节点都需运行agent。

两种运行模式:server、client。

官方推荐每个数据中心3~5个server节点,保证server-leader选举的正确性和数据安全。

Eureka

Java版分布式微服务治理框架,具有服务注册与服务发现功能。

Eureka服务端

支持高可用配置、强一致性, 集群模式部署。

发生分片故障时转入自我保护模式。

Eureka客户端

处理服务注册与发现。

向注册中心注册自身提供的服务,周期性地发送心跳请求更新服务租约(续约/Renew)。

把从服务端获取的服务信息缓存在本地,服务端每隔30秒更新一次服务信息,周期性的刷新服务状态。

其它语言也有自己的客户端框架:Steeltoe(.NET平台)、eureka-js-client(Node.js)。

Eureka引入了Region和Zone的概念:

客户端会优先调用同一个Zone下的服务,其次是同一个Region下的其他Zone。

Eureka Server会对一定时间内(默认90秒)没有续约的服务执行剔除。

Spring Cloud Eureka

能与Spring Boot项目无缝集成。

Spring Cloud Eureka分为Server与Discovery Client。

服务注册与销毁

Spring Cloud服务注册/销毁过程依赖如下三个接口。

org.springframework.context.Lifecycle

生命周期接口,应用启动/停止时会调用此接口的实例,多个实例间依靠phase()方法确定调用顺序,phase越小代表最先启动,最后停止。回调超时时间默认为30秒。

org.springframework.cloud.client.ServiceInstance

Spring Cloud中服务实例接口。

org.springframework.cloud.client.serviceregistry.ServiceRegistry<R extends Registration>

向服务注册中心注册/注销实例的接口。

利用Lifecycle接口,在应用启动时调用ServiceRegistry接口,对ServiceInstance实例执行注册,在应用销毁时发送服务注销请求。