服务的发现和调用构成了微服务交互的基础,如图:其中,实线部分部分代表服务的调用流程,而虚线部分代表服务的注册和发现过程。
一、服务治理解决方案
当具备服务注册中心之后,服务治理涉及的校色包含:
1.注册中心
提供服务注册和发现
2.服务提供者
将自身服务注册到注册中心,从而使服务消费者能够找到
3.服务消费者
服务消费者从注册中心获取注册服务列表,从而实现服务消费。
二、服务治理的需求和模型
1.服务治理的需求
服务注册中心是路由信息的存储仓库,也是服务提供者和消费者进行交互的媒介。注册中心功能要求:
(1)服务状态管理
当服务运行状态发生变化时,注册中心需要确保这些状态变更都能得到有效的维护。
(2)高可用
为了确保服务的高可用性,一般也需要注册中心本身保持高可用性,构建对等集群,指集群中的所有服务器都提供同样的服务,客户端只需要连接到任何一台服务器即可,任何一台服务器宕机都不影响客户端正常使用。
(3)易伸缩
一般通过负债均衡机制可以实现服务访问的横向伸缩,而常见的负载均衡策略包括服务端负载均衡和客户端负载均衡。
(4)方便集成
注册中心作为一种平台化解决方案也应该提供多种客户端技术的集成支持。
2.注册中心模型
为了提高服务路由的效率和容错率,服务消费者可以配备缓存机制以加速服务路由,服务中心不可用时服务消费者可以利用本地的缓存路由实现对现有服务的可靠调用。
三、服务治理的基本方案
1.服务流程和策略
服务消费者获取服务列表
(1)轮询机制
服务消费者定期调用注册中心提供的服务获取接口获取最新的服务并更新到本地缓存。
(2)监听和通信机制
服务监听机制确保消费者能够实现实时监控服务更新状态,是一种被动接受变更通知的实现方案,通常采用监听器(watcher)及回调(callback)机制。
服务发布订阅流程
2.构建单个Eureka服务
(1)需要引入spring-cloud-starter-ecreka-server
启动类加上@EnableEurekaServer 标识是Eureka服务组件
配置信息:
(2)服务端资源配置
服务端资源配置用于控制客户端行为,以wureka.server开头
(3)客户端配置
客户端配置从客户端角度出发考虑,以eureka.client开头
eureka.client开头,分别是registerWithEureka 和 fetchRegistry其中registerWithEureka用于指定改客户端实列是否在eureka服务器上注册自己的信息以供其他服务进行发现;而fetchRegistry用于指定改客户端是否获取eureka服务器上的注册信息。
四、Eureka基本架构
1.Eureka服务注册和发现
服务注册
当Eureka客户端想Eureka服务端注册时,需提供自身元素,比如IP、端口等信息。
服务续约
在服务续约中,Eureka 客户端会每隔30秒发送一次心跳请求来进行服务续约,老告知Eureka服务端该客户端仍然存在,服务器不要剔除自己。
服务下线
Eureka客户端关闭程序时向Eureka服务器发送取消请求,发送后该客户端信息将从服务器的注册实列表中删除。
服务剔除
当客户端连续90秒没有想Eureka服务端发送续约心跳。服务端就会将该客户端从服务注册列表中删除。
获取服务注册列表信息
Eureka客户端从Eureka服务器获取服务注册列表,并将其缓存到本地。每30秒更新一次。
服务注册时序图
服务提供者服务续约时序图
服务消费者定期更新服务缓存时序图
五、Eureka高可用架构
Netflix Eureka 获取服务端节点时序图