Eureka的工作原理以及它与ZooKeeper的区别

1、Eureka 简介:

Eureka 是 Netflix 出品的用于实现服务注册和发现的工具。 Spring Cloud 集成了 Eureka,并提供了开箱即用的支持。其中, Eureka 又可细分为 Eureka Server 和 Eureka Client。

1.基本原理

上图是来自eureka的官方架构图,这是基于集群配置的eureka; 
- 处于不同节点的eureka通过Replicate进行数据同步 
- Application Service为服务提供者 
- Application Client为服务消费者 
- Make Remote Call完成一次服务调用

服务启动后向Eureka注册,Eureka Server会将注册信息向其他Eureka Server进行同步,当服务消费者要调用服务提供者,则向服务注册中心获取服务提供者地址,然后会将服务提供者地址缓存在本地,下次再调用时,则直接从本地缓存中取,完成一次调用。

当服务注册中心Eureka Server检测到服务提供者因为宕机、网络原因不可用时,则在服务注册中心将服务置为DOWN状态,并把当前服务提供者状态向订阅者发布,订阅过的服务消费者更新本地缓存。

服务提供者在启动后,周期性(默认30秒)向Eureka Server发送心跳,以证明当前服务是可用状态。Eureka Server在一定的时间(默认90秒)未收到客户端的心跳,则认为服务宕机,注销该实例。

2.Eureka的自我保护机制

在默认配置中,Eureka Server在默认90s没有得到客户端的心跳,则注销该实例,但是往往因为微服务跨进程调用,网络通信往往会面临着各种问题,比如微服务状态正常,但是因为网络分区故障时,Eureka Server注销服务实例则会让大部分微服务不可用,这很危险,因为服务明明没有问题。

为了解决这个问题,Eureka 有自我保护机制,通过在Eureka Server配置如下参数,可启动保护机制

eureka.server.enable-self-preservation=true

它的原理是,当Eureka Server节点在短时间内丢失过多的客户端时(可能发送了网络故障),那么这个节点将进入自我保护模式,不再注销任何微服务,当网络故障回复后,该节点会自动退出自我保护模式。

自我保护模式的架构哲学是宁可放过一个,决不可错杀一千

3. 作为服务注册中心,Eureka比Zookeeper好在哪里

著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)和P(分区容错性)。由于分区容错性在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡。在此Zookeeper保证的是CP, 而Eureka则是AP。

3.1 Zookeeper保证CP

当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的注册信息,但不能接受服务直接down掉不可用。也就是说,服务注册功能对可用性的要求要高于一致性。但是zk会出现这样一种情况,当master节点因为网络故障与其他节点失去联系时,剩余节点会重新进行leader选举。问题在于,选举leader的时间太长,30 ~ 120s, 且选举期间整个zk集群都是不可用的,这就导致在选举期间注册服务瘫痪。在云部署的环境下,因网络问题使得zk集群失去master节点是较大概率会发生的事,虽然服务能够最终恢复,但是漫长的选举时间导致的注册长期不可用是不能容忍的。

3.2 Eureka保证AP

Eureka看明白了这一点,因此在设计时就优先保证可用性。Eureka各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而Eureka的客户端在向某个Eureka注册或时如果发现连接失败,则会自动切换至其它节点,只要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证强一致性)。除此之外,Eureka还有一种自我保护机制,如果在15分钟内超过85%的节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,此时会出现以下几种情况: 
1. Eureka不再从注册列表中移除因为长时间没收到心跳而应该过期的服务 
2. Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用) 
3. 当网络稳定时,当前实例新的注册信息会被同步到其它节点中

因此, Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像zookeeper那样使整个注册服务瘫痪。

4. 总结

Eureka作为单纯的服务注册中心来说要比zookeeper更加“专业”,因为注册服务更重要的是可用性,我们可以接受短期内达不到一致性的状况。不过Eureka目前1.X版本的实现是基于servlet的Java web应用,它的极限性能肯定会受到影响。期待正在开发之中的2.X版本能够从servlet中独立出来成为单独可部署执行的服务。

