Eureka遵守AP,Zookeeper遵守CP

RDBMS(oracle/mysql、sqlServer) ====> ACID, 关系型数据库遵循ACID原则

NoSQL(redis/mongodb)====> CAP

一、ACID的介绍

  • 原子性(Automicity):事务里面的所有操作,要么全部做完,要么全不做;事务成功的条件是事务里面的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚;
  • 一致性(Consistency):数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束;也就是说:如果事务是并发多个,系统也必须如同串行事务一样操作。其主要特征是保护性和不变性(Preserving an Invariant),以转账案例为例,假设有五个账户,每个账户余额是100元,那么五个账户总额是500元,如果在这个5个账户之间同时发生多个转账,无论并发多少个,比如在A与B账户之间转账5元,在C与D账户之间转账10元,在B与E之间转账15元,五个账户总额也应该还是500元,这就是保护性和不变性。
  • 隔离性(Isolation): 并发的事务之间不会互相影响;
  • 持久性(Durability):在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

二、CAP的介绍

CAP分别为:强制一致性(Consistency),可用性(Availability),分区容错性(Partition tolerance)。

CAP的3进2:任何一个分布式系统中,无法同时满足CAP3个原则,最多只能满足其中的2个。

CAP的理论核心:任何一个分布式系统中,无法同时满足强制一致性、可用性、分区容错性这3个需求;因此,根据CAP原则将NoSQL 数据库分成满足CA原则、CP原则、AP原则三大类:

  • CA原则:单点集群,满足一致性、可用性的原则,通常在扩展上不太强;
  • CP原则:满足一致性、分区容错的系统,通常性能不是特别高;
  • AP原则:满足可用、分区容错的系统,通常对一致性要求低一点;

由于当前的网络硬件肯定会出现延迟丢包的问题,所以分区容错性是我们必须实现的,所以分布式系统只能在强制一致性和可用性中权衡;

因此:Zookeeper保证的是CP,Eureka保证的是AP;

当向注册中心查询服务列表时,我们可以容忍服务返回的是几分钟之前的数据,但是我们不能容忍服务之间Down掉不可用。也就是说服务的注册功能对可用性的要求高于一致性。

但是Zookeeper中会出现一种情况,当master节点因为网络故障和其他节点失去联系了时,剩余的节点会重新选举leader。但是选举leader的时间太长,30~120s,而且选举期间整个Zookeeper集群是不可用的,这就导致选举期间注册服务瘫痪。在云部署的环境下,因网络问题使得Zookeeper的master失去联系可能性是很大的,虽然最后服务能够恢复,但是较长时间的选举导致注册的长期不可用是不能容忍的;

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

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

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

【Eureka篇三】Eureka比Zookeeper好在哪里?(8)的更多相关文章

  1. 【Eureka篇三】Eureka常用配置说明(7)

    服务注册中心配置(Bean类:org.springframework.cloud.netflix.eureka.server.EurekaServerConfigBean) #关闭注册中心的保护机制, ...

  2. 【Eureka篇三】Eureka如何管理服务调用(6)

    在Eureka Client启动时,将自身的服务的信息发送到Eureka Server.然后进行2调用当前服务器节点中的其他服务信息,保存到Eureka Client中.当服务间相互调用其它服务时,在 ...

  3. 【Eureka篇三】Eureka集群配置(5)

    1. 新建子模块microservicecloud-eureka-7002(后面简称7002) 和 microservicecloud-eureka-7003(后面简称为7003),packaging ...

  4. 【Eureka篇三】Eureka自我保护机制(3)

    1. 自我保护机制演示 eureka在频繁修改微服务名称的时候,可以会出现如下现象: 2. 什么是自我保护模式? 默认情况下,如果EurekaServer在一定时间内没有接收到某个微服务实例的心跳,E ...

  5. 【Eureka篇三】Eureka服务注册(2)

    注:修改[Rest微服务案例(二)]中的子模块microservicecloud-provider-dept-8001. 一.项目改造 1. 修改pom.xml 添加eureka client的依赖 ...

  6. 【Eureka篇三】EurekaServer服务注册中心(1)

    注:在前面[Rest微服务案例(二)]的基础上进行操作. 1. 新建Maven Module,子模块名称为microservicecloud-eureka-7001,packaging为jar模式 & ...

  7. 【Eureka篇三】Eureka服务发现(4)

    注:该知识点并不是重点. 修改子模块:microservicecloud-provider-dept-8001 1. 修改DeptController @Autowired private org.s ...

  8. SpringCloud核心教程 | 第三篇:服务注册与发现 Eureka篇

    Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全 ...

  9. 作为注册中心Eureka比Zookeeper好在哪里?

    作为注册中心Eureka比Zookeeper好在哪里?    著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性),A(可用性)和P(分区容错性).由于分区容错性P在是分布式系统中必须要保证 ...

随机推荐

  1. React中条件渲染

    17==> 条件渲染 state初始化一般写在构造器当中 CharShop.js如下 import React, { Component } from "react"; ex ...

  2. Javascript是如何工作的?

    作为一个前端开发者或者全栈开发者,一定非常熟练Javascript.程序员社区Stack Overflow的调查结果显示,Javascript是最常用的编程语言,连续多年排在第一名.发明Javascr ...

  3. redis集群之Cluster

    RedisCluster 是 Redis 的亲儿子,它是 Redis 作者自己提供的 Redis 集群化方案. 相对于 Codis 的不同,它是去中心化的,如图所示,该集群有三个 Redis 节点组成 ...

  4. make 命令与 Makefile

    make 是一个工具程序,通过读取 Makefile 文件,实现自动化软件构建.虽然现代软件开发中,集成开发环境已经取代了 make,但在 Unix 环境中,make 仍然被广泛用来协助软件开发.ma ...

  5. Caused by: org.springframework.data.mapping.PropertyReferenceException: No property id found for type Users!

    Spring Data JPA自定义Repository Caused by: org.springframework.data.mapping.PropertyReferenceException: ...

  6. Redisson实现分布式锁(2)—RedissonLock

    Redisson实现分布式锁(2)-RedissonLock 有关Redisson实现分布式锁上一篇博客讲了分布式的锁原理:Redisson实现分布式锁---原理 这篇主要讲RedissonLock和 ...

  7. JS基础语法---一元运算符

        *    ++  -- 都是运算符     *    ++ 和 --  可以分为:前+ 和后+  and   前- 和后-          *  如果++在后面:如: num++ +10参与 ...

  8. JavaScript 错误异常

    JavaScript 错误异常 错误异常语句 try 语句测试代码块中的错误 catch 语句处理错误 throw 语句允许自定义错误 finally 语句在错误异常语句后,必须执行的代码块 try ...

  9. Android SearchView不显示搜索icon

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/80 背景: 之前碰到了一个页面展示问题,SearchVie ...

  10. 彻底解决Python3写爬虫或网站时的乱码问题

    第一次写贴子,试试水 很多玩Python3的都会遇到编码问题,如果直接去处理未知编码的网页,不是Python内部编码格式utf8会出现乱码,下面介绍一种将未知编码的字串转换为utf8来避免乱码的方法, ...