文章目录

  • 强一致性和最终一致性
  • 什么是Quorum NWR
  • Quorum NWR的三要素
  • Dynamo的NWR模型
  • 如何发现不一致副本

强一致性和最终一致性

 如果部门想做一个业务数据的实时分析系统,希望数据写入成功后就能马上读取到最新的数据,其实就是要求实现一个强一致性系统,数据更新后能立即查询到。
 那么,在这里面首先要搞清楚强一致性和最终一致性有什么区别。

  • 强一致性:保证写操作完成后,任何后续访问都能读取到最近更新成功后的数据
  • 最终一致性:如果对某个对象没有新的写操作了,最终所有后续访问经过一段时间后都能读到相同的最近更新的值。也就是说,写操作完成后,后续访问可能会读到旧的数据。

什么是Quorum NWR

 如果为了这么一个临时需求重新开发一套系统肯定不合适,因为数据量大,耗时长。可以考虑在原有系统上开始实现新功能,通过Quorum NWR自定义一致性级别,通过临时调整写入或者查询的方式,当W+R>N时就可以实现强一致性了。
  在AP型分布式系统中(比如Dynamo、cassandra、InfluxDB的集群),Quorum NWR通常都是会实现的一个功能。这样,用户可以根据业务的特点,灵活地指定一致性级别。
  下面我们首先来了解下NWR的原理。
  Quorum NWR的核心内容就是N,W,R。一般就是通过组合这三个要素来实现自定义一致性级别的。

Quorum NWR的三要素

  • N表示副本数,又叫做复制因子。所以N用来描述同一份数据有多少个副本。

  • W表示一次写操作入至少写入W份数据才算写入成功。

  • R表示一次读操作至少读到R份数据才算读取成功。
     配置的时候要求W+R>N,因为W+R>N,所以R>N-W表示读取的副本份数一定要比总份数减去确保写成功的份数要大。也就是说,每次读取都能至少读取到一份最新的数据。
      下面举个例子,如下图所示

     从图中你可以看到,DATA-3的读副本数为2。也就是说,客户端读取DATA-3的数据时,需要读取2个副本的数据,然后返回最新的那份数据。
      无论客户端如何执行读操作,哪怕它读取的是写操作未强制更新副本数据的节点(比如节点N1),但因为W(2)+R(2)>N(3),意思就是访问节点N1执行读操作时,,因为要读2份数据副本,所以除了节点N1上的DATA-3,还会读取节点N2或N3上的DATA-3。而节点N2和N3的DATA-3副本是强制更新成功的。这个时候,返回给客户端肯定是最新的那份数据。
      所以, 通过设置R为2,即使读到前面问题中的未更新副本数据,也能返回更新后的那份数据从而实现强一致性。
      除此之外,N、W、R的不同组合,会产生不同的一致性效果。具体如下:

  • 当W+R>N的时候,整个系统保持强一致性,一定能返回最新的数据

  • 当W+R<=N的时候,对于客户端来讲,整个系统只能保证最终一致性,可能会读取到旧数据。

Dynamo的NWR模型

  Dynamo NWR模型是把CAP选择权交给用户,让用户自己选择CAP。

  • 优化写性能(AP)

 当我们优化写性能(写多读少的场景),可以配置W=1,表示只要写完1个副本就返回,其它副本慢慢自己异步复制。如果N=3,那么根据W+R>N,则R=3,表示需要读取3个副本以判断数据是否冲突。这样的情况只要写任何节点成功就认为成功,但是读取的时候必须从所有节点读出数据。

  • 优化读性能(CP)
      当我们优化读性能(读多写少的场景),可以配置W=N,表示写完所有的副本才算成功,所有只能同步复制。根据公式W+R>N的时候,则R=1,表示只需要读取一个副本即可。这种情况任何一个节点读取成功就成功,但是写的时候必须写所有节点。
  • 平衡读写
     当我们的数据不多,单台机器能搞定的时候,可以配置N=2,根据公式W+R>N,则W=2,R=2

如何发现不一致副本

  当W=1时,用户A更新一个副本,在A的副本还有异步复制到其它节点的时候,如果用户B也在其它节点上更新了数据那么数据处于不一致状态了。Dynamo采用了向量clock(Vector Clock)。每个节点各自记录自己的版本信息。主要包括两个部分1)节点名称2)版本号。举个例子,A、B、C三个节点,W=1,R=N=3。一个写请求被节点A处理,它会增加一个版本信息(A, 1),我们把这个时候的数据记作D1(A,1),另外一个请求同样被A节点处理了,这时候记作D2(A,2),这个时候是不会造成版本冲突的。现在讲D2异步复制到B和C两个节点,此时B和C上的数据还是D2(A,2),三个节点上的数据版本一致。如果新的请求被节点B处理,此时节点B上的数据版本变为D3(A,2 ;B, 1),这样数据的全局版本号为3,节点A更新了2次,B更新了1次。
  如果D3数据还没有异步复制到节点C,C处理了一个新的写请求,此时节点C上的数据D4(A,2;C,1)。
  这个时候,一个收到一个读请求,因为R=N=3,所以要读取3个节点的版本。

  • 节点A:(A,2)
  • 节点B:(A,2;B,1)
  • 节点C:(A,2;C,1)
      这个时候可以看到节点A的版本最老被舍弃,但是节点B和C存在版本冲突得交给用户自己做版本冲突管理。dynamo做版本并发控制类似SVN提交代码冲突的原理类似

