• 2P/3P提交(为了保证事务的ACID)

2P 就是二段提交(RDBMS经常就这种机制,保证强一致性),3P就是三段提交;

2P提交 -- 1阶段:提交事务请求(投票阶段)

             

2P提交 -- 2阶段:执行事务的提交(commit、rollback的情况)

3P提交- 阶段1:是否提交

3P提交- 阶段2:预先提交

3P提交- 阶段3:提交(commit、rollback)

相当于将2p提交的第一步拆解称了两步进行操作;注意在2P和3P提交时只有当最后一步的时候才进行rollback;

  • CAP理论(分布式系统遵循的理论)

P     Partition tolerance     分区容错性;

A     Availability                  可用性;

C    Consistency               一致性;

CA (放弃P):将所有的数据放在一个节点。满足可用性和一致性;

AP (放弃C):并不是代表放弃一致性,而是使用弱一致性来带表强一致性;

CP (放弃A):一旦系统出现故障,受影响的服务器需要等待一段时间,在恢复期间无法对外部提供帮助;

  • BAST理论

大致可分为:基本可用(bascially available),软状态(soft state),最终一致性(Eventually consistent);

基本可用:在分布式系统中,允许损失部分可用性;比如服务降级,页面降级等;

软状态:允许分布式中出现中间状态,而且中间状态不影响系统的可用性;比如springCloud的熔断;

最终一致性:经过一段时间数据达成一致;比如项目中一些报表的统计,只在一段时间才会查看的数据;

  • Paxos算法

Paxos:多数派决议(最终解决一致性);

三种角色:

proposer:提交者(议案的提交者);提交议案,提交批准议案;

Acceptor:接受者(议案的接受者);接受议案或者驳回议案,返回proposer相关内容

Learner :学习者;如果产生议案,就学习议案;

设定1:如果Acceptor没有接受议案,那么他必须接受第一个议案

设定2:每个议案比必须有一个编号,并且编号只能增长,不能重复。越往后越大。

设定3:接受编号大的议案,如果小于之前接受议案编号,那么不接受

设定4:议案有2种(提交的议案,批准的议案)

  • Prepare阶段(决议提交)

  1. Proposer希望议案V。首先发出Prepare请求至大多数Acceptor。Prepare请求内容为序列号K
  2. Acceptor收到Prepare请求为编号K后,检查自己手里是否有处理过Prepare请求。
  3. 如果Acceptor没有接受过任何Prepare请求,那么用OK来回复Proposer,代表Acceptor必须接受收到的第一个议案(设定1)
  4. 否则,如果Acceptor之前接受过任何Prepare请求(如:MaxN),那么比较议案编号,如果K<MaxN,则用reject或者error回复Proposer
  5. 如果K>=MaxN,那么检查之前是否有批准的议案,如果没有则用OK来回复Proposer,并记录K
  6. 如果K>=MaxN,那么检查之前是否有批准的议案,如果有则回复批准的议案编号和议案内容(如:<AcceptN, AcceptV>, AcceptN为批准的议案编号,AcceptV为批准的议案内容)
  • Accept阶段(批准阶段)

  1. Proposer收到过半Acceptor发来的回复,回复都是OK,且没有附带任何批准过的议案编号和议案内容。那么Proposer继续提交批准请求,不过此时会连议案编号K和议案内容V一起提交(<K, V>这种数据形式)
  2. Proposer收到过半Acceptor发来的回复,回复都是OK,且附带批准过的议案编号和议案内容(<pok,议案编号,议案内容>)。那么Proposer找到所有回复中超过半数的那个(假设为<pok,AcceptNx,AcceptVx>)作为提交批准请求(请求为<K,AcceptVx>)发送给Acceptor。
  3. Proposer没有收到过半Acceptor发来的回复,则修改议案编号K为Kx,并将编号重新发送给Acceptors(重复Prepare阶段的过程)
  4. Acceptor收到Proposer发来的Accept请求,如果编号K<MaxN则不回应或者reject。
  5. Acceptor收到Proposer发来的Accept请求,如果编号K>=MaxN则批准该议案,并设置手里批准的议案为<K,接受议案的编号,接受议案的内容>,回复Proposer。
  6. 经过一段时间Proposer对比手里收到的Accept回复,如果超过半数,则结束流程(代表议案被批准),同时通知Leaner可以学习议案。
  7. 经过一段时间Proposer对比手里收到的Accept回复,如果未超过半数,则修改议案编号重新进入Prepare阶段。

