什么是Eureka?

Eureka是一个基于REST的服务,主要用在AWS云环境作为服务发现,负载均衡和失败转移。我们叫这个服务,Eureka服务。 Eureka也有一个JAVA客户端组件, Eureka Client,帮助与服务端更简单的交互。 客户端也有一个内置的负载均衡做简单的round-robin均衡。 在Netflix, 很多更高级的负载均衡器包装了Eureka来提供基于很多其他因子,如流量,资源利用率,错误情况等权重的负载均衡。

为什么需要Eureka?

在AWS云,由于其天生的属性,服务器来来去去。不像传统的负载均衡是与已知的IP地址和机器名工作,在AWS,负载均衡需要更多更复杂的注册,解注册服务。由于AWS还没有提供一个中间层负载均衡,Eureka填补了这个中间层负载均衡的巨大空缺。

Eureka与AWS ELB有什么不同?

AWS Elastic Load Banancer是一个暴露给终端用户网络流量的服务边缘负载均衡方案。Eureka是作为中间层负载均衡的补充。理论上你可以把中间层服务放在AWS ELB之后, 如果在EC2模型中你把他们直接暴露给外部世界但失去了所有AWS安全组的好处。

AWS ELB也是一个传统的代理类型的负载均衡方案然而Erueka是不同的,负载均衡发生在实例/服务器/主机级别。客户端实例知道所有关于他们需要与哪台服务器通信的信息。基于你看的角度这可能会是好处也是坏处。如果你寻找的是AWS提供的基于用户session粘滞的负载均衡,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的云服务里任何时候服务器都可能消失)。

Netflix是怎么使用Eureka的?

在Netflix,Eureka除了作为一个中间层负载均衡的关键部分,还作为以下的原因。

  • 作为与Netflix Asgard一起的红黑部署 - Asgard一个让云部署更方便的开源服务。Eureka会与Asgard交互,让应用在新/老版本部署切换,让故障处理更快速和无缝 - 尤其是当启动100个实例部署时要花费很长时间的时候。
  • 当我们的cassandra需要维护时摘掉实例。
  • 为我们的memcached缓存服务提供识别环上实例列表功能。
  • 由于各种各样的原因提供保存其他应用特有原信息的服务。

什么时候使用Eureka?

你运行在AWS云上并且你有很多不像注册在AWS ELB上或暴露给外部的中间层服务。你想找一个简单的round-robin的负载均衡方案或者想要写一个基于Eureka包装过的符合你要求的负载均衡器。你不需要session粘滞和将session数据保存在一个像memcache的外部缓存。更重要的是,如果你的架构风格适合一个基于客户端的负载均衡模型,Eureka相当适合这个场景。

应用客户端和应用服务端怎么通信?

通信技术可以试试任何你喜欢的。Eureka帮你找到你需要通信的服务信息但没有引入任何通信协议或方法的限制。比如,你可以用Eureka获得目标机器地址并使用thrift,http(s)或其他RPC机制的协议。

高层架构

以上架构解释了Eureka是怎样在Netflix部署的并也是你会运行的状态。在每个区域(region)都会有一个eureka集群,它只知道关于这个区域内的实例信息。每个zone都至少也有一个eureka服务器来处理zone级别容灾。

服务注册在Eureka上并且每30秒发送心跳来续命。如果一个客户端在几次内没有刷新心跳,它会在90秒后被移出服务器注册信息。注册信息和刷新信息会在整个eureka集群的节点进行复制。任何zone的客户端都可看到注册信息(每30秒发生)去定位他们的服务(可能会在任何zone)并做远程调用。

非Java服务和客户端

对于非Java的服务,你可以用其他语言实现eureka的客户端部分。基于REST的服务也暴露给了所有操作给Eureka客户端。非Java客户端也可以使用REST服务来查询其他服务的信息。

可配置

使用Eureka你可以在集群中随意添加删除节点。你可以调各种内部配置,从超时到线程池。Eureka使用archaius并且如果你又一个配置源的实现那么可以动态调整很多东西。

弹性

在AWS云,很难不去思考构建弹性伸缩。Eureka使我们经验的结晶,在客户端和服务端都内置了弹性能力。

Eureka客户端设计成可以处理一个或多个Eureka服务端的失败场景。由于Eureka客户端有注册信息的缓存,他们可以很从容的处理失败,就算是所有的eureka服务器都挂了也可以。

Eureka服务器对于其他eureka节点挂了也有足够的弹性。就算是服务端和客户端产生了网络分区,服务器也有内置的弹性策略来防止大面积的停机。

多区域(Region)

在多个AWS区域部署Eureka是一个很简单的工作。多个区域的Eureka集群之间并不通信。

监控

Eureka用servo来追踪服务端和客户端的信息,包括性能,监控和报警。数据保存在JMX中并暴露给Amazon Cloud Watch。

原文:

https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance


文章来自微信平台「麦芽面包」

微信公众号「darkjune_think」转载请注明。

如果觉得有趣,微信扫一扫关注公众号。

[翻译]Eureka一窥的更多相关文章

  1. 一窥Spring Cloud Eureka

    在Spring Cloud中Eureka负责服务发现功能.服务发现需要解决如何找到服务提供者在网络中位置的问题. 服务端 在Spring Tool Suite的文件菜单中,点击新建Spring Sta ...

  2. 网页3D效果库Three.js初窥

    网页3D效果库Three.js初窥 背景 一直想研究下web页面的3D效果,最后选择了一个比较的成熟的框架Three.js下手 ThreeJs官网 ThreeJs-github; 接下来我会陆续翻译 ...

  3. SpringCloud学习笔记(1)——Eureka

    Spring Cloud Spring Cloud为开发者快速构建通用的分布式系统(例如:配置管理.服务发现.断路器.智能路由.微代理.控制总线.一次性的Token.全局锁.领导者选举.分布式会话.集 ...

  4. Chris Richardson微服务翻译:微服务架构中的服务发现

    Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯 微服务架构中的服务发现(本文) 微服务之事件驱动的数据管理 微服 ...

  5. SpringCloud学习系列之一 ----- 搭建一个高可用的注册中心(Eureka)

    前言 本篇主要介绍的是SpringCloud相关知识.微服务架构以及搭建一个高可用的服务注册与发现的服务模块(Eureka). SpringCloud介绍 Spring Cloud是在Spring B ...

  6. 从零开始学spring cloud(三) -------- Eureka简介

    1.服务发现组件:Eureka Eureka的开源文档介绍地址:https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance What is Eu ...

  7. 一文读懂SpringCloud与Eureka,Feign,Ribbon,Hystrix,Zuul核心组件间的关系

    概述 毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术.不过大多数讲解还停留在对Spring Cloud功能使用的层面,其底层的很多原理,很多人可能并不知晓 ...

  8. 【SFA官方翻译】使用 Kubernetes、Spring Boot 2.0 和 Docker 的微服务快速指南

    [SFA官方翻译]使用 Kubernetes.Spring Boot 2.0 和 Docker 的微服务快速指南 原创: Darren Luo SpringForAll社区 今天 原文链接:https ...

  9. spring cloud Eureka常见问题总结

    Spring Cloud中,Eureka常见问题总结. 指定Eureka的Environment 1 eureka.environment: 指定环境 参考文档:https://github.com/ ...

随机推荐

  1. C#网络编程系列(两)它Socket同步TCPserver

    声明原文 笔者:竹zz  本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 文章系列文件夹 C#网络编程系列文 ...

  2. SSMS2008插件开发(2)--Microsoft Visual Studio 2008插件开发介绍

    原文:SSMS2008插件开发(2)--Microsoft Visual Studio 2008插件开发介绍 由于开发SSMS2008插件是通过VS2008进行的,有必要先介绍一下VS2008的插件开 ...

  3. windows系统SVN和apache的下载和安装

    原文:windows系统SVN和apache的下载和安装 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://ejb3.blogbus.com/logs/107443052. ...

  4. jQuery插件的编写相关技术 设计总结和最佳实践

    原文:http://www.itzhai.com/jquery-plug-in-the-preparation-of-related-technical-design-summary-and-best ...

  5. RESTful API Develop

    yii2 RESTful API Develop   参考文档:http://www.yiiframework.com/doc-2.0/guide-rest.html 以 DB 中的 news 表为例 ...

  6. openGL剪裁区

    /** * 缓冲区工具类 */public class BufferUtil { /**  * 将浮点数组转换成字节缓冲区  */ public static ByteBuffer arr2ByteB ...

  7. 数据访问层的改进以及测试DOM的发布

    数据访问层的改进以及测试DOM的发布 在上一篇我们在宏观概要上对DAL层进行了封装与抽象.我们的目的主要有两个:第一,解除BLL层对DAL层的依赖,这一点我们通过定义接口做到了:第二,使我们的DAL层 ...

  8. 简化MonoTouch.Dialog的使用

    读了一位园友写的使用MonoTouch.Dialog简化iOS界面开发,我来做个补充: 相信使用过DialogViewController(以下简称DVC)的同学都知道它的强大,但是缺点也是明显的,应 ...

  9. 实现WebService的调用与被调用

    之前一直用WCF来开发服务,可是从未用过WebService.对WebService有种很神奇的期待,都说WebService比较简单,但是从未用过就对我来说就是一种新的知识.起始让我来说WCF与We ...

  10. GNU 项目(开源社区的由来,背后的哲学)

    转自译言网:http://article.yeeyan.org/view/88497/59257/ 第一个软件共享社区 当我在1971年开始在麻省理工人工智能实验室工作时, 我成为一个已经存在多年的软 ...