了解 Eureka 客户端缓存
Posted
技术标签:
【中文标题】了解 Eureka 客户端缓存【英文标题】:Understanding Eureka Client Cache 【发布时间】:2018-10-20 04:15:31 【问题描述】:我需要一些帮助来理解为什么在 Eureka 中注册的服务尽管没有实际运行,但仍希望相互通信。例如,我在 Eureka 中注册了服务 A 和服务 B。如果我关闭服务 B,服务 A 仍会尝试与服务 B 通信 30 秒到 3 分钟,即使它没有运行。这样做的目的是什么?有什么办法吗?谢谢!
【问题讨论】:
【参考方案1】:我相信你指的是尤里卡的自我保护模式。
这样做的目的是什么?
自我保护模式旨在处理短期网络故障。实例注册后,Eureka 服务器不会永远将实例保存在注册表中。当实例首次注册时,它会为实例设置租约续订策略。该策略包括实例在从注册表中逐出之前可以错过的心跳次数。
running multiple Eureka servers时,自我保护模式很重要。
您可以通过this SO question了解有关自我保护模式的更多详细信息。
有什么办法可以解决吗?
默认启用。它可以被禁用。
您还可以调整一些属性以确保死的实例尽快被驱逐。
请查看上面链接的 SO 问题以获取有关调整哪些属性的帮助。
【讨论】:
【参考方案2】:如您所知,Netflix 正在运行大量基于 Eureka 的服务器实例。因此,通过 Eureka 查找实例的开销对于 Netflix 来说可能是很大的开销。我想这就是为什么 Eureka 有缓存、轮询间隔和其他导致刷新实例状态延迟的特性。
幸运的是,您可以使用以下属性调整此延迟。
尤里卡服务器 - eureka.server.responseCacheUpdateInvervalMs
Eureka 客户端(API 调用者) - eureka.client.registryFetchIntervalSeconds
Eureka 客户端(API 提供者) eureka.instance.leaseExpirationDurationInSeconds
如果您正在运行的实例数量不是很大,您通常可以减少上述属性。
还有另一个与此延迟相关的属性。
eureka.instance.leaseRenewalIntervalInSeconds
该属性设置Eureka客户端的心跳间隔。它的默认值为 30 秒,但您无法调整此值,因为 Eureka 服务器有一些硬编码逻辑假定此周期为 30 秒。
【讨论】:
以上是关于了解 Eureka 客户端缓存的主要内容,如果未能解决你的问题,请参考以下文章