侧边栏壁纸
博主头像
张种恩博主等级

一个能运维的 JPG 搬运工

  • 累计撰写 709 篇文章
  • 累计创建 62 个标签
  • 累计收到 27 条评论

目 录CONTENT

文章目录

SpringCloud(6)之自我保护机制

张种恩
2018-10-06 / 0 评论 / 0 点赞 / 349 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2020-04-13,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

在前面内容中我们在做测试的时候,我们可能会发现 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 来禁用自我保护模式。

0

评论区