[翻译]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/ ...
随机推荐
- Swift辛格尔顿设计模式(SINGLETON)
本文已更新为2.0语法,具体查看:一叶单例模式 一.意图 保证一个类公有一个实例.并提供一个訪问它的全局訪问点. 二.使用场景 1.使用场景 当类仅仅能有一个实例并且客户能够从一个众所周知的訪问点訪问 ...
- VMware vCloud与Zend Server实现PHP应用程序自动化交付
在巴塞罗那2013年VMworld大会上,开发商VMware公司和zend公司在云管理市场上大放异彩.两家公司的产品VMware vCloud和Zend Server组合,实现了PHP程序自动化交付. ...
- cocos2dx对于强大的RichText控制
最近准备做一个聊天系统,开始准备使用cocos2dx的UIRichText控制显示屏聊天,在使用中发现的结果,cocos2dx的RichText很有限.全然不具备实现聊天的功能.仅仅实现了增加文本.图 ...
- asp.net mvc请求响应模型原理回顾
根据讲师所讲总结了一下(可能存在些描述错误) -------------mvc进入asp.net管道原理: (在执行httpapplication管道之前mvc和asp.net是相同的,不同之处在于管 ...
- dbcp的配置
tomcat的 配置,进入conf->context.xml <Resource name="mysql" auth="Container" ...
- Euclid Problem - PC110703
欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/uva10104.html 原创:Eucl ...
- JS逗号、冒号与括号
JavaScript面试时候的坑洼沟洄——逗号.冒号与括号 看完了javaScript数据类型和表达式与运算符相关知识后以为可以对JavaScript笔试题牛刀小试一把了,没想到有一次次的死在逗号 ...
- 定义 ICache 接口,以及实现默认的 ASP.NET 缓存机制
本文定义 ICache 接口,以及实现默认的 ASP.NET 缓存机制(即通过 System.Web.Caching.Cache)来缓存,将来也可以通过扩展,替换默认实现. 下面直接贴代码了: ICa ...
- C# 多线程学习总结
C# 多线程学习总结 C#多线程学习(一) 多线程的相关概念 什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源.而一个进程又是由多个线程所组成的. ...
- div光标定位问题总结
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...