【微服务】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来禁用自我保护模式,测试环境可以配置,生产不 建议。
相关推荐
考虑考虑2 小时前
Jpa使用union all
java·spring boot·后端
用户3721574261352 小时前
Java 实现 Excel 与 TXT 文本高效互转
java
浮游本尊3 小时前
Java学习第22天 - 云原生与容器化
java
Serverless社区4 小时前
函数计算的云上计费演进:从请求驱动到价值驱动,助力企业走向 AI 时代
阿里云·云原生·serverless
渣哥5 小时前
原来 Java 里线程安全集合有这么多种
java
间彧5 小时前
Spring Boot集成Spring Security完整指南
java
间彧5 小时前
Spring Secutiy基本原理及工作流程
java
Java水解6 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆9 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学9 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端