在Paxos算法面前,其他(包括2P、3P)都是渣渣,都是残次品。Google Chubby的作者Mike Burrows说过这个世界上只有一种一致性算法,那就是Paxos,其它的算法都是残次品。

  • 对于Paxos的例子可以了解一下拜占庭将军问题

拜占庭帝国就是5~15世纪的东罗马帝国,拜占庭即现在土耳其的伊斯坦布尔。我们可以想象,拜占庭军队有许多分支,驻扎在敌人城外,每一分支由各自的将军指挥。将军们智能靠通讯员进行通讯。在观察敌人以后,忠诚的将军们必须制订一个统一的行动计划——进攻或者撤退。然而,这些将军冢有叛徒,他们不希望忠诚的将军们能达成一致,因而影响统一行动计划的制订与传播。

问题是:将军们必须有一个协议,使所有忠诚的将军们能够达成一致,而且少数几个叛徒不能使忠诚的将军们作出错误的计划——使有些将军进攻而另一些将军撤退。

如果这11位将军中有间谍呢? 假设有9位忠诚的将军,5位判断进攻,4位判断撤退,还有2个间谍恶意判断撤退,虽然结果是错误的撤退,但这种情况完全是允许的。因为这11位将军依然保持着状态一致性。

1.11位将军进攻城池

2.同时进攻(议案、决议)、同时撤退(议案、决议)

3.不管撤退还是进攻,必须半数的将军统一意见才可以执行

4.将军里面有叛徒,会干扰决议生成

  • 先后提议的场景(在网上找到的交叉场景的图,感觉挺清晰)

角色:

proposer:参谋1,参谋2

acceptor:将军1,将军2,将军3(决策者)

  1. 参谋1发起提议,派通信兵带信给3个将军,内容为(编号1);
  2. 3个将军收到参谋1的提议,由于之前还没有保存任何编号,因此把(编号1)保存下来,避免遗忘;同时让通信兵带信回去,内容为(ok);
  3. 参谋1收到至少2个将军的回复,再次派通信兵带信给3个将军,内容为(编号1,进攻时间1);
  4. 3个将军收到参谋1的时间,把(编号1,进攻时间1)保存下来,避免遗忘;同时让通信兵带信回去,内容为(Accepted);
  5. 参谋1收到至少2个将军的(Accepted)内容,确认进攻时间已经被大家接收;
  6. 参谋2发起提议,派通信兵带信给3个将军,内容为(编号2);
  7. 3个将军收到参谋2的提议,由于(编号2)比(编号1)大,因此把(编号2)保存下来,避免遗忘;又由于之前已经接受参谋1的提议,因此让通信兵带信回去,内容为(编号1,进攻时间1);
  8. 参谋2收到至少2个将军的回复,由于回复中带来了已接受的参谋1的提议内容,参谋2因此不再提出新的进攻时间,接受参谋1提出的时间;
  • 交叉场景(在网上找到的交叉场景的图,感觉挺清晰)

proposer:参谋1,参谋2

