【发布时间】:2018-08-25 16:42:19
【问题描述】:
在 Cloud Foundry 中,所有应用都可以通过 Cloud Foundry 负载平衡器访问。 每个负载均衡器都有一个用于调用应用程序的 url。 即使有隐藏的方式(例如 X-CF-APP-INSTANCE), 它并不意味着直接调用应用实例。
Eureka 具有高可用性和分区容错性,但缺乏一致性(CAP 定理)。 为了克服注册表数据的陈旧性,Netflix 使用客户端负载平衡 (Ribbon)。 (见:https://github.com/Netflix/eureka/wiki/Eureka-2.0-Architecture-Overview)
因为 Cloud Foundry 中的应用是通过其负载均衡器调用的,所以它会向 Eureka 负载均衡器的地址。如前所述,应用程序实例甚至没有地址。 为了使其更明显,假设有两个应用程序 A 实例(a1 和 a2)在 Eureka 上注册。 Eureka 现在有两个应用程序 A 的条目,但都分配了相同的地址。
现在当 Ribbon 发生以克服 Eureka 的一致性问题时,重试很可能与第一次尝试指向相同的实例。 因此,使用 Ribbon 的故障转移不适用于 Cloud Foundry 中的 Eureka。
应用程序的所有实例都分配到 Eureka 中的同一地址这一事实在许多情况下使事情变得复杂。 即使是 Eureka 的复制,我们也只能通过一种变通方法来解决。涡轮机需要以推式等方式进给。
我们正在考虑增强 Eureka 以设置 X-CF-APP-INSTANCE 标头。 现在在此之前,我们想知道是否有人知道让 Eureka 真正用于云代工的更简单方法?
【问题讨论】:
标签: java netflix-eureka spring-cloud-netflix netflix-ribbon