三、spring cloud eureka(组件调用关系内部原理

2019-03-24  本文已影响0人  小manong

转载:微服务注册中心 Eureka 架构深入解读

一、服务组件功能

前面已经说了服务组件各自的功能,这里回顾一下:

1、服务提供者

2、服务消费者

3、服务注册中心

二、服务组件功能原理分析

1、服务注册register

1、保存服务信息,将服务信息保存到 registry 中;
2、更新队列,将此事件添加到更新队列中,供 Eureka Client 增量同步服务信息使用。
3、清空二级缓存,即 readWriteCacheMap,用于保证数据的一致性。
4、更新阈值,供剔除服务使用。
5、同步服务信息,将此事件同步至其他的 Eureka Server 节点。

2、服务续约机制renew

1、更新服务对象的最近续约时间,即 Lease 对象的 lastUpdateTimestamp;
2、同步服务信息,将此事件同步至其他的 Eureka Server 节点。

3、服务注销机制cancel

1、删除服务信息,将服务信息从 registry 中删除;
2、更新队列,将此事件添加到更新队列中,供 Eureka Client 增量同步服务信息使用。
3、清空二级缓存,即 readWriteCacheMap,用于保证数据的一致性。
4、更新阈值,供剔除服务使用。
5、同步服务信息,将此事件同步至其他的 Eureka Server 节点。

4、服务剔除机制evit

(1)判断是否满足服务剔除的条件

1、关闭了自我保护
2、如果开启了自我保护,需要进一步判断是 Eureka Server 出了问题,还是 Eureka Client 出了问题,如果是 Eureka Client 出了问题则进行剔除。

自我保护阈值 = 服务总数 * 每分钟续约数 * 自我保护阈值因子。
每分钟续约数 =(60S/ 客户端续约间隔)
例如:
如果有 100 个服务,续约间隔是 30S,自我保护阈值 0.85。
自我保护阈值 =100 * 60 / 30 * 0.85 = 170。
如果上一分钟的续约数 =180>170,则说明大量服务可用,是服务问题,进入剔除流程;
如果上一分钟的续约数 =150<170,则说明大量服务不可用,是注册中心自己的问题,进入自我保护模式,不进入剔除流程。

(2)找出过期的服务

遍历所有的服务,判断上次续约时间距离当前时间大于阈值就标记为过期。并将这些过期的服务保存到集合中。

(3)剔除服务

在剔除服务之前先计算剔除的数量,然后遍历过期服务,通过洗牌算法确保每次都公平的选择出要剔除的任务,最后进行剔除。剔除服务后1、删除服务信息,从 registry 中删除服务。2、更新队列,将当前剔除事件保存到更新队列中。3、清空二级缓存,保证数据的一致性。

5、服务获取机制

6、服务同步机制

三、源码分析

待定

上一篇 下一篇

猜你喜欢

热点阅读