Eureka的工作原理以及它与ZooKeeper的区别相关推荐

  1. 计算机工作原理及进程和线程的区别

    课前导读: 本篇是关于计算机工作原理和多线程编程的解读,主要包括计算机发展背景.图灵大佬生平.冯诺依曼体系结构.cpu与Gpu.电路门.CPU具体的特点.编程语言.Java的前世今生.操作系统.进程的 ...

  2. 一文搞懂GPU的概念、工作原理,以及与CPU的区别

    近几个月,几乎每个行业的小伙伴都了解到了ChatGPT的可怕能力.你知道么,ChatGPT之所以如此厉害,是因为它用到了几万张NVIDA Tesla A100显卡做AI推理和图形计算. 本文就简单分享 ...

  3. SSL/TLS 的工作原理

    HTTPS 之所以能达到较高的安全性要求,就是结合了 SSL/TLS 和 TCP 协议,对通信数据进行加密,解决了 HTTP 数据透明的问题.接下来重点介绍一下 SSL/TLS 的工作原理. SSL ...

  4. eureka心跳_Eureka工作原理及心跳机制

    Eureka原理 1.基本原理 上图是来自eureka的官方架构图,这是基于集群配置的eureka: 处于不同节点的eureka通过Replicate进行数据同步 Application Servic ...

  5. 微服务 注册中心的作用_SpringCloud(二)服务注册中心与Eureka工作原理介绍

    微服务的注册中心 author:QYX 注册中心可以说是微服务架构中的通讯录,它记录了服务和服务地址的映射关系,在分布式架构中,服务会注册到这里,当服务需要调用其他服务时, 就会在这里找到服务的地址, ...

  6. Eureka工作原理(Eureka简介Eureka ServerEureka Client自我保护机制分布式系统中的CAP理论Eureka 工作流程)

    一.Eureka简介 Eureka Server(注册中心,相当于zookeeper) Eureka Client: Provider Consumer 多个Eureka就叫集群.集群之间会定时通过r ...

  7. Zookeeper的功能以及工作原理

    2019独角兽企业重金招聘Python工程师标准>>> 1.ZooKeeper是什么? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubb ...

  8. 来深入了解一下 Eureka 的工作机制及相关原理

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | blog.csdn.net/qwe86314/ ...

  9. Zookeeper的功能以及工作原理 (转自:http://www.cnblogs.com/felixzh/p/5869212.html)

    1.ZooKeeper是什么? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交 ...

最新文章

  1. 第4关:16位快速加法器设计
  2. C语言基本数据结构之四(线性,对分,二叉树查找及二叉树删除)
  3. [收集]Visual C#中调用Windows API
  4. 老司机又开车(来不及解释,快上!)之秒懂单片机指针!
  5. Js提交表单的两种方法
  6. python代码太长_Python 太糟糕了?开发者总结了 8 大原因
  7. oracle中保留2位小数的写法
  8. ThinkPHP---RBAC
  9. MYSQL导出数据报错ERROR 1290 (HY000) 和 ERROR 1 (HY000)
  10. 系统目录 linux命令,Linux系统目录和命令介绍
  11. Kaggle TMDB电影数据分析项目实战
  12. 计算机配置的内存容量为4GB,电脑添加4G内存条后内存容量没有变化怎么办
  13. 【Excel】Excel读取数据时,提示“服务器连接异常”
  14. 石川:出色不如走运 (II)?
  15. 数据库原理 头歌实训 数据库常用对象
  16. 视频剪辑如何快速制作图文视频
  17. 彻底关闭win10更新自动更新 卸载win10自带杀毒软件 新增联想软件 lenovo quick fix
  18. vmei-day04-Jcenter方式集成极光推送
  19. linux命令——帮助相关命令
  20. 关于安卓Facebook接入时的坑

热门文章

  1. 2432功率计使用说明_Quarq功率计的安装、使用和维护
  2. socket不能bind请求的地址_深入浅出讲解:php的socket通信
  3. python设置ini文件中的值_5分钟掌握Python中常见的配置文件
  4. 粒子群算法离散化各代表什么_粒子群优化算法(PSO)之基于离散化的特征选择(FS)(三)...
  5. 打造创新电磁诊疗技术平台,睿笛生物获比邻星创投、三捷资本数千万元投资...
  6. 【iCore3应用】基于iCore3双核心板的编码器应用实例
  7. Atitit.http httpclient实践java c# .net php attilax总结
  8. linux usr目录权限不够,【ARM-Linux开发】Ubuntu下的/usr目录权限,导致不能使用sudo命令的修复...
  9. python requests库详解_python爬虫之路(一)-----requests库详解
  10. [MyBatis日记](3)映射器配置文件与映射器接口