关于弱一致性、强一致性、顺序一致性
在分布式数据系统中,也有一个帽子原理(CAP Theorem),不过此帽子非彼帽子。CAP原理中,有三个要素,CAP原理指的是,这三个要素最多只能同时实现两点,不可能三者兼顾:
- 一致性(Consistency)
- 可用性(Availability)
- 分区容忍性(Partition tolerance)
一致性就是数据保持一直,可以理解为多个节点中数据的值是一致的,一致性又可以分为强一致性与弱一致性。对于一致性,可以分为从客户端和服务端两个不同的视角。
从客户端来看:一致性主要指的是多并发访问时更新过的数据如何获取的问题。多进程并发访问时,更新过的数据在不同进程如何获取的不同策略,决定了不同的一致性。
从服务端来看:则是更新如何复制分布到整个系统,以保证数据最终一致。一致性是因为有并发读写才有的问题,因此在理解一致性的问题时,一定要注意结合考虑并发读写的场景。对于关系型数据库,要求更新过的数据能被后续的访问都能看到,这是强一致性。如果能容忍后续的部分或者全部访问不到,则是弱一致性。如果经过一段时间后要求能访问到更新后的数据,则是最终一致性。
1.强一致性:也称为原子一致性、线性一致性。强一致性可以理解为在任意时刻,所有节点中的数据是一样的。同一时间点,你在节点A中获取到key1的值与在节点B中获取到key1的值应该都是一样的。任何一次读都能读到某个数据的最近一次写的数据,系统中的所有进程,看到的操作顺序,都和全局时钟下的顺序一致。
2.顺序一致性:任何一次读都能读到某个数据的最近一次写的数据,系统的所有进程的顺序一致,而且是合理的。即不需要和全局时钟下的顺序一致,错的话一起错,对的话一起对。
3.弱一致性:弱一致性包含很多种不同的实现,目前分布式系统中广泛实现的是最终一致性。
最终一致性是弱一致性的一种特例,保证用户最终能够读取到某操作对系统特定数据的更新。但是随着时间的迁移,不同节点上的同一份数据总是在向趋同的方向变化。也可以简单的理解为在一段时间后,节点间的数据会最终达到一致状态。对于最终一致性最好的例子就是DNS系统,由于DNS多级缓存的实现,所以修改DNS记录后不会在全球所有DNS服务节点生效,需要等待DNS服务器缓存过期后向源服务器更新新的记录才能实现。最终一致性根据更新数据后各进程访问到数据的时间和方式的不同,又可以区分为:
1.因果一致性:如果进程A通知进程B它已更新了一个数据项,那么进程B的后续访问将返回更新后的值,且一次写入将保证取代前一次写入。与进程A无因果关系的进程C的访问遵守一般的最终一致性规则。
2.读己之所写一致性:当进程A自己更新一个数据项之后,它总是访问到更新过的值,绝不会看到旧值。这是因果一致性模型的一个特例。
3.会话一致性:这是上一个模型的实用版本,它把访问存储系统的进程放到会话的上下文中。只要会话还存在,系统就保证“读己之所写”一致性。如果由于某些失败情形令会话终止,就要建立新的会话,而且系统的保证不会延续到新的会话。
4.单调读一致性:如果进程已经看到过数据对象的某个值,那么任何后续访问都不会返回在那个值之前的值。
5.单调写一致性:系统保证来自同一个进程的写操作顺序执行。要是系统不能保证这种程度的一致性,就非常难以编程了。
同时最终一致性的不同方式可以进行组合,从服务端角度,如何尽快将更新后的数据分布到整个系统,降低达到最终一致性的时间窗口,是提高系统的可用度和用户体验非常重要的方面。对于分布式数据系统:
- N — 数据复制的份数
- W — 更新数据是需要保证写完成的节点数
- R — 读取数据的时候需要读取的节点数
1.如果W+R>N:则是强一致性,写的节点和读的节点重叠。例如对于典型的一主一备同步复制的关系型数据库。N=2,W=2,R=1,则不管读的是主库还是备库的数据,都是一致的。
2.如果W+R<=N:则是弱一致性。例如对于一主一备异步复制的关系型数据库,N=2,W=1,R=1,则如果读的是备库,就可能无法读取主库已经更新过的数据,所以是弱一致性。
对于分布式系统,为了保证高可用性,一般设置N>=3。不同的N,W,R组合,是在可用性和一致性之间取一个平衡,以适应不同的应用场景。
- 如果N=W,R=1,任何一个写节点失效,都会导致写失败,因此可用性会降低,但是由于数据分布的N个节点是同步写入的,因此可以保证强一致性。
- 如果N=R,W=1,只需要一个节点写入成功即可,写性能和可用性都比较高。但是读取其他节点的进程可能不能获取更新后的数据,因此是弱一致性。这种情况下,如果W<(N+1)/2,并且写入的节点不重叠的话,则会存在写冲突
关于弱一致性、强一致性、顺序一致性相关推荐
- 强一致性、弱一致性、顺序一致性、最终一致性概述
通俗易懂 强一致性.弱一致性.最终一致性.读写一致性.单调读.因果一致性 的区别与联系 什么是一致性 一致性的种类 导致一致性出现的原因 强一致性 与 弱一致性 强一致性两个要求 弱一致性 强一致性和 ...
- 聊一聊ZooKeeper的顺序一致性
来自:架构之美 ZooKeeper作为分布式应用系统协调服务,在分布式系统中的应用非常广泛,在某些业务场景下甚至可以作为注册中心.分布式锁来使用.ZooKeeper之所以能有如此广泛的应用,与它良好的 ...
- 强一致性、顺序一致性、弱一致性和共识
1. 一致性(Consistency) 1.1 强一致性(Strict Consistency) 原子一致性(Atomic Consistency) 线性一致性(Linearizable Consis ...
- 强一致性、弱一致性、最终一致性
强一致性.弱一致性.最终一致性 版权声明:本文为博主原创文章,未经博主允许不得转载. 强一致性:系统中的某个数据被成功更新后,后续任何对该数据的读取操作都将得到更新后的值: 弱一致性:系统中的某个数据 ...
- cap与一致性(强一致性、弱一致性、最终一致性)
在足球比赛里,一个球员在一场比赛中进三个球,称之为帽子戏法(Hat-trick).在分布式数据系统中,也有一个帽子原理(CAP Theorem),不过此帽子非彼帽子.CAP原理中,有三个要素: 一致性 ...
- CAP原理,分布式一致性算法,两阶段提交,三阶段提交,Paxos,Raft,zookeeper的选主过程,zab协议,顺序一致性,数据写入流程,节点状态,节点的角色
我们知道,一般在分布式应用都有CAP准则: C Consistency, 一致性,分布式中的各个节点数据保持一致 A availability 可用性,任何时刻,分布式集群总是能够提供服务 P par ...
- 什么是顺序一致性呢?
在讲顺序一致性之前,咱们思考一个问题,假如说zookeeper是一个最终一致性模型,那么他会发生什么情况 ClientA/B/C假设只串行执行, clientA更新zookeeper上的一个值x.Cl ...
- Java之内存模型的基础、重排序、顺序一致性、volatile、锁、final
为什么80%的码农都做不了架构师?>>> 深入理解Java内存模型(一)--基础 深入理解Java内存模型(二)--重排序 深入理解Java内存模型(三)--顺序一致性 深入理 ...
- Java内存模型深度解析:顺序一致性--转
原文地址:http://www.codeceo.com/article/java-memory-3.html 数据竞争与顺序一致性保证 当程序未正确同步时,就会存在数据竞争.java内存模型规范对数据 ...
最新文章
- Pair Programming 1 (Casual Game) 曹竹 杨牧 贪吃蛇游戏扩展 Blog Report
- centos桥接模式网络配置
- 软件工程概论———登录界面的设计
- [蓝桥杯][2018年第九届真题]全球变暖(DFS)
- 对怀孕的人有害的食物。。。朋友们记住咯!(欢迎转载)
- androidstudio带pom的上传到jcenter_输送机@网带输送机@304网带输送机@304不锈钢网带输送机@输送机网带厂家定制...
- 深入理解ES6之迭代器与生成器
- 操作 mysql 不生成日志_详解MySQL的日志
- 比中年危机更可怕的,是“下半生危机”
- 【考研数学】张宇1000题,汤家凤1800,李永乐660,应该怎么选择?
- QT语言版本支持---国际化语言家功能的使用
- CSS相对定位,固定定位,绝对定位
- ABB机器人模块加密软件,代模块加密,加密之后别人就看不见你 写的程序,也无法打开,但是可以正常运行
- sqlserver 电话号3-8位用*号代替
- 通过读取csv/xmladd()reduct()数据并使用allure展示测试报告
- Kong+Konga配置原理、操作 学习分享
- 主板外形尺寸 ATX 介绍
- 移动硬盘怎么连接服务器,无线路由器加USB硬盘组建属于自己的FTP服务器的方法 隐者黑鹰...
- iTunes备份文件路径正确修改方法(亲测可用,2018.10.19更新)
- 抓取淘宝天猫商品详情图