eureka server 自我保护机制原理
2021-09-01 16:23:44 5 举报
eureka server 自我保护机制原理
作者其他创作
大纲/内容
需要显示
eureka server 初始化的时候,会去其他节点同步注册表信息
在注册表AbstractInstanceRegistry 类中有两个变量 expectedNumberOfRenewsPerMin: 期望心跳数numberOfRenewsPerMinThreshold:最小心跳数的阈值(其实就是期望心跳数* 0.85 )
其实就是比对这个上一分钟收到的心跳<上一个时间计数器>是否大于它期望心跳数的85%, 大于的话还好说,不启动自我保护,如果小于了就会启动自我保护机制
还有一个变量renewsLastMin这个是专门记录收到心跳数的这个对象里面有2个计数器,一个当前心跳计数器一个是上一个时间的计数器
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE
当前计数器
当前计数器+1
这里为什么+2,因为默认服务续约是30s一次,一分钟也就是2次,它这里直接硬编码写死了,如果心跳时间改变的话,它这里就出不准,出现bug
在header.jsp中
期望心跳数+2 ( expectedNumberOfRenewsPerMin+2 )最小心跳阈值 也重新算下(numberOfRenewsPerMinThreshold 重新计算)
将<当前计数器>里面的值设置到<上一个时间计数器>中,重置<当前计数器>的数值为0
服务下线
如果系统启动了5分钟以上了,然后还实际心跳数小于期望心跳数最小阈值
期望心跳数= count*2( expectedNumberOfRenewsPerMin = count*2 )最小心跳阈值 也重新算下(numberOfRenewsPerMinThreshold 重新计算)
关于期望心跳数的初始化的
服务注册
同步来后,会遍历每个实例信息,走注册方法,然后返回一个同步实例数量count,然后后面会初始化这两个成员
期望心跳数-2 ( expectedNumberOfRenewsPerMin-2 )最小心跳阈值 也重新算下(numberOfRenewsPerMinThreshold 重新计算)
上一个时间计数器
在注册表AbstractInstanceRegistry调用postInit的时候,会启动一个调度器,然后1分钟一次
自我保护机制启用自我保护机制 首先要打开这个功能,它默认是开启的
服务续约
期望心跳数期望最小心跳数
eureka server 控制台,然后出现的那行大红字
判断是否开启自我保护机制
0 条评论
回复 删除
下一页