什么是自我保护模式呢?
自我保护模式是指在网络出现异常的情况下,由于Eureka Server无法收到客户端的心跳续约,Eureka Server会判断该节点不可用,但其实该节点可能是正常的,可用的。为了避免误删,Eureka Server引入了自我保护模式。一旦Eureka Server发现当前收到的心跳总次数小于心跳阈值的85%(默认值),就会进入自我保护模式,此时Eureka Server不会清理任何节点。直到Eureka Server收到的心跳总次数大于等于心跳阈值的85%。
自我保护模式的设计哲学是:在不确定节点是否可用的情况下,尽可能保留节点。
这样可能存在的问题是:因为节点可能真的不可用了,这样就导致客户端请求了不可用的节点。
eureka.server.enableSelfProtected
配置自我保护模式可以使用这个开关,当为true的时候,开启自我保护模式,目前,新系统启用了自我保护模式。
当发生网络分区的时候,Eureka Server和客户端的通信被终止,Eureka Server 端收不到大部分的客户端的续约,这个时候,如果直接将没有收到心跳的客户端删除,那么会误删可用的客户端,这不符合AP理论,所以Eureka宁可保留也许已经宕机了的客户端 , 也不愿意将可以用的节点剔除。 从这一点上,也就保证了Eureka程序的健壮性,符合AP理论。
这里有一个点需要注意,就是Eureka Server的过期时间(默认60s) ,客户端的续约时间(默认30s) , 这个配置最好不要更改,如果更改的话就会打破自我保护机制的规则。
网友评论