如果已经用过或者准备用Eureka的小伙伴们可以看下这篇文章,这里的话是博主的一些小分享。
准备使用Eureka的小伙伴应该也是看上了它的保护机制的一个功能,希望我的分享能帮到你后续的一些实践。
首先要先知道它有什么作用
自我保护机制是要避免在网络故障等各类情况下,保持A和B两台或者多台服务器可以在掉线重连后依然可用。如果将自我保护机制关掉的话,我们就先把Eureka的一个重大作用给关闭了,这里要先吐槽一下网上那些没想解决问题就直接把它关闭的人。
博主的话正常情况下都会将这个功能开启,而不是直接关闭,因为它将有其他的解决方案,这是可以调整的。
如果在开发环境下我们很常见的一个报错就是这个,大家都看过吧
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.
这个的提示就是自我保护机制开启后并触发该功能的时候显示。
这里的话就要讲到它为什么会被开启,相信比较多的人度娘之后都只会查到说什么心跳什么blabla的什么大于blabla的话而启动,实际呢这个是因为一个阀值因子eureka.server.renewalPercentThreshold。
这里先讲一下心跳,Eureka的一个服务实例的心跳默认是1分钟两次,所以正常在页面看到的Renews (last min)收到最后一次更新的心跳数值Renews (last min)=服务实例个数✖️2。
然后呢我们再来看看eureka.server.renewalPercentThreshold,这个因子默认是0.85(可以代码设置).
即阀值Renews threshold=服务实例个数✖️2✖️0.85(因子)
说到这里之后能才到我们需要的知道的当threshold>=renews时候会触发保护机制。
以上图片呢是正常设置的另一种情况,我将服务在正常配置的情况下,将网络弄成阻塞状态,因为保护状态是开启的.
当然这是在正常的一情况下会是这个算法,如果是在将是否注册自身的开关(registerWithEureka)关掉后算法是不一样的。
即阀值Renews threshold=(服务实例个数-1)✖️2✖️0.85(因子)
所以当你这样设置的时候还是会触发保护机制,比如现在是有两个服务A和B,你将A的注册服务自身关闭之后,B正常打开的情况下。算法应该是Renews threshold=(2-1)✖️2✖️0.85。
所以在这个情况下也是会进入保护机制的,这个时候我们需要的是设置一个东西就是eureka.server.renewalPercentThreshold=0.49。这个时候阀值就会是0.就不会触发保护状态。
如果有3台就是0.33哦,4台0.25。这样都不会触发机制。但是正常按照可以项目可容错的服务器数量来决定设置。
网友评论