来聊聊Quorum NWR如何自定义一致性相关推荐

  1. 太白金星:我很关心分布式 Quorum NWR

    来源 | 悟空聊架构 责编 | 寇雪芹 头图 | 下载于视觉中国 先来看一段神秘的对话: 太白金星:听闻老君最近在练神丹妙药,可否与我一讲? 太上老君:老白啊,我最近在练六颗丹药:两颗延年丹.两颗健步 ...

  2. 分布式之Quorum NWR算法

    写在前面 假设现在我们实现了AP 系统,但是公司突然要对某些业务进行实时的数据计算,并且要求按照强一致性的方式来读取数据,此时作为系统设计这的我们该怎么办呢?单独为这部分业务实时抽出最新数据?还是修改 ...

  3. Quorum NWR

    NWR是一种在分布式存储系统中用于控制一致性级别的一种策略.在Amazon的Dynamo云存储系统中,就应用NWR来控制一致性. 让我们先来看看这三个字母的含义: N:同一份数据的Replica的份数 ...

  4. 聊聊云原生数据库的一致性

    Raft or not? 为什么 Consensus-based replication 不是分布式数据库日志复制的银弹? 背景 近期在跟团队同学聊天的过程中,听到了这样一句观点: "我们团 ...

  5. 聊聊分布式事务分布式系统事务一致性解决方案

    事务就是一个会话过程中,对上下文的影响是一致的,要么所有的更改都做了,要么所有的更变都撤销掉.就要么生,要么死.没有半死不死的中间不可预期状态. 参考下薛定谔的猫. 事务是为了保障业务数据的完整性和准 ...

  6. 架构师之路 — 分布式系统 — 分布式一致性难题

    目录 文章目录 目录 分布式一致性难题 分布式一致性算法 Paxos 算法 Raft 算法 Quorum NWR 算法 分布式一致性的实现方式 主动复制 被动复制 同步复制 异步复制 分布式一致性难题 ...

  7. OpenStack_Swift源代码分析——Ring基本原理及一致性Hash算法

    1.Ring的基本概念 Ring是swfit中最重要的组件.用于记录存储对象与物理位置之间的映射关系,当用户须要对Account.Container.Object操作时,就须要查询相应的Ring文件( ...

  8. 分布式理论 二阶段提交 2PC 3PC 端到端一致性 分布式事务

    一.临界知识对我们学习的巨大帮助 临界知识这个概念,是我上个月读<好好学习:个人知识管理精进指南>这本书学到的概念,真的有被启发到,现在觉得它对于我们深刻了解世界有着非常大的作用. 所谓临 ...

  9. 分布式服务化系统一致性的“最佳实干”

    为什么80%的码农都做不了架构师?>>>    1 背景 一致性是一个抽象的.具有多重含义的计算机术语,在不同应用场景下,有不同的定义和含义.在传统的IT时代,一致性通常指强一致性, ...

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

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

最新文章

  1. 如何利用pyecharts绘制炫酷的关系网络图?
  2. Django Admin 录入中文错误解决办法
  3. Excel表格数据导入到SQLServer数据库
  4. U3D的飞船太空射击例子中,使用coroutine
  5. 案例让一个命令在开机的时候自动运行的方法
  6. 自动驾驶芯片_盘点全球自动驾驶芯片“战场”参与者
  7. 【我的物联网成长记5】如何进行物联网大数据分析?
  8. 线上redis一般安在linux_Redis企业级应用-Linux安装搭建一个完整的linxu线上服务(上)...
  9. Java数组与容器类分析资料--数组、List和Set、Map-asp.net关注
  10. 一文看懂机器视觉工业相机与普通相机的区别
  11. anaconda conda 的使用(指定镜像源、虚拟环境的创建)
  12. 64位 centos 服务器 编译安装 gcc-4.6.2 和 codeviz
  13. python获取视频缩略图_Python代码生成视频的缩略图的实例讲解
  14. 易语言教程_v20200926
  15. 太牛X了! 呕心沥血整理的4000页Java学习手册文档!
  16. 交换排序图解_动画图解十个经典排序算法
  17. NeoKylin Linux Advanced Server release 6.0 安装及卸载达梦7入门操作
  18. 在线web工具pdf转word工具推荐【磁钉pdf转word】
  19. TCP/IP 第1章 概 述
  20. AliCDN,盛开在云端的花朵

热门文章

  1. 微信公众号开发系列三:响应关注和取关事件
  2. Intel无线网卡linux,Deepin 15.8/Ubuntu 18.04用intel无线网卡9260ac速度跑不满的解决
  3. 台式计算机无法连接网络,台式电脑无法连接无线网络怎么办
  4. position: sticky 详解
  5. 7号团队-团队任务5:项目总结会
  6. 傅里叶变换复数形式的实部代表什么_复数形式傅里叶变换的物理意义中,相位究竟指的是什么?...
  7. 电脑开机启动选择系统
  8. 15kw科比服务器型号,KEB变频器/keb伺服技术/KEB制动器
  9. 2021年烷基化工艺考试题及烷基化工艺多少钱
  10. 年末总结(androidbug)