Write-all-read-one

Write-all-read-one(简称 WARO)是一种最简单的副本控制规则,顾名思义即在更新时写所有的副本,只有在所有的副本上更新成功,才认为更新成功,从而保证所有的副本一致,这样在读取数据时可以读任一副本上的数据。
缺点:读服务的可用性较高,但更新服务的可用性不高

Quorum 定义

Quorum 机制只需成功更新 N 个副本中的 W 个,在读取 R 个副本时,一定可以读到最新的成功提交的数据。R>N-W
注:仅仅依赖 quorum 机制是无法保证强一致性的。因为仅有 quorum 机制时无法确定最新已成功提交的版本号,除非将最新已提交的版本号作为元数据由特定的元数据服务器或元数据集群管理,否则很难确定最新成功提交的版本号。

如何读取最新成功提交的数据

1. 限制提交的更新操作必须严格递增,即只有在前一个更新操作成功提交后才可以提交后一个更新操作,从而成功提交的数据版本号必须是连续增加的。

2. 读取 R 个副本,对于 R 个副本中版本号最高的数据,若已存在 W 个,则该数据为最新的成功提交的数据;若存在个数据少于 W 个,则继续读取其他副本,直若成功读取到 W 个该版本的副本,则该数据为最新的成功提交的数据;如果在所有副本中该数据的个数肯定不满足 W 个,则 R 中版本号第二大的为最新的成功提交的副本。

注:在单纯使用 Quorum 机制时,若要确定最新的成功提交的版本,最多N 个副本,当出现任一副本异常时,读最新的成功提交的版本这一功能都有可能不可用。

基于 Quorum 机制选择 primary

在基本 primary-secondary 协议中引入 quorum 机制,即 primary 成功更新 W 个副本(含 primary 本身)后向用户返回成功。

读取数据:

①如果需要强一致性的立刻读取到最新的成功提交的数据,则可以只读 primary 副本上的数据

②如果需要会话一致性,则可以根据之前已经读到的数据版本号在各个副本上进行选择性读取

③如果只需要弱一致性,则可以选择任意副本读取。

选择primary更新数据:

①以新primary的版本为准,其他版本认为是脏数据

②以最高版本为准,新primary同步到最新版本

实例:

Zookeeper 使用的 paxos 协议本身就是利用了 Quorum机制,后面介绍。
当利用 paxos 协议外选出 primary 后,Zookeeper 的更新就由 primary 节点控制,每次更新操作,primary 节点只需更新超过半数(含自身)的节点后就返回用户成功。每次更新操作都会递增各个节点的版本号(xzid)。当 primary 节点异常,利用 paxos 协议选举新的 primary 时,每个节点都会以自己的版本号发起 paxos 提议,从而保证了选出的新 primary 是某个超过半数副本集合中版本号最大的副本。但是新 primary 的版本号未必是一个最新已提交的版本,可能是一个只更新了少于半数副本的中间态的更新版本,此时新primary 完成与超过半数的副本同步后,这个版本的数据自动满足 quorum 的半数要求;另一方面,新 primary 的版本可能是一个最新已提交的版本,但可能会存在其他副本没有参与选举但持有一个大于新 primary 的版本号的数据(中间态版本),此时这样的中间态版本数据将被认为是脏数据,在与新 primary 进行数据同步时被 zookeeper 丢弃。

