了解Eureka客户端缓存

时间:2018-05-09 23:58:38

标签: java spring-boot netflix-eureka

我需要一些帮助来理解为什么在Eureka中注册的服务尽管没有实际运行但仍希望彼此通信。例如,我在Eureka注册了服务A和服务B.如果我关闭服务B,服务A仍会尝试与服务B通信30秒到3分钟,即使它没有运行。这样做的目的是什么?它有什么办法吗?谢谢!

2 个答案:

答案 0 :(得分:1)

如您所知,Netflix正在运行基于Eureka的大量服务器实例。因此,通过Eureka查找实例的开销可能是Netflix的巨大开销。我猜这就是为什么Eureka有缓存,轮询间隔和其他功能导致刷新实例状态延迟的原因。

幸运的是,您可以使用以下属性调整此延迟。

  • Eureka Server - eureka.server.responseCacheUpdateInvervalMs

    • 30秒。 Eureka服务器的API有自己的缓存用于响应。默认是相当大的时期。您可以降低此值。
  • Eureka客户端(API来电) - eureka.client.registryFetchIntervalSeconds

    • 30秒。 Eureka客户端定期从Eureka服务器获取实例状态。您可以降低此值。
  • Eureka客户端(API提供商) eureka.instance.leaseExpirationDurationInSeconds

    • 90秒。注册到Eureka服务器的每个实例都可以设置自身的到期持续时间。如果Eureka服务器在此期间未收到Eureka客户端的任何心跳,则该实例将到期。默认情况下,每个Eureka客户端每30秒发送一次心跳。

如果您运行的实例数量不是很大,通常可以减少以上属性。

还有另一个与此延迟有关的财产。

  • eureka.instance.leaseRenewalIntervalInSeconds

此属性设置Eureka客户端的心跳间隔。默认值为30秒,但您无法调整此值,因为Eureka服务器具有一些硬编码逻辑,假定此时间段为30秒。

答案 1 :(得分:0)

我相信你指的是尤里卡的自我保护模式。

  

这是为了什么目的?

自保护模式旨在处理短时间网络故障。一旦实例注册,Eureka服务器就不会永远将实例保留在注册表中。当实例首次注册时,它会使用实例设置租约续订策略。该策略包括实例在从注册表中逐出之前可能遗漏的心跳次数。

当您running multiple Eureka servers时,自我保护模式非常重要。

您可以查看this SO问题,了解有关自我保护模式的详细信息。

  

还有什么方法吗?

默认情况下启用。它可以被禁用。

您还可以调整一些属性,以确保尽快驱逐死实例

请仔细阅读上面链接的问题,以获取有关要调整哪些属性的帮助。