在分布式数据系统中,也有一个帽子原理(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,并且写入的节点不重叠的话,则会存在写冲突

关于弱一致性、强一致性、顺序一致性相关推荐

  1. 强一致性、弱一致性、顺序一致性、最终一致性概述

    通俗易懂 强一致性.弱一致性.最终一致性.读写一致性.单调读.因果一致性 的区别与联系 什么是一致性 一致性的种类 导致一致性出现的原因 强一致性 与 弱一致性 强一致性两个要求 弱一致性 强一致性和 ...

  2. 聊一聊ZooKeeper的顺序一致性

    来自:架构之美 ZooKeeper作为分布式应用系统协调服务,在分布式系统中的应用非常广泛,在某些业务场景下甚至可以作为注册中心.分布式锁来使用.ZooKeeper之所以能有如此广泛的应用,与它良好的 ...

  3. 强一致性、顺序一致性、弱一致性和共识

    1. 一致性(Consistency) 1.1 强一致性(Strict Consistency) 原子一致性(Atomic Consistency) 线性一致性(Linearizable Consis ...

  4. 强一致性、弱一致性、最终一致性

    强一致性.弱一致性.最终一致性 版权声明:本文为博主原创文章,未经博主允许不得转载. 强一致性:系统中的某个数据被成功更新后,后续任何对该数据的读取操作都将得到更新后的值: 弱一致性:系统中的某个数据 ...

  5. cap与一致性(强一致性、弱一致性、最终一致性)

    在足球比赛里,一个球员在一场比赛中进三个球,称之为帽子戏法(Hat-trick).在分布式数据系统中,也有一个帽子原理(CAP Theorem),不过此帽子非彼帽子.CAP原理中,有三个要素: 一致性 ...

  6. CAP原理,分布式一致性算法,两阶段提交,三阶段提交,Paxos,Raft,zookeeper的选主过程,zab协议,顺序一致性,数据写入流程,节点状态,节点的角色

    我们知道,一般在分布式应用都有CAP准则: C Consistency, 一致性,分布式中的各个节点数据保持一致 A availability 可用性,任何时刻,分布式集群总是能够提供服务 P par ...

  7. 什么是顺序一致性呢?

    在讲顺序一致性之前,咱们思考一个问题,假如说zookeeper是一个最终一致性模型,那么他会发生什么情况 ClientA/B/C假设只串行执行, clientA更新zookeeper上的一个值x.Cl ...

  8. Java之内存模型的基础、重排序、顺序一致性、volatile、锁、final

    为什么80%的码农都做不了架构师?>>>    深入理解Java内存模型(一)--基础 深入理解Java内存模型(二)--重排序 深入理解Java内存模型(三)--顺序一致性 深入理 ...

  9. Java内存模型深度解析:顺序一致性--转

    原文地址:http://www.codeceo.com/article/java-memory-3.html 数据竞争与顺序一致性保证 当程序未正确同步时,就会存在数据竞争.java内存模型规范对数据 ...

最新文章

  1. Pair Programming 1 (Casual Game) 曹竹 杨牧 贪吃蛇游戏扩展 Blog Report
  2. centos桥接模式网络配置
  3. 软件工程概论———登录界面的设计
  4. [蓝桥杯][2018年第九届真题]全球变暖(DFS)
  5. 对怀孕的人有害的食物。。。朋友们记住咯!(欢迎转载)
  6. androidstudio带pom的上传到jcenter_输送机@网带输送机@304网带输送机@304不锈钢网带输送机@输送机网带厂家定制...
  7. 深入理解ES6之迭代器与生成器
  8. 操作 mysql 不生成日志_详解MySQL的日志
  9. 比中年危机更可怕的,是“下半生危机”
  10. 【考研数学】张宇1000题,汤家凤1800,李永乐660,应该怎么选择?
  11. QT语言版本支持---国际化语言家功能的使用
  12. CSS相对定位,固定定位,绝对定位
  13. ABB机器人模块加密软件,代模块加密,加密之后别人就看不见你 写的程序,也无法打开,但是可以正常运行
  14. sqlserver 电话号3-8位用*号代替
  15. 通过读取csv/xmladd()reduct()数据并使用allure展示测试报告
  16. Kong+Konga配置原理、操作 学习分享
  17. 主板外形尺寸 ATX 介绍
  18. 移动硬盘怎么连接服务器,无线路由器加USB硬盘组建属于自己的FTP服务器的方法 隐者黑鹰...
  19. iTunes备份文件路径正确修改方法(亲测可用,2018.10.19更新)
  20. 抓取淘宝天猫商品详情图

热门文章

  1. awk字段分隔符的一个处理技巧,可以用于转换分隔符或者行到列的转换
  2. freesurfer并行处理体会
  3. [ web基础篇 ] session,cookie,token 那些事儿 ?
  4. c语言设置程序的优先级,stm32程序中涉及到c语言优先级
  5. C语言if条件表达式只能是,小白基础知识必备|| 条件表达式
  6. 【0523】vue环境搭建
  7. 小程序web-view嵌套关联公众号
  8. wordpress 表单插件
  9. 求助,瑞虎8plus安卓车机安装第三方软件
  10. Mesure Theory 初味(一)