【微服务】Eureka的自我保护机制

Eureka的自我保护模式正是一种针对网络异常波动的安全保护措施,使用自我保护模式能使Eureka集群更加的健壮,稳定的运行。

在正常情况下,Eureka客户端会定期向Eureka服务器发送心跳,以表明它仍然存活和可用。如果Eureka服务器在配置的时间间隔内未能从某个服务器实例收到心跳,它通常会将该实例从注册列表中移除,认为该实例不可用。

然而,在自我保护模式下,如果Eureka服务器在短时间内丢失了对大量服务实例的心跳(15分钟超过85%的客户端),它会认为这是一个网络问题,而不是所有这些服务实例都突然不可用。因此,服务器将进入自我保护模式。

当进入自我保护模式时,会存在以下行为:

  • 停止移除服务实例:Eureka服务器在自我保护模式下不会因为缺少心跳而移除任何服务实例,即使服务实例停止发送心跳,它们仍然会被保留在注册表中。
  • 保持服务注册表状态:这可以确保在网络故障恢复后,服务消费者仍然能够发现所有原先注册的服务实例,无需等待这些实例重新注册和上线。
  • 记录状态和警告:Eureka服务器会在其状态页面上显示它是否处于自我保护模式,并显示相关的警告信息。

Eureka的自我保护模式是可配置的。可以通过配置参数来调整何时触发自我保护模式,或完全关闭此功能。例如,可以通过修改 eureka.server.enable-self-preservation 的配置值来开启或关闭自我保护模式。

复制代码
eureka:
  server:
    enable-self-preservation: true

自我保护模式默认是开启的,因为它可以在网络不稳定的环境中提供更稳定的服务发现功能。不建议在生产环境中关闭自我保护模式。

当Eureka进入自我保护模式之后,我们可以做以下几个事情解除这种自我保护:

  1. 确保客户端可用性:
    1. 确保所有客户端实例都运行正常,并且网络连接正常,无阻塞或延迟过高。
    2. 检查客户端与 Eureka Server 之间的网络连接是否稳定。
  2. 等待自动恢复:
    1. 正常的情况下,等待网络恢复后,Eureka Server 会自动关闭自我保护模式。
  3. 重启 Eureka Server:
    1. 如果问题仍然存在,尝试重启 Eureka Server。有时候,重启可以解决暂时的问题或状态不一致。
  4. 调整自我保护模式的阈值:
    1. 检查 eureka.server.enableSelfPreservation 配置项,确保它被设置为 true,这是自我保护模式的开启 开关。
    2. 你可以调整 eureka.server.renewalPercentThreshold 来改变触发自我保护模式的阈值。
  5. 查看日志排查问题:
    1. 查看 Eureka Server 和客户端的日志,找出可能导致问题的具体原因。
  6. 关闭自我保护模式:
    1. 使用eureka.server.enable-self-preservation=false来禁用自我保护模式,测试环境可以配置,生产不 建议。
相关推荐
ps酷教程7 小时前
Jackson 解决没有无参构造函数的反序列化问题
java
NiceCloud喜云7 小时前
Opus 4.8 的 Effort Control 怎么选:Low 到 Max 五档策略
android·java·大数据·前端·c++·python·spring
_日拱一卒8 小时前
LeetCode:994腐烂的橘子
java·数据结构·算法·leetcode·深度优先
隔窗听雨眠9 小时前
Nginx网关响应慢排查手记
java·服务器·nginx
智慧物业老杨9 小时前
智慧物业合同周期管理系统:从风险预警到智能交接的全流程数智化落地方案
java·人工智能·python
源码宝9 小时前
MES系统源码:Java8 + SpringBoot2.7 + MySQL8 + Redis,后端源码清爽易扩展
java·后端·源码·springboot·mes系统·源码二开·mes源码
JAVA社区10 小时前
Java高级全套教程(十)—— SpringCloudAlibaba超详细实战详解
java·开发语言·spring cloud·面试·职场和发展
金銀銅鐵10 小时前
[Java] 如何理解 class 文件中方法的 descriptor?
java·后端
云烟成雨TD10 小时前
Spring AI Alibaba 1.x 系列【63】AI Agent 长期记忆
java·人工智能·spring
憧憬成为java架构高手的小白10 小时前
苍穹外卖--day09
java·spring boot·百度