大话SpringCloud---Eureka的自我保护
相信大家第一次使用Eureka作为服务注册中心时,都看到这一行话吧。这个是Eureka的自我保护机制。
什么是自我保护机制?
先来讲一个小故事吧。小明大学毕业后出来租房子住,年前找了个不错的房子。于是先签了合同。但是过年回家时赶上了疫情,一直被困在家里出不来。这时小明开始拖欠房租了。刚刚拖欠一天,房东就把小明的东西丢了出去…
有点现实,但我们也会想房东有点不近人情。如果房东先等几天,打个电话问下小明情况,说不定会好一点。
而自我保护机制正是如此。
默认情况下,如果EurekaServer在一定时间内没有接收到某个微服务实例的心跳EurekaServer将会注销该实例(默认90秒)。但是当前当网络分区故障发生时(延时、卡顿、拥挤),微服务与EurekaServer之间无法正常通信。以上行为可能变得非常危险了——因为微服务本身其实是健康的,此时本不该注销这个微服务。Eureka通过“自我保护模式”来解决这个问题——当EurekaServer节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。
简单来说,就一句话,好死不如赖活着。如果一段时间没有收到微服务的心跳反应,先不急着注销,等一段时间看看。对于可能是健康的微服务宁可留着,也绝不错杀。这样子提高了整个系统的可用性和容错率。符合分布式CAP中的AP。
再回到那个故事,原来小明不是故意拖欠房租,只是家里网络问题,没有网络,第二天网络就好了。而房东选择了等,于是就等到了小明的房租。这里房东就是EurekaServer,而小明就是EurekaClient。
最后再来看一下官方的定义,感谢观看????
自我保护模式正是一种针对网络异常波动的安全保护措施,使用自我保护模式能使Eureka集群更加的健壮、稳定的运行。