一致性级别划分

关于分布式系统一致性级别的划分,有些文章划分为强一致性,顺序一致性以及弱一致性

最终一致性属于弱一致性,最终一致性根据更新数据后各进程访问到数据的时间和方式的不同划分为:

  • 因果一致性、
  • “读己之所写(read-your-writes)”一致性、
  • 会话(Session)一致性、
  • 单调(Monotonic)读一致性、
  • 单调写一致性

另一种,根据一致性的强弱程度不同,直接划分为强一致性、单调一致性、会话一致性、最终一致性和弱一致性

最终一致性和顺序一致性的区别

最终一致性和顺序一致性的差别非常大。

顺序一致性是更强的一致性模型,最终一致性模型是非常弱的一致性模型。可以这么说,满足顺序一致性的系统一定满足最终一致性,但满足最终一致性的系统不一定满足顺序一致性。比如,zookeeper是顺序一致性,zookeeper也满足最终一致性;cassandra是最终一致性,但cassandra不满足顺序一致性。

ZK一致性级别分析

博文《线性一致性(Linearizability)是并发控制的基础》中提到【在分布式领域中,我们也会说线性一致性,例如Zookeeper是线性一致性的,再比如分布式领域著名的CAP定理中的C,也是指线性一致性。】

作者的意思是他在文章中提到的【Zookeeper是线性一致性的】是为了举例说明线性一致性也会用来描述分布式系统,因为线性一致性最早在并行计算领域提出。

其实,各个领域的线性一致性都是一样的。线性一致性最早在并行计算领域提出,现在在分布式领域、数据库领域都在用,含义是一样的。我们可以把线性一致性称作为强一致性,或者原子一致性。准确的来说,Zookeeper如果只有写请求时,是线性一致性的;如果从读和写的角度来说是顺序一致性的。

zookeeper是不是线性一致性呢

作者是这样解释的:【Zookeeper如果只有写请求时,是线性一致性的;如果从读和写的角度来说是顺序一致性的】

Zookeeper保证哪种级别的一致性

正如上面所说,Zookeeper如果只有写请求时,是线性一致性的;如果从读和写的角度来说是顺序一致性的。

如何理解Zookeeper的顺序一致性请参看 https://juejin.im/post/5d5a2aa6f265da03b2153816

ZK的单调一致性分析

根据 Zookeeper 的 ZAB 协议来看,ZK 保证的一致性是单调一致性(任何时刻,任何用户一旦读到某个数据在某次更新后的值,那么就不会再读到比这个值更旧的值。也就是说,获取的数据顺序必是单调递增的。)
原因:

  • 假设有2n+1个server,在同步流程中,leader 向 follower 同步数据,当同步完成的 follower 数量大于 n+1时同步流程结束,系统可接受 client 的连接请求。如果client 连接的并非同步完成的follower,那么得到的并非最新数据,但可以保证单调性。

  • 假设是 follower 接收的写请求,然后转发给 leader 处理;leader 完成两阶段提交的机制。向所有 server 发起提案,当提案获得超过半数(n+1)的 server 认同后,将对整个集群进行同步,超过半数(n+1)的 server 同步完成后,该写请求完成。如果 client 连接的并非同步完成 follower,那么得到的并非最新数据,但可以保证单调性。

用分布式系统的CAP原则来分析Zookeeper

(1)C(一致性): Zookeeper保证了顺序一致性(满足最终一致性),在十几秒可以Sync到各个节点

(2)A(可用性): Zookeeper保证了可用性,数据总是可用的(没有锁)。并且有一大半的节点所拥有的数据是最新的、实时的。 如果想保证取得是数据一定是最新的,需要手工调用Sync()

(3)P(分区容错性): 有两点需要分析

  • 节点多了会导致写数据延时变大,因为更多的节点需要同步
  • 节点多了Leader选举耗时变长,从而会放大网络的问题, 可以通过引入 observer(不参与选举)节点缓解这个问题.

