Skip to content

面试速答(先看这里)

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

60秒标准回答:

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

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

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

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **要点1:**Eureka的自我保护模式正是一种针对网络异常波动的安全保护措施,使用自我保护模式能使Eureka集群更加的健壮、稳定的运行。
  • **要点2:**在正常情况下,Eureka客户端会定期向Eureka服务器发送心跳,以表明它仍然存活和可用。
  • **要点3:**Eureka的自我保护模式是可配置的。
  • **要点4:**自我保护模式默认是开启的,因为它可以在网络不稳定的环境中提供更稳定的服务发现功能。
  • **要点5:**当Eureka进入自我保护模式之后,我们可以做一下几个事情解除这种自我保护:

**记忆锚点:**Eureka → Server → 确保客户端可用性 → 关闭自我保护模式 → 的自我保护模式 → 重启 Eureka Server

易错提醒:

  • 关闭自我保护模式: 使用eureka.server.enable-self-preservation=false来禁用自我保 护模式,测试环境可以配置,生产不建议。
  • 不建议在生产环境中关闭自我保护机制。

加分表达:

  • 如果Eureka服务器在配置的时间间隔内未能从某个服务实例接收到心跳,它通常会将该实例从注册列表中移除,认为该实例不可用。
  • 然而, 在自我保护模式下,如果Eureka服务器在短时间内丢失了对大量服务实例的心跳(15分钟内超过 85% 的客户端),它会认为这是一个网络问题,而不是所有这些服务实例都突然不可用。
  • 可以通过配置参数来调整何时触发自我保护模式,或完全关闭此功能。

追问准备:

  • 围绕「Eureka」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「Server」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「确保客户端可用性」:底层原理是什么?使用时有哪些边界和常见坑?
  • 如果线上出现异常,你会如何定位、验证并规避?

典型回答 ​

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

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

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

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

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

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

java
eureka:
  server:
    enable-self-preservation: true

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

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

  1. 确保客户端可用性:
  • 确保所有客户端实例都运行正常,并且网络连接正常,无阻塞或延迟过高。
  • 检查客户端与 Eureka Server 之间的网络连接是否稳定。
  1. 等待自动恢复:
  • 正常的情况下,等待网络恢复后,Eureka Server 会自动关闭自我保护模式。
  1. 重启 Eureka Server:
  • 如果问题仍然存在,尝试重启 Eureka Server。有时候,重启可以解决暂时的问题或状态不一致。
  1. 调整自我保护模式的阈值:
  • 检查 eureka.server.enableSelfPreservation 配置项,确保它被设置为 true,这是自我保护模式的开启开关。
  • 你可以调整 eureka.server.renewalPercentThreshold 配置来改变触发自我保护模式的阈值。
  1. 查看日志排查问题:
  • 查看 Eureka Server 和客户端的日志,找出可能导致问题的具体原因。
  1. 关闭自我保护模式:
  • 使用eureka.server.enable-self-preservation=false来禁用自我保护模式,测试环境可以配置,生产不建议。