【问题标题】:Understanding Eureka Client Cache了解 Eureka 客户端缓存
【发布时间】:2018-10-20 04:15:31
【问题描述】:

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

【问题讨论】:

    标签: java spring-boot netflix-eureka


    【解决方案1】:

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

    这样做的目的是什么?

    自我保护模式旨在处理短期网络故障。实例注册后,Eureka 服务器不会永远将实例保存在注册表中。当实例首次注册时,它会为实例设置租约续订策略。该策略包括实例在从注册表中逐出之前可以错过的心跳次数。

    running multiple Eureka servers时,自我保护模式很重要。

    您可以通过this SO question了解有关自我保护模式的更多详细信息。

    有什么办法可以解决吗?

    默认启用。它可以被禁用。

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

    请查看上面链接的 SO 问题以获取有关调整哪些属性的帮助。

    【讨论】:

      【解决方案2】:

      如您所知,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 秒。

      【讨论】:

        猜你喜欢
        • 2020-05-22
        • 1970-01-01
        • 1970-01-01
        • 2017-03-18
        • 2012-07-26
        • 2019-04-24
        • 1970-01-01
        • 2018-02-18
        • 1970-01-01
        相关资源
        最近更新 更多