acceptor:将军1,将军2,将军3(决策者)

  1. 参谋1发起提议,派通信兵带信给3个将军,内容为(编号1);
  2. 3个将军的情况如下
  1. 将军1和将军2收到参谋1的提议,将军1和将军2把(编号1)记录下来,如果有其他参谋提出更小的编号,将被拒绝;同时让通信兵带信回去,内容为(ok);
  2. 负责通知将军3的通信兵被抓,因此将军3没收到参谋1的提议;
  3. 参谋2在同一时间也发起了提议,派通信兵带信给3个将军,内容为(编号2);
  4. 3个将军的情况如下:(a)将军2和将军3收到参谋2的提议,将军2和将军3把(编号2)记录下来,如果有其他参谋提出更小的编号,将被拒绝;同时让通信兵带信回去,内容为(ok);(b)负责通知将军1的通信兵被抓,因此将军1没收到参谋2的提议;
  5. 参谋1收到至少2个将军的回复,再次派通信兵带信给有答复的2个将军,内容为(编号1,进攻时间1);
  6. 2个将军的情况如下:(a)将军1收到了(编号1,进攻时间1),和自己保存的编号相同,因此把(编号1,进攻时间1)保存下来;同时让通信兵带信回去,内容为(Accepted);(b)将军2收到了(编号1,进攻时间1),由于(编号1)小于已经保存的(编号2),因此让通信兵带信回去,内容为(Rejected,编号2);
  7. 参谋2收到至少2个将军的回复,再次派通信兵带信给有答复的2个将军,内容为(编号2,进攻时间2);
  8. 将军2和将军3收到了(编号2,进攻时间2),和自己保存的编号相同,因此把(编号2,进攻时间2)保存下来,同时让通信兵带信回去,内容为(Accepted);
  9. 参谋2收到至少2个将军的(Accepted)内容,确认进攻时间已经被多数派接受;
  10. 参谋1只收到了1个将军的(Accepted)内容,同时收到一个(Rejected,编号2);参谋1重新发起提议,派通信兵带信给3个将军,内容为(编号3);
  11. 3个将军的情况如下:(a)将军1收到参谋1的提议,由于(编号3)大于之前保存的(编号1),因此把(编号3)保存下来;由于将军1已经接受参谋1前一次的提议,因此让通信兵带信回去,内容为(编号1,进攻时间1);(b)将军2收到参谋1的提议,由于(编号3)大于之前保存的(编号2),因此把(编号3)保存下来;由于将军2已经接受参谋2的提议,因此让通信兵带信回去,内容为(编号2,进攻时间2);(c)负责通知将军3的通信兵被抓,因此将军3没收到参谋1的提议;
  12. 参谋1收到了至少2个将军的回复,比较两个回复的编号大小,选择大编号对应的进攻时间作为最新的提议;参谋1再次派通信兵带信给有答复的2个将军,内容为(编号3,进攻时间2);
  13. 将军1和将军2收到了(编号3,进攻时间2),和自己保存的编号相同,因此保存(编号3,进攻时间2),同时让通信兵带信回去,内容为(Accepted);
  14. 参谋1收到了至少2个将军的(accepted)内容,确认进攻时间已经被多数派接受。