分布式系统Quorum机制相关推荐

  1. 分布式系统原理 之4 Quorum 机制

    分布式系统原理 Quorum 机制 Quorum 机制是一种简单有效的副本管理机制.本节首先讨论一种最简单的副本控制规则write-all-read-one,在此基础上,放松约束,讨论 quorum ...

  2. leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用

    leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...

  3. Hadoop2.6.0学习笔记(九)SPOF解决方案Quorum机制

    鲁春利的工作笔记,谁说程序员不能有文艺范? 以下内容转载自:Eric雪菲的Quorum机制漫谈和junhua3344的Quorum机制 Quorum这个词的念作"科瑞姆",字面意思 ...

  4. 分布式系统熔断机制的工作原理

    目录 前言 1. 问题产生 2. 形成过程 2. 服务熔断和服务降级区别 2.1 服务降级:系统有限的资源的合理协调 2.2 服务熔断:应对雪崩效应的链路自我保护机制.可看作降级的特殊情况 2.3 服 ...

  5. 分布式系统Lease机制

    最近在学习分布式,将学习笔记,总结精华分享出来,欢迎大家一起学习一起讨论! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 前言:Lease 机制 ...

  6. Zookeeper的Quorum机制-谈谈怎样解决脑裂(split-brain)

    在使用zookeeper的过程中,我们经常会看到这样一些说法: 1.zookeeper cluster的节点数目必须是奇数. 2.zookeeper 集群中必须超过半数节点(Majority)可用,整 ...

  7. Quorum (分布式系统)

    Quorum (分布式系统) Quorum 机制,是一种分布式系统中常用的,用来保证数据冗余和最终一致性的投票算法,其主要数学思想来源于鸽巢原理. 基于Quorum投票的冗余控制算法 在有冗余数据的分 ...

  8. 分布式系统理论:Quorum算法

    前言 笔者在分布式一致性算法的重要原理:鸽巢原理中介绍了鸽巢原理,而本文将要介绍Quorum算法正是鸽巢原理的应用之一.本文将按以下顺序对Quorum算法进行介绍: 分布式系统为什么需要Quorum算 ...

  9. 基于CAP:深入剖析分布式一致性机制

    点击关注公众号,Java干货及时送达 -     前言    - 分布式中一致性是非常重要的,分为弱一致性和强一致性.现在主流的一致性协议一般都选择的是弱一致性的特殊版本:最终一致性.下面就从分布式系 ...

最新文章

  1. 用Windows Media Player截图的方法
  2. python保存到固定文件夹的存储路径不能直接复制!
  3. 【JVM】StackOverflowError与OutOfMemoryError
  4. python递归深度报错--RuntimeError: maximum recursion depth exceeded
  5. JavaSE(二)——循环语句
  6. python ckeditor上传图片400错误_又一款python开发神器
  7. 天津科技大学中外合作办学计算机科学怎么样,天津科技大学计算机类(中外合作办学)(计算机科学与技术(信息处理专业2016年在安徽理科高考录取最低分数线...
  8. 技术点:注意Java的java.util.List.subList的坑
  9. python学习图解_大牛整理!Python学习方法和学习路线,看完茅塞顿开!
  10. html向php传中文没有值,php - 为什么我的PHP / HTML表单没有向我发送数据 - SO中文参考 - www.soinside.com...
  11. 设计模式以及类图的实现
  12. Dreamweaver(Dw)2021软件下载及安装教程并创建一个网页
  13. Mac修改hosts文件
  14. 小米 win10 android 双系统,PC平板二合一 运行win10/安卓双系统
  15. DoublyLinkedList
  16. 『市场基础变量计算』
  17. JUC:6_1集合类并发问题、集合类并发不安全解决方案1:list
  18. linux activemq 打印日志,Log4j.xml配置日志按级别过滤并将指定级别的日志发送到ActiveMQ...
  19. 十分钟搞定SSD1963液晶屏驱动
  20. JavaScript实现简单的双向数据绑定(Ember、Angular、Vue)

热门文章

  1. linux 卸载自带java_卸载linux系统自带JDK,安装自己的jdk
  2. 文件夹的位置_感觉电脑变卡了?删除这5个文件夹 C盘立马清爽
  3. HDU2227(非降子序列的个数)
  4. Duilib教程-自动布局3-分隔条
  5. base64编解码的类
  6. 手把手教你玩转SOCKET模型:重叠I/O篇
  7. 剖析入侵技术 嗅探软件了解
  8. Java8 中用法优雅的 Stream,性能也优雅吗?
  9. 在业务系统中寻求技术含量
  10. 力扣- -241.为运算表达式设计优先级