通过 Quorum NWR,你可以自定义一致性级别,通过临时调整写入或者查询的方式,当 W + R > N 时,就可以实现强一致性了 。
所以假如要读取节点B,我们再假设W(2) + R(2) > N(3)这个公式,也就是当写两个节点,读的时候也同时读取两个节点,那么读取数据的时候肯定是读取返回给客户端肯定是最新的那份数据 。
关于 NWR 需要你注意的是,N、W、R 值的不同组合,会产生不同的一致性效 果,具体来说,有这么两种效果:
当 W + R > N 的时候,对于客户端来讲,整个系统能保证强一致性,一定能返回更新后的那份数据 。当 W + R < N 的时候,对于客户端来讲,整个系统只能保证最终一致性,可能会返回旧数据 。
PBFT算法PBFT 算法非常实用,是一种能在实际场景中落地的拜占庭容错算法 。
我们从一个例子入手,看看PBFT 算法的具体实现:
假设苏秦再一次带队抗秦,这一天,苏秦和 4 个国家的 4 位将军赵、魏、韩、楚商量军机要事,结果刚商量完没多久苏秦就接到了情报,情报上写道:联军中可能存在一个叛徒 。这 时,苏秦要如何下发作战指令,保证忠将们正确、一致地执行下发的作战指令,而不是被叛徒干扰呢?
需要注意的是,所有的消息都是签名消息,也就是说,消息发送者的身份和消息内容都是 无法伪造和篡改的(比如,楚无法伪造一个假装来自赵的消息) 。
首先,苏秦联系赵,向赵发送包含作战指令“进攻”的请求(就像下图的样子) 。
![分布式协议与算法,你了解多少?](http://img.jiangsulong.com/220420/1JA25c5-7.jpg)
文章插图
当赵接收到苏秦的请求之后,会执行三阶段协议(Three-phase protocol) 。
赵将进入预准备(Pre-prepare)阶段,构造包含作战指令的预准备消息,并广播给其他 将军(魏、韩、楚) 。
![分布式协议与算法,你了解多少?](http://img.jiangsulong.com/220420/1JA2G60-8.jpg)
文章插图
因为魏、韩、楚,收到消息后,不能确认自己接收到指令和其他人接收到的指令是相同的 。所以需要进入下一个阶段 。
接收到预准备消息之后,魏、韩、楚将进入准备(Prepare)阶段,并分别广播包含作战 指令的准备消息给其他将军 。
比如,魏广播准备消息给赵、韩、楚(如图所示) 。为了 方便演示,我们假设叛徒楚想通过不发送消息,来干扰共识协商(你能看到,图中的楚 是没有发送消息的) 。
![分布式协议与算法,你了解多少?](http://img.jiangsulong.com/220420/1JA2F18-9.jpg)
文章插图
因为魏不能确认赵、韩、楚是否收到了 2f(这里的 2f 包括自己,其中 f 为叛徒数,在我的演示中是 1) 个一致的包含作战指令的准备消 息 。所以需要进入下一个阶段Commit 。
进入提交阶段后,各将军分别广播提交消息给其他将军,也就是告诉其他将军,我已经准备好了,可以执行指令了 。
![分布式协议与算法,你了解多少?](http://img.jiangsulong.com/220420/1JA21193-10.jpg)
文章插图
最后,当某个将军收到 2f + 1 个验证通过的提交消息后,大部分的将军们已经达成共识,这时可以执行作战指 令了,那么该将军将执行苏秦的作战指令,执行完毕后发送执行成功的消息给苏秦 。
![分布式协议与算法,你了解多少?](http://img.jiangsulong.com/220420/1JA2C12-11.jpg)
文章插图
最后,当苏秦收到 f+1 个相同的响应(Reply)消息时,说明各位将军们已经就作战指令达 成了共识,并执行了作战指令 。
在上面的这个例子中:
可以将赵、魏、韩、楚理解为分布式系统的四个节点,其中赵是主节点(Primary node),魏、韩、楚是从节点(Secondary node);
将苏秦理解为业务,也就是客户端;
将消息理解为网络消息;
将作战指令“进攻”,理解成客户端提议的值,也就是希望被各节点达成共识,并提交 给状态机的值 。
最终的共识是否达成,客户端是会做判断的,如果客户端在指定时间内未 收到请求对应的 f + 1 相同响应,就认为集群出故障了,共识未达成,客户端会重新发送请 求 。
PBFT 算法通过视图变更(View Change)的方式,来处理主节点作 恶,当发现主节点在作恶时,会以“轮流上岗”方式,推举新的主节点 。感兴趣的可以自己去查阅 。
相比 Raft 算法完全不适应有人作恶的场景,PBFT 算法能容忍 (n 1)/3 个恶意节点 (也可以是故障节点) 。另外,相比 PoW 算法,PBFT 的优点是不消耗算 力 。PBFT 算法是O(n ^ 2) 的消息复杂度的算法,所以以及随着消息数 的增加,网络时延对系统运行的影响也会越大,这些都限制了运行 PBFT 算法的分布式系统 的规模,也决定了 PBFT 算法适用于中小型分布式系统 。
推荐阅读
- 黄芪枸杞茶的功效,黄芪红茶的功效与作用怎么样
- 工程师进阶:深入TCP协议
- 黄金芽茶的功效与作用,莫干黄芽茶多少度冲好
- 物联网安全之MQTT协议安全
- 立顿红茶的前世与今生,最简单的奶茶做法
- 敬亭绿雪茶怎么泡,饮茶与体质的关系
- 寄生茶的功效与作用,大麦茶的功效与作用
- 荷香茯茶的功效与作用,普洱茶与湖南黑茶
- 工行“去O”数据库选型与分布式架构设计
- 含茶饮料先容,茶饮料不能与茶等同