Spring Cloud Eureka服务注册中心——what、why、how

目录

Eureka是什么?

Eureka的基本架构

对比Dubbo的注册中心Zookeeper?

Eureka和Zookeeper架构图

Eureka和Zookeeper原则对比(数据库ACID、CAP基础学习)

CAP深入学习

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

Eureka包含两个组件:

原理

自我保护机制

怎么搭建?


Eureka是什么?

  • Eureka是Netflix的一个子模块,也是核心模块之一。Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移。服务注册与发现对于微服务架构来说是非常重要的,有了服务发现与注册,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务调用的配置文件了。功能类似于dubbo的注册中心,比如Zookeeper。

Eureka的基本架构

  • Eureka采用了C-S的设计架构,Eureka Server作为服务注册功能的服务器,它是服务注册中心
  • 而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。SpringCloud 的一些其他模块(比如Zuul)就可以通过 Eureka Server 来发现系统中的其他微服务,并执行相关的逻辑。

对比Dubbo的注册中心Zookeeper?

 

Eureka和Zookeeper架构图

Eureka架构图: 

Zookeeper架构图:

 

 

Eureka和Zookeeper原则对比(数据库ACID、CAP基础学习)

  • RBDMS(mysql,oracle/sqlServer)===>ACID
  • NOSQL (redis/mongdb) ===>CAP

  • Netflix在设计Eureka时遵守的就是AP原则

      Zookeeper保证的是CP,Eureka保证的AP

CAP深入学习

  • CAP按现在的发展最多只能同时较好的满足两个
  • CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性,分区容错性这三个需求,因此,根据CAP原理将NOSQL数据库分成了满足CA原则,满足CP原则和满足AP原则三大类
    1. CA-单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大
    2. CP-满足一致性,分区容忍性的系统,通常性能不是特别高
    3. AP-满足可用性,分区容忍性的系统,通常对一致性要求低一

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

  • Zookeeper保证的是CP,Eureka保证的AP
    • 1、Zookeeper保证CP
      当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的注册信息,但不能接受服务直接down掉不可用。也就是说,服务注册功能对可用性的要求要高于一致性。

    • 但是zk会出现这样一种情况,当master节点因为网络故障与其他节点失去联系时,剩余节点会重新进行leader选举。问题在于,选举leader的时间太长,30~120s,且选举期间整个zk集群都是不可用的,这就导致在选举期间注册服务瘫痪。在云部署的环境下,因网络问题使得zk集群失去master节点是较大概率会发生的事,虽然服务能够最终恢复,但是漫长的选举时间导致的注册长期不可用是不能容忍的

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

    • 此时会出现以下几种情况

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

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

 

Eureka包含两个组件:

  • Eureka Server
  • Eureka Client

原理

Eureka是一个Java客户端,用于建华Eureka Server的交互,客户端同时也具备一个内置的,使用轮询(round-robin)负载算法的负载均衡器,在应用启动之后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)

 

自我保护机制

  • EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
  • 是应对网络异常的安全保护措施
  • 紧急情况!Eureka可能错误地声称实例已经启动,而事实并非如此。续约低于阈值,因此实例不会为了安全而过期。
  • 一句话:某时刻某一个微服务不可用了,eureka不会立刻清理,依旧会对该微服务的信息进行保存
  • 在自我保护模式中,Eureka Server会保护服务注册表中的信息,不再注销任何服务实例,当它收到的心跳数重新恢复到阈值以上时,该Eureka Server会自动退出自我保护模式。它的设计哲学就是宁可保留错误的服务注册信息,也不盲目注销任何可能健康的服务实力,
  • 一句话讲解:好死不如赖活着

怎么搭建?

      史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka) ——搭建

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值