Zookeeper的Paxos算法,(2P/3P/CAP/BASE)一致性协议简单介绍相关推荐

  1. Zookeeper与paxos算法

    一.            zookeeper是什么 官方说辞:Zookeeper 分布式服务框架是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如 ...

  2. CAP与一致性协议算法

    一致性算法是为了解决分布式系统的CAP理论中的一致性(Consistency)问题 数据一致性协议广泛存在于分布式系统中,例如:注册中心,消息中间件(kafka),分布式数据库 可以说只要是涉及到集群 ...

  3. 分布式系统 - CAP, BASE, ACID之间的关系 - 学习/实践

    1.应用场景 主要用于学习分布式系统中CAP, BASE, ACID之间的关系,理清各自的应用场景. 2.学习/操作 1.文档阅读 22 | 想成为架构师,你必须知道CAP理论-极客时间 23 | 想 ...

  4. Zookeeper与Paxos

    初识Zookeeper zookeeper为分布式应用提供了高效且可靠的分布式协调服务,提供了诸如统一命名服务.配置管理和分布式锁等分布式的基础服务. 在解决分布式数据一致性方面,zk没有直接采用Pa ...

  5. [转]Paxos算法-算法形成理论

    paxos的作者自述paxos is simple,看了不少遍还没有读懂,说明真的不simple 还好有强大的网络,转篇齐全的 原文地址:http://blog.csdn.net/chen77716/ ...

  6. 区块链共识之Paxos算法理解与实战

    0.前言 本文记录笔者学习和理解区块链共识算法Paxos的点滴,文章比较长,需要耐心来细细琢磨,笔者也是苦战了一个周末才对此有那么一点初步了解,有问题的地方请不吝斧正! 1.初始是阅读本文后续内容的基 ...

  7. 五:分布式事务一致性协议paxos的应用场景

    1.应用场景 (1)分布式中的一致性 Paxos算法主要是解决一致性问题,关于"一致性",在不同的场景有不同的解释: NoSQL领域:一致性更强调"能读到新写入的&quo ...

  8. 【人工智能 Open AI】解释一下 Raft 分布式一致性协议算法,并用伪代码实例说明。

    解释一下 Raft 分布式一致性协议算法,并用伪代码实例说明. 文章目录 Raft 简介 Raft Protocol Description Raft 协议讲解 Raft vs. Paxos Raft ...

  9. paxos协议 对比_分布式一致性协议三部曲-深入理解一致性协议Paxos

    CAP二阶段提交协议(2PC)协议详情改进缺陷参与者 还都处于锁定事务资源的状态中,而无法继续完成事务操.尽管协调者挂掉后可以重新选举一个协调者,但是无法解决因为协调者宕机导致的参与者处于阻塞状态的问 ...

最新文章

  1. seaborn使用violinplot函数可视化小提琴图、并在violinplot函数中设置inner参数来添加数据点显示数据的稠密程度
  2. 【深度学习】从R-CNN到Mask R-CNN的思维跃迁
  3. ionic4监听返回事件 AppMinimize navController
  4. Docker入门-架构
  5. tensorflow在文本处理中的使用——Word2Vec预测
  6. Atitit json数据操作法 目录 1. 2. 常用json函数类型四大类型 crud判断 1 1.1. 2.1. 创建json 2 1 1.2. 2.2. 选择与读取 3读取数据读取key
  7. Xshell是做什么用的?Xshell使用教程分享
  8. 伺服驱动器cn1引脚定义_关于三菱驱动器CN1端口的接线-专业自动化论坛-中国工控网论坛...
  9. centos usb转网口_CentOS 6.5安装qf9700 USB网卡驱动
  10. 用Python网络爬虫来看看最近电影院都有哪些上映的电影
  11. Chrome浏览器乱码问题
  12. U3D游戏开发框架(三)——UI管理器
  13. Genero Studio导入ds.sch失败处理办法_Error importing schema file:Check Ouput view for datails. mod-db3[11003]
  14. 如何拍出来好看的Vlog,必备小技能(六)?
  15. Python爬虫——新浪微博(网页版)
  16. 一些常用的判断预测、拟合、回归的精度评价函数和相关性评价函数
  17. win10家庭版访问域文件服务器拒绝,解决Win10系统文件夹拒绝访问的方法
  18. python多线程爬斗破苍穹
  19. 怎么将pdf文件转换成excel
  20. R语言函数总结(转)

热门文章

  1. Cows and Cars
  2. 浅谈monorepo
  3. 如何在公司里体现前端的价值以及提升自己的议价能力
  4. c++ 虚函数多态、纯虚函数、虚函数表指针、虚基类表指针详解
  5. python可以应用于哪些方面?
  6. 应届生面试要点总结(10)操作系统相关
  7. android 9 手机硬件性能,一加9系列系统评测:功能丰富+稳定流畅,或是目前最佳安卓系统...
  8. 设有关系模式W(C,P,S,G,T,R)其中各个属性的含义是:C课程,P教师,S学生,G成绩,T实践,R教室,根据定义有如下依赖集D={C→P,(S,C)G,(T,R)C,(T,P)R,(T,S)R}
  9. C语言判断输入的是否为数字
  10. 让BAT执行php程序,不错哦!