了解 Eureka 客户端缓存

mil*_*184 3 java spring-boot netflix-eureka

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

yon*_*oon 7

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

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

  • 尤里卡服务器-eureka.server.responseCacheUpdateInvervalMs

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

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

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

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

还有另一个与此延迟相关的属性。

  • eureka.instance.leaseRenewalIntervalInSeconds

该属性设置 Eureka 客户端的心跳间隔。它的默认值是 30 秒,但你不能调整这个值,因为 Eureka 服务器有一些硬编码逻辑,假设这个时间段是 30 秒。