本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名原文链接~~~

SpringCloud(6)之自我保护机制

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:


在前面内容中我们在做测试的时候,我们可能会发现 Eureka 页可能会显示如下红字:

image.png

这个其实就是因为 Eureka 的自我保护机制引起的。默认情况下,如果 EurekaServer 在一定时间内没有接收到某个微服务实例的心跳,EurekaServer 将会注销该实例(默认为 90 秒)。但是当网络分区故障时,微服务与 EurekaServer之间无法正常通信,以上行为可能就变得非常危险了——因为微服务本身其实是健康的,此时本不应该注销这个微服务。Eureka 通过“自我保护模式”来解决这个问题:当 EurekaServer 节点在短时间内丢失过多的客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。一旦进入该模式,EurekaServer 就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。当网络故障回复后,EurekaServer 节点会自动退出自我保护模式。

在自我保护模式中,EurekaServer 会保护服务注册表中的信息,不注销任何服务实例。当它收到的心跳数重新恢复到阈值以上时,该 EurekaServer 就会自动退出自我保护模式。它的设计哲学就是宁可保留错误的服务注册信息,也不盲目注销任何可能健康的服务实例,其目的是遵循 AP 原则。

关于 CAP 原则可参考【CAP 定理的含义

综上,自我保护模式是一种应对网络异常的安全保护措施,它的架构哲学是宁可同时保留所有微服务(无论微服务是健康还是不健康),也不盲目注销任何健康的微服务。使用自我保护模式,可以让 Eureka 集群更加的健壮、稳定。

在 SpringCloud Eureka 服务端工程中,可以通过 eureka.server.enable-self-preservation = false 来禁用自我保护模式。

# SpringCloud  

如果这篇文章对您有帮助,可点击下方链接分享给你的朋友们😋,如果遇到问题欢迎评论、留言~~~😇

评论

公众号:zze_coding

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×