服务注册发现:Eureka源码剖析(9)核心机制之服务实例的自动故障感知及自动摘除机制
- 故障感知和摘除指的是什么?
正常下线,会通过eureka client的shutdown方法进行,走下线流程。
当因为一些原因,没有通过正常下线的方式,服务实例却下线了,这种异常情况,成为故障。
感知,eureka server会通过定时检查多久没心跳了,感知到这种故障服务实例,并自动从注册表中把这个服务实例摘除。
eureka的自动故障感知和自动摘除机制
在eureka server启动的最后一步,openForTraffic中,最后一步super.postInit()方法里,启动了一个定时过期任务evictionTask
- 定时过期任务延迟1分钟开始执行,然后每间隔1分钟执行一次
- 该任务会遍历本地注册表里,所有超过3分钟没有心跳的服务实例,将这些服务实例收集起来,这一步算是完成了自动感知机制
- 默认情况下,一次性最多只会过期15%的服务实例
- 每个服务实例的剔除,是从收集到的过期服务实例列表里随机选择的,最多选择15%个
- 接着正式执行每个服务实例的剔除操作
- 从本地注册表里摘除这个故障实例(这一步算是完成了自动摘除机制了)
- 将这个实例放到最近下线队列里
- 从overriddenInstanceStatusMap中移除
- 将这个实例放到最近变更队列里
- 失效响应缓存(就是那个注册表多级缓存)
- Title: 服务注册发现:Eureka源码剖析(9)核心机制之服务实例的自动故障感知及自动摘除机制
- Author: 侯乾
- Created at : 2020-03-03 19:26:18
- Updated at : 2020-03-03 19:26:18
- Link: http://houqian.github.io/2020/03/03/服务注册发现:Eureka源码剖析(9)核心机制之服务实例的自动故障感知及自动摘除机制/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments