5. 服务治理机制

../../_images/service_manager.png

6. 服务提供者

6.1. 服务注册

服务启动时服务通过reset请求将自己注册到Eureka,同时带上服务的一些元数据信息。Eureka接收到reset请求后,将元数据信息存储在一个双层结构Map中,第一层的key是服务名,第二层的key是服务实例名。

6.2. 服务同步

上图中两个服务提供者分别注册到两个注册中心,由于注册中心之间的相互注册,当服务提供者发送注册请求到一个注册中心时,它会将该请求转发到相连的其它注册中心,从而实现注册中心之间的服务同步。我们可以从任意一个注册中心获取所有的注册服务信息。

6.3. 服务续约

服务注册完成之后,服务提供者将维护一个心跳来告诉注册中心服务还活着,防止注册中心将实例从服务列表中剔除。eureka.instance.lease-renewal-interval-in-second参数用于定义服务续约任务的调用间隔时间,默认30秒。eureka.instanc.lease-expiration-duration-in-seconds参数用于定义服务失效时间,默认90秒。

7. 服务消费者

7.1. 获取服务

服务消费者启动时,将发送REST请求从服务注册中心获取注册的服务信息列表。为了性能考虑,Eureka会维护一份只度的服务清单来返回给客户端,同时该缓存清单会每隔30秒更新一次。eureka.client.registry-fetch-interval-seconds设置更新缓存服务清单时间。

7.2. 服务调用

服务消费者在获取到服务信息列表后,通过服务名可以获取服务对应的实例名和元数据信息。消费者可以自己选择需要具体调用那个实例,在Ribbon中会默认采用轮询方式进行调用,从而实现客户端的负载均衡。

7.3. 服务下线

系统运行过程中服务停止或重启,服务将发起一个REST请求给注册中心,注册中心将实例状态设置为下线,并且将这个时间传播出去

8. 服务注册中心

8.1. 失效剔除

当服务超过设置的服务失效剔除时间,注册中心将中服务列表中剔除服务实例信息。

8.2. 自我保护

当服务心跳失败比例小于85%时,注册中心将启动自我保护机制,注册中心将不会剔除失效服务。