永不过期的自我保护功能对群集自动扩展功能不友好。 当我们在减少负载后缩减服务规模时,大量关闭的实例可能会触发自我保留。
据我了解,自我保护旨在容忍短期网络问题。但是已经存在一些设置,可以让我们调整一些公差窗口:
eureka.instance.lease-expiration-duration-in-seconds = 90
eureka.instance.lease-renewal-interval-in-seconds = 30
我面对一些建议,不要关闭自我保护,但似乎带来的痛苦大于收获。我想念什么吗?
答案 0 :(得分:1)
首先,您需要区分Eureka客户端的正常关闭和不正常终止。自我保留模式只关心不干净的终止。
也就是说,当您缩减服务器规模时,如果您使应用程序正常关闭(注销),则不会激活自我保存模式。
如果您使用的是基于Spring Cloud的Eureka客户端,则在应用程序关闭时将完成此正常关闭。问题是某些Spring云版本存在有关发送关闭(Eureka注销)消息的问题。因此,如果要确定,只需在缩减实例后立即通过REST API将注销消息发送到Eureka服务器。
另一种可能的方法是降低自我保存的门槛。
eureka:
server:
renewal-percent-threshold: 0.50
还有一件事。
更改eureka.instance.leaseRenewalIntervalInSeconds
的值时需要小心。原始的Eureka服务器源代码在计算自我保留模式的阈值时假定该值为30秒。我不确定这个硬编码部分是否仍然存在于最新的Spring云发行版中。您需要仔细检查。