[翻译]Eureka一窥
什么是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。
原文:
文章来自微信平台「麦芽面包」
微信公众号「darkjune_think」转载请注明。
如果觉得有趣,微信扫一扫关注公众号。

[翻译]Eureka一窥的更多相关文章
- 一窥Spring Cloud Eureka
在Spring Cloud中Eureka负责服务发现功能.服务发现需要解决如何找到服务提供者在网络中位置的问题. 服务端 在Spring Tool Suite的文件菜单中,点击新建Spring Sta ...
- 网页3D效果库Three.js初窥
网页3D效果库Three.js初窥 背景 一直想研究下web页面的3D效果,最后选择了一个比较的成熟的框架Three.js下手 ThreeJs官网 ThreeJs-github; 接下来我会陆续翻译 ...
- SpringCloud学习笔记(1)——Eureka
Spring Cloud Spring Cloud为开发者快速构建通用的分布式系统(例如:配置管理.服务发现.断路器.智能路由.微代理.控制总线.一次性的Token.全局锁.领导者选举.分布式会话.集 ...
- Chris Richardson微服务翻译:微服务架构中的服务发现
Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯 微服务架构中的服务发现(本文) 微服务之事件驱动的数据管理 微服 ...
- SpringCloud学习系列之一 ----- 搭建一个高可用的注册中心(Eureka)
前言 本篇主要介绍的是SpringCloud相关知识.微服务架构以及搭建一个高可用的服务注册与发现的服务模块(Eureka). SpringCloud介绍 Spring Cloud是在Spring B ...
- 从零开始学spring cloud(三) -------- Eureka简介
1.服务发现组件:Eureka Eureka的开源文档介绍地址:https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance What is Eu ...
- 一文读懂SpringCloud与Eureka,Feign,Ribbon,Hystrix,Zuul核心组件间的关系
概述 毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术.不过大多数讲解还停留在对Spring Cloud功能使用的层面,其底层的很多原理,很多人可能并不知晓 ...
- 【SFA官方翻译】使用 Kubernetes、Spring Boot 2.0 和 Docker 的微服务快速指南
[SFA官方翻译]使用 Kubernetes.Spring Boot 2.0 和 Docker 的微服务快速指南 原创: Darren Luo SpringForAll社区 今天 原文链接:https ...
- spring cloud Eureka常见问题总结
Spring Cloud中,Eureka常见问题总结. 指定Eureka的Environment 1 eureka.environment: 指定环境 参考文档:https://github.com/ ...
随机推荐
- NHibernate中使用memcache二级缓存
在NHibernate中使用memcache二级缓存 一.Windows下安装Memcache 1. 下载 http://jehiah.cz/projects/memcached-win32/ ...
- SSI框架总结
先来点文字性的描写叙述: MVC对于我们来说,已经不陌生了,它起源于20世纪80年代针对smalltalk语言的一种软件设计模式,如今已被广泛应用.近年来,随着java的盛行,MVC的低耦合性.高重用 ...
- leetcode[68] Climbing Stairs
n个台阶,每次可以走一步或者两步,总共有多少种走法. 第一感觉想到的是递归,n为1的时候1种,2的时候2中.其他时候就是 fun(n) = fun(n-1) + fun(n-2);递归的代码很简单.如 ...
- Android Intent 三解决
Intent的接收处理: 1.Receiver报名 这之前已经被引入 然后看看剩下的两个接收功能上面. scheduleReceiver scheduleRegisteredReceiver: sch ...
- 用Inno Setup制作WEB程序安装包
原文 用Inno Setup制作WEB程序安装包 最近做了一个WEB程序的安装包,我把制作的过程做个介绍,贴出源码给大家做个参考 看看inno 的脚本 [Setup] AppCopyright=tes ...
- redmine的邮件配置
redmine的邮件配置 2012-01-04 18:09:21| 分类: 默认分类|举报|字号 订阅 redmine里要用到邮件通知,本来以为很是简单,网上也有许多教程,谁知忙活了一下午, ...
- ASP.NET MVC IOC之Unity攻略
ASP.NET MVC IOC之Unity攻略 一.你知道IOC与DI吗? 1.IOC(Inversion of Control )——控制反转 即依赖对象不在被依赖模块的类中直接通过new来获取 先 ...
- JavaScript精彩范例(1)——Jquery EasyUI应用的一个框架实例
从网上看到的,非常漂亮,放在这里和大家分享一下,作者是疯狂秀才 这是截图 >>这是下载地址<<
- Carmichael Numbers - PC110702
欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/uva10006.html 原创:Carm ...
- VBS get,post函数
Function gethttp(gethttp_url) Dim http_get Set http_get=Server.CreateObject("MSXML2.ServerXMLHT ...