如何调整 Netflix eureka 自我保护以处理自动缩放?

How to tune Netflix eureka self preservation to handle autoscaling?

永不过期的自我保护功能看起来对集群自动扩展能力不太友好。 当我们在减少负载后缩减我们的服务时,关闭的实例可能会触发自我保护。

据我了解,自我保护试图容忍短期网络问题。但是已经存在允许我们调整一些容差的设置 window:

eureka.instance.lease-expiration-duration-in-seconds = 90
eureka.instance.lease-renewal-interval-in-seconds = 30

我听过一些建议不要关闭自我保护,但似乎痛苦多于收获。我错过了什么吗?

首先需要区分Eureka客户端的正常关机不干净终止。自保模式只关心unclean termination.

也就是说,当你缩小你的服务器时,如果你让你的应用程序正常关闭(取消注册),自我保护模式将不会被激活。

如果您正在使用 Spring 基于云的 Eureka 客户端,此正常关闭将在应用程序关闭时完成。问题是某些 Spring 云版本存在发送关闭(Eureka 取消注册)消息的问题。因此,如果您想确保,只需在缩减缩减实例后通过 REST API 向 Eureka 服务器发送取消注册消息。

另一种可能的方法是降低自我保护的门槛。

eureka:
  server:
    renewal-percent-threshold: 0.50

还有一件事。 更改 eureka.instance.leaseRenewalIntervalInSeconds 值时需要小心。原始Eureka服务器源代码在计算自我保护模式的阈值时假定该值为30秒。我不确定这个硬编码部分是否仍然存在于最新的 Spring 云版本中。你需要仔细检查。