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原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼得。

分布式系统的CAP理论:理论首先把分布式系统中的三个特性进行了如下归纳:

  • 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
  • 可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)
  • 分区容错性(P):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。

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

3.1 Zookeeper保证CP

不能保证每次服务请求的可用性。
任何时刻对ZooKeeper的访问请求能得到一致的数据结果,同时系统对网络分割具备容错性;但是它不能保证每次服务请求的可用性(注:也就是在极端环境下,ZooKeeper可能会丢弃一些请求,消费者程序需要重新请求才能获得结果)。所以说,ZooKeeper不能保证服务可用性。

进行leader选举时集群都是不可用。
在使用ZooKeeper获取服务列表时,当master节点因为网络故障与其他节点失去联系时,剩余节点会重新进行leader选举。问题在于,选举leader的时间太长,30 ~ 120s, 且选举期间整个zk集群都是不可用的,这就导致在选举期间注册服务瘫痪,虽然服务能够最终恢复,但是漫长的选举时间导致的注册长期不可用是不能容忍的。所以说,ZooKeeper不能保证服务可用性。

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

3.2 Eureka保证AP

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

  • Eureka不再从注册列表中移除因为长时间没收到心跳而应该过期的服务
  • Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用)
  • 当网络稳定时,当前实例新的注册信息会被同步到其它节点中

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

4. 总结

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

springCloud的注册中心Eureka和Zookeper的区别相关推荐

  1. springcloud服务注册中心eureka搭建

    pom.xml依赖: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

  2. springcloud注册中心eureka

    1.前提 springcloud的注册中心是以springboot为基础搭建起来的. 开发工具:IDEA 项目管理工具:maven 2.搭建步骤 创建一个web项目(建议使用IDEA工具构建项目) 修 ...

  3. SpringCloud系列(一)、服务注册中心Eureka基础

    启动Eureka服务注册中心 1.微服务的注册中心 1.1.注册中心的主要作用 1.2.常见的注册中心 1.3.常见注册中心的异同点 2.Eureka概述 2.1.Eureka的基础知识 2.2.Eu ...

  4. SpringCloud | 第二章: 注册中心 Eureka

    前言 前一章节 初识SpringCloud 简单介绍了什么是SpringCloud,以及微服务的架构,这一章节则来说说SpringCloud的基石,注册中心Eureka. 背景介绍 Eureka是Ne ...

  5. SpringCloud简介及注册中心Eureka

    一.SpringCloud简介 1.简介 Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基 础设施的开发,如服务发现注册.配置中心.消息 ...

  6. Srpingcloud之eureka,微服架构之注册中心eureka

    微服架构为什么需要注册中心,它解决了什么问题? 为什么要用? 管理服务以及服务之间的依赖关系. eureka:微服服务注册与发现,负载均衡,故障转移的能力. 类似服务:zookeeper+dubbo ...

  7. eureka java_SpringCloud注册中心Eureka

    本篇概论 在上一篇中我们介绍了微服务相关的内容.微服务的本质就是让服务与服务之间进行互相调用.那么在调用之前需要有一个前提.就是不同的服务与服务之间怎么知道彼此的存在的呢?因为服务都是独立部署的,根本 ...

  8. SpringBoot2.1+SpringCloud:注册中心搭建(Eureka)

    一.版本说明: SpringBoot:2.1.6.RELEASE SpringCloud:Greenwich.RELEASE 二.作用及功能说明: 注册中心:是将多个微服务统计进行管理,主要起注册及发 ...

  9. springcloud(二):注册中心Eureka

    Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现.也是springcloud体系中最重要最核心的组 ...

最新文章

  1. ios 支付宝支付集成
  2. npm介绍以及常用命令
  3. 【bzoj3879】SvT 后缀数组+倍增RMQ+单调栈
  4. python大数据项目_(价值1280)大数据项目实战之Python金融应用编程
  5. Java Poi 向excel中插入图片
  6. 水平方向的算子检测竖直边缘理解
  7. TNN 量化_加量化港美股打新群!
  8. oracle dbv验证,Oracle DBV工具说明
  9. 微管理:给你一个技术团队,你该怎么管札记-化繁为简
  10. matlab——for循环
  11. 高等数学笔记-乐经良老师-第八章-多元函数微分学(Ⅰ)
  12. vue---lodash的使用
  13. MATLAB中常用到的符号汇总(持续更新)
  14. LSTM-长短时记忆网络
  15. linux 页缓存 块缓存,页缓存和块缓存
  16. (轉貼) Bit Twiddling Hacks (SOC) (Verilog) (C)
  17. 在Mac终端使用unrar和rar 解压和压缩软件
  18. No variants found for ‘:app‘. Check build files to ensure at least one variant exists.
  19. 基于Java毕业设计信贷管理系统源码+系统+mysql+lw文档+部署软件
  20. ominipeek 发包_wireshark,sniffer,omnipeek三款网络分析工具的比较(转载)

热门文章

  1. 2016年6月TIOBE编程语言排行榜:涨幅最大的名字很长
  2. 库存管理-历史库存和收发存系列-俄罗斯库存报表J3RFLVMOBVED1
  3. 与variant有关的几个FUNCTION
  4. webpack把源代码里面的console和debugger全部去掉_在webpack中,module、chunk和bundle到底是什么样的存在?...
  5. laravel 5.8 guzzle get 参数_Laravel速查表 Cache Cookie Request
  6. android时间轴左右交叉布局,快速简单的定制一个时间轴布局(LinearLayout)
  7. C语言实现上三角蛇形矩阵不用数组,C/C++编程笔记:C++ 嵌套循环,含循环打印及蛇形矩阵实例...
  8. linux 匹配文本中的ip,linux文本三剑客匹配网卡IP地址大PK(CentOS 7系统)
  9. centos rsyslog mysql_centos7+rsyslog+loganalyzer+mysql 搭建rsyslog日志服务器
  10. r语言quantmond_GitHub - QUANTAXIS/quant