eureka server 服务故障下线清理
2021-09-01 16:22:55 1 举报
eureka server 服务故障下线清理
作者其他创作
大纲/内容
最后清理过期实例信息,就是走服务下线那套东西 ,也就是cancel 方法
是
调用evict 方法,然后进行下线故障服务
如果开启了直接return,也就是不进行服务过期下线的处理
这个lastUpdateTimestamp 时间字段,每次服务续约的时候,就会更新下,不过它更新的时候已经 加了duration 这个时间,这个时间其实就是一个过期时间,默认是90s ,但是这里又加了个duration时间,也就是180 s 才会过期, 不过第一注册的服务它lastUpdateTimestamp 直接就是系统时间,没有多加duration,之后每次续约就会多加了
否
判断实例过期
遍历注册表中的所有实例,然后,找出过期的实例,添加到一个集合中
判断实例过没过期,然后就是判断lastUpdateTimestamp+duration+补偿时间 小于系统时间
获取到注册表的大小,然后乘一个比例(默认是0.85 就是自我保护机制的一个比例)算出来一个值,然后拿注册表的总大小减去这个值,得出最多清理服务数量,然后与过期服务数量进行比对,取最小的那个数量,然后随机下线这么多数量的 实例
这一块 默认180s 才算过期,可以算是个bug ,然后Netflix承认是个bug ,而且不打算修复System.currentTimeMillis() > (lastUpdateTimestamp + duration + additionalLeaseMs)
eureka server
任务执行,首先会获取一个补偿时间,就是这次执行任务的时间与上次执行任务的时间做个减法,得到一个间隔,然后拿这个间隔与你配置的调度间隔进行比对,然后得出来一个补偿的,这个补偿时间主要还是防止服务器时钟问题
判断是不是开启自我保护机制
在eureka server 启动的时候, 有个listener (EurekaBootStrap)会对eureka server 进行初始化工作,然后最后有个注册表的openForTraffic 方法 中调用 父类的postInit创建了一个evictionTimer 定时器,然后是默认1分钟调度一次
0 条评论
下一页