Zookeeper一致性级别的更多相关文章

  1. 分布式系统的一致性级别划分及Zookeeper一致性级别分析

    最近在研究分布式系统的一些理论概念,例如关于分布式系统一致性的讨论,看了一些文章我有一些不解.大多数对分布式系统一致性的划分是将其分为三类:强一致性,顺序一致性以及弱一致性.强一致性(Strict C ...

  2. ZooKeeper学习第七期--ZooKeeper一致性原理

    一.ZooKeeper 的实现 1.1 ZooKeeper处理单点故障 我们知道可以通过ZooKeeper对分布式系统进行Master选举,来解决分布式系统的单点故障,如图所示. 图 1.1 ZooK ...

  3. 【Zookeeper系列】ZooKeeper一致性原理(转)

    原文链接:https://www.cnblogs.com/sunddenly/p/4138580.html 一.ZooKeeper 的实现 1.1 ZooKeeper处理单点故障 我们知道可以通过Zo ...

  4. ZooKeeper系列(7):ZooKeeper一致性原理

    一.ZooKeeper 的实现 1.1 ZooKeeper处理单点故障 我们知道可以通过ZooKeeper对分布式系统进行Master选举,来解决分布式系统的单点故障,如图所示. 图 1.1 ZooK ...

  5. ZooKeeper学习第七期--ZooKeeper一致性原理(转)

    转载来源:https://www.cnblogs.com/sunddenly/p/4138580.html 一.ZooKeeper 的实现 1.1 ZooKeeper处理单点故障 我们知道可以通过Zo ...

  6. Azure CosmosDB (3) 选择适当的一致性级别

    <Windows Azure Platform 系列文章目录> 绝大部分的商业分布式数据库,要求开发人员选择两个极端的数据库一致性:强一致性(Strong Consistency)和最终一 ...

  7. Zookeeper —— 一致性协议

    一致性协议 为了解决分布式系统中存在的一致性问题,提出了一些经典的一致性协议和算法. 其中著名的有:二阶段提交协议.三阶段提交协议和 Paxos 算法. 2PC 与 3PC 2PC 2pc(Two-P ...

  8. zookeeper日志级别

    查看源代码得知zookeeper(版本3.4.13)内部的日志用的slf4j,项目启动zk连接了之后一直在打debug日志(如下所示),甚是讨厌,logback日志级别调成info没用. 17:24: ...

  9. Zookeeper一致性协议原理Zab

    ZooKeeper为高可用的一致性协调框架,自然的ZooKeeper也有着一致性算法的实现,ZooKeeper使用的是ZAB协议作为数据一致性的算法, ZAB(ZooKeeper Atomic Bro ...

随机推荐

  1. Windows10 OpenSSH 快捷设置 避免 Bad owener or permission on

    配置ssh 有两个地方 ~/.ssh/config 这个亲测失败,怎么搞都报错 bad owner .... c:/programdata/ssh/ssh_config 亲测有效 (显示隐藏文件才看的 ...

  2. 个人永久性免费-Excel催化剂功能第91波-地图数据挖宝之行政区域信息实时下载(含经纬度)

    移动互联网和O2O兴起的这十年时间里,由地图LBS功能衍生出一大堆的极高商业价值的数据及应用,地图相关的数据,也是数据分析过程中一个大宝藏,从此篇开始将带给大家一系列的地图相关的数据采集,满足数据分析 ...

  3. hadoop之安装hadoop

    官网 http://hadoop.apache.org/ 下载页:https://hadoop.apache.org/releases.html 上传安装包到Linux 解压并进入到目录下 [root ...

  4. C#3.0新增功能03 隐式类型本地变量

    连载目录    [已更新最新开发文章,点击查看详细] 从 Visual C# 3.0 开始,在方法范围内声明的变量可以具有隐式“类型”var. 隐式类型本地变量为强类型,就像用户已经自行声明该类型,但 ...

  5. PHP中的$_GET变量

    定义 在 PHP 中,预定义的 $_GET 变量用于收集来自 method="get" 的表单中的值. $_GET 变量 预定义的 $_GET 变量用于收集来自 method=&q ...

  6. CCNA笔记(一)

    R1#enable R1#configure terminal R1(config)#interface fastEthernet 0/0R1(config-if)#ip address 12.1.1 ...

  7. Redis项目实战---应用及理论(三)---Jedis使用

    Jedis即redis java客户端,源码地址:https://github.com/xetorthio/jedis pom配置: <dependency>    <groupId ...

  8. Codeforces Round #479 (Div. 3) D. Divide by three, multiply by two

    传送门 D. Divide by three, multiply by two •题意 给你一个数 x,有以下两种操作,x 可以任选其中一种操作得到数 y 1.如果x可以被3整除,y=x/3 2.y= ...

  9. 色彩缤纷的python(改变字体颜色及样式不完全版)

    色彩缤纷的python(改变字体颜色及样式) *补上昨天随笔中提到的改变字体颜色样式的方法,昨日随笔https://www.cnblogs.com/Du704/p/11265958.html 在项目过 ...

  10. 【Python-Django】浏览器同源策略

    1995年,同源政策由 Netscape 公司引入浏览器.目前,所有浏览器都实行这个政策. 同源策略是浏览器的一个安全功能,不同源的客户端脚本(js文件)在没有明确授权的情况下,不能读写对方资源.只有 ...