Eureka

Eureka 是一种 RESTful(表述性状态传输)服务,主要用于 AWS 云中,用于中间层服务器的发现、负载平衡和故障转移。

它在 Netflix 中端基础设施中发挥着关键作用。

什么是 Eureka

Eureka 是一种基于 REST(Representational State Transfer)的服务,主要用于 AWS 云中,用于定位服务,以实现中间层服务器的负载平衡和故障转移。

我们称此服务为 Eureka 服务器。

Eureka 还附带了一个基于 Java 的客户端组件,即 Eureka 客户端,这使得与服务的交互更加容易。

客户端还有一个内置的负载均衡器,可以进行基本的循环负载均衡。

在 Netflix,一个更复杂的负载均衡器包裹 Eureka 以提供基于流量、资源使用、错误条件等多个因素的加权负载均衡,以提供卓越的弹性。

Eureka 需要什么?

在 AWS 云中,由于其固有的性质,服务器来来去去。

与使用具有众所周知的 IP 地址和主机名的服务器一起工作的传统负载均衡器不同,在 AWS 中,负载均衡在使用负载均衡器动态注册和取消注册服务器方面需要更加复杂。

由于AWS还没有提供中间层负载均衡器,Eureka填补了中间层负载均衡领域的一大空白。

Eureka 与 AWS ELB 有何不同?

AWS Elastic Load Balancer 是一种负载均衡解决方案,适用于暴露于最终用户 Web 流量的边缘服务。

Eureka 满足了中间层负载平衡的需求。虽然理论上您可以将您的中间层服务置于 AWS ELB 之后,但在 EC2 Classic 中,您将它们暴露给外部世界,从而失去 AWS 安全组的所有用处。

AWS ELB 也是传统的基于代理的负载均衡解决方案,而 Eureka 的不同之处在于负载均衡发生在实例/服务器/主机级别。客户端实例知道关于它们需要与哪些服务器通信的所有信息。这是一种祝福还是一种诅咒,取决于您如何看待它。

如果您正在寻找 AWS 现在提供的基于粘性用户会话的负载平衡,Eureka 不提供开箱即用的解决方案。

在 Netflix,我们更喜欢我们的服务是无状态的(非粘性的)。这促进了更好的可扩展性模型,Eureka 非常适合解决这个问题。

将基于代理的负载平衡与使用 Eureka 的负载平衡区分开来的另一个重要方面是,您的应用程序可以对负载平衡器的中断具有弹性,因为有关可用服务器的信息缓存在客户端上。

这确实需要少量内存,但可以获得更好的弹性。

Eureka 与 Route 53 有何不同?

Route 53 是一种命名服务,就像 Eureka 可以为中层服务器提供相同的服务,但相似之处仅止于此。

Route 53 是一项 DNS 服务,它甚至可以为非 AWS 数据中心托管您的 DNS 记录。

Route 53 还可以跨 AWS 区域执行基于延迟的路由。

Eureka 类似于内部 DNS,与全球的 DNS 服务器无关。

Eureka 也是区域隔离的,因为它不知道其他 AWS 区域的服务器。保存信息的主要目的是在一个区域内进行负载平衡。

虽然您可以使用 Route 53 注册您的中间层服务器并依靠 AWS 安全组来保护您的服务器免受公共访问,但您的中间层服务器身份仍然暴露于外部世界。它还伴随着传统的基于 DNS 的负载平衡解决方案的缺点,其中流量仍然可以路由到可能不健康甚至可能不存在的服务器(在 AWS 云的情况下,服务器可以随时消失)。

Eureka 在 Netflix 中是如何使用的?

在 Netflix,Eureka 除了在中间层负载平衡中发挥关键作用外,还用于以下目的。

对于使用 Netflix Asgard 进行红/黑部署 - 一种开源服务,使云部署更容易。 Eureka 与 Asgard 交互,以便在出现问题时快速无缝地在旧/新版本的服务部署之间切换 - 特别是考虑到启动 100 个实例来部署一个版本可能需要很长时间。

对于我们的 cassandra 部署,将实例从流量中取出以进行维护。

为我们的 memcached 缓存服务识别环中的节点列表。

用于出于各种其他原因携带有关服务的其他附加应用程序特定元数据。

我应该什么时候使用 Eureka?

您通常在 AWS 云中运行,并且您拥有许多中间层服务,您不想向 AWS ELB 注册或暴露来自外部世界的流量。

您要么正在寻找一个简单的循环负载平衡解决方案,要么愿意根据您的负载平衡需求围绕 Eureka 编写自己的包装器。

您不需要粘性会话并将会话数据加载到外部缓存(例如 memcached)中。

更重要的是,如果您的架构适合基于客户端的负载均衡器受青睐的模型,则 Eureka 可以很好地适应这种用法。

参考资料

https://github.com/Netflix/eureka/wiki