Eureka是一种基于REST(Representational State Transfer)的服务,主要用于AWS云,用于定位服务,以实现中间层服务器的负载平衡和故障转移。我们叫这种服务–Eureka Server。Eureka还附带了一个基于Java的客户端组件Eureka Client,它使与服务的交互变得更加容易。
客户端还有一个内置的负载均衡器,可以进行基本的循环负载均衡。在Netflix,一个更复杂的负载均衡器包装Eureka,根据流量,资源使用,错误条件等多种因素提供加权负载平衡,以提供卓越的灵活性。
在AWS云中,由于其固有的特性,服务器来来去去。与使用具有众所周知的IP地址和主机名的服务器的传统负载均衡器不同,在AWS中,负载均衡在使用负载均衡器注册和取消注册服务器时需要更加复杂。由于AWS尚未提供中间层负载均衡器,因此Eureka填补了中端负载均衡领域的巨大空白。
AWS Elastic Load Balancer是面向最终用户Web流量的边缘服务的负载平衡解决方案。 Eureka满足了中层负载平衡的需求。
虽然理论上您可以将您的中间层服务置于AWS ELB之后,但在EC2 classic中,您会将它们暴露给外部世界,从而失去AWS安全组的所有用处。AWS ELB也是传统的基于代理的负载平衡解决方案,而与Eureka不同的是,负载平衡发生在实例/服务器/主机级别。客户端实例知道他们需要与哪些服务器通信的所有信息。幸与不幸,取决于你的态度。如果您正在寻找AWS现在提供的基于粘性用户会话的负载平衡,Eureka不提供开箱即用的解决方案。在Netflix,我们更喜欢我们的服务是无国籍(非粘性)。这有助于实现更好的可扩展性模型,Eureka非常适合解决这个问题。使用Eureka将基于代理的负载平衡与负载平衡区分开来的另一个重要方面是,您的应用程序在负载均衡器的中断时可以将可用服务器的信息会缓存在客户端上。
虽然可以使用Route 53注册中间层服务器并依赖AWS安全组来保护服务器免受公共访问,但您的中间层服务器身份仍然会暴露给外部世界。
Route 53是一个命名服务,Eureka可以为中间层服务器提供相同的服务,但相似性也仅此而已。Route 53是一种DNS服务,即使对于非AWS数据中心,它也可以托管您的DNS记录。Route 53还可以跨AWS区域执行基于延迟的路由。 Eureka类似于内部DNS,与世界各地的DNS服务器无关。Eureka也是区域隔离的,因为它不知道其他AWS区域中的服务器。 保存信息的主要目的是在区域内进行负载平衡。它还具有传统的基于DNS的负载平衡解决方案的缺点,其中流量仍然可以路由到可能不健康或甚至不存在的服务器(在AWS云的情况下,服务器可以随时消失)。
在Netflix,除了在中间层负载平衡中起关键作用之外,Eureka还用于以下目的。
您通常在AWS云中运行,并且您有许多中间层服务,您不希望向AWS ELB注册或暴露来自外部世界的流量。您要么寻找简单的循环负载平衡解决方案,要么愿意根据负载平衡需求在Eureka周围编写自己的包装器。您不需要粘性会话并在外部缓存(例如memcached)中加载会话数据。 更重要的是,如果您的架构适合基于客户端的负载均衡器的模型,Eureka可以很好地适应这种用法。
通信技术可以是你喜欢的任何东西。Eureka可帮助您查找有关您希望与之通信的服务的信息,但不会对协议或通信方法施加任何限制。例如,您可以使用Eureka获取目标服务器地址并使用诸如thrift,http(s)或任何其他RPC机制之类的协议。
上面的架构描述了如何在Netflix上部署Eureka,这就是您通常运行它的方式。每个地区只有一个eureka集群,它只知道该地区的实例。 每个区域至少有一个eureka服务器来处理区域故障。
服务在Eureka注册,然后发送心跳每30秒更新一次租约。如果客户端无法续订租约几次,则会在大约90秒内将其从服务器注册表中删除。注册信息和续订将复制到群集中的所有eureka节点。来自任何区域的客户端都可以查找注册表信息(每30秒发生一次)以查找其服务(可能位于任何区域中)并进行远程调用。
对于非基于Java的服务,您可以选择以服务语言实现eureka的客户端部分,或者您可以运行“side car”,它本质上是一个嵌入式eureka客户端,负责处理注册和心跳。
对于Eureka客户端支持的所有操作,REST接口也支持。非Java客户端可以使用REST接口来查询有关其他服务的信息。
您可以动态添加或删除Eureka集群节点。您可以将内部配置从超时调整到线程池。 Eureka使用archaius,如果你有一个配置源实现,很多这些配置可以动态调整。
在AWS云中,我们必须考虑构建的所有内容的弹性。Eureka受益于我们获得的这种体验,其中弹性内置于客户端和服务器中。
Eureka客户端旨在处理一台或多台Eureka服务器的故障。由于Eureka客户端中包含注册表缓存信息,因此即使所有eureka服务器都出现故障,它们也可以运行得相当好。
在多个AWS区域部署Eureka是一项相当简单的任务。区域之间的Eureka集群不会彼此通信。
Eureka服务器对其他的eureka集群有弹性恢复作用。即在客户端和服务器出现网络断裂,服务器也可以用内置的弹性以防止大规模中断。
Eureka为性能,监控和警报使用servo来跟踪客户端和服务器中的大量信息。数据通常在JMX注册表中提供,并可导出到Amazon Cloud Watch。