默认情况下,如果Eureka在 一定时间内没有接收到某个微服务实例的心跳,Eureka Server 将会注销该实例(默认90秒)。但是当网络分区故障发生时, 微服务与Eureka Server无法通信,以上行为可能变得非常危险。--因为微服务本身其实是健康的,此时本不应该注销这个微服务。
Eureka通过“自我保护模式” 来解决这个问题。当Server节点在短时间内丢失过多客户端(可能发生网络分区故障),那么这个节点就会进入自我保护模式。
一旦进入该模式,Server将会保护服务注册表中的信息,不再删除服务注册表中的数据(即不会注销任何微服务)。当故障恢复后,Server节点会自动退出该模式。
自我保护模式是一种应对网络异常的安全保护措施,它是Eureka的一种架构哲学:宁可同时保留所有微服务(健康或不健康均保留),也不盲目注销任何健康的微服务。
此模式使Eureka集群更加健壮、稳定。