深度学习
首先,Paxos算法解决的是非拜占庭将军问题,也就是说仅仅是指分布式系统中的节点存在故障,但是不存在恶意节点的场景,在这种情况下如何达成共识。
1998年Lamport提出Paxos算法,后续又增添多个改进版本的Paxos,形成Paxos协议家族。Paxos协议家族有一个共同的特点就是不易于工程实现,Google的分布式锁系统Chubby作为Paxos实现曾经遭遇到很多坑。
除了经典Paxos(又名Basic Paxos),以下均为Paxos的变种,基于CAP定律,侧重了不同方向。
·Cheap Paxos
·Egalitarian Paxos
·Fast Paxos
·Multi-Paxos
·Byzanetine Paxos
Paxos算法实在是太晦涩难懂,上面所列的Paxos算法分支就不详细介绍了。如果要想了解一下经典Paxos算法的最初描述,可以去看一下Lamport的论文《Paxos Made Simple》,在这个算法模型中,使用到了如下的角色:
看到这些角色,有没有觉得很像现代的议会制度。Paxos正是这样的一个模型,当然在计算机中这些所谓的“人”一般就 是指节点,这些角色可以是不同的服务节点也可以是同一个服务节点兼任。提案发出后,就要争取大多数的投票支持,当超过一半支持的时候,发送一半结果给所有 人进行确认,也就是说Paxos能保证在超过一半的正常节点存在时,系统达成共识。提案过程还可以划分不同的场景,如下所示:
(1)单个提案者+多个接收者
这种情况下,一致性容易达成,或者说肯定能达成,因为只有一个提案,要么达成,要么否决或者失败。但是这种情况下,这个唯一的提案者如果出故障,则整个系统就失效了。
(2)多个提案者+单个接收者
这种情况下也容易达成共识,对于接收者,选择一个作为决议即可,当然这种情况也属于单点故障结构。
(3)多个提案者+多个接收者
这种情况,首先是避免了单点故障,但是问题也变得复杂了,既然提案和接收者都有多个,那以哪个为准呢?并没有特别玄妙的办法,既然多个在一起不好解决,那还是得回到单个提案者上去,只不过增加个规则选出那么一个单个提案者来,大致可以有如下的两个方案:
1)与第一种情况靠近,也就是想个办法选出一个提案者出来,约定在某一个时间段内,只允许一个提案通过,可以设置一些竞争规则或者按照一个时间序列的排列选择,总之最后会选出一个提案者。
2)与第二种情况靠近,允许有多个提案者,但是当节点收到多份提案后,通过某个规则选出一份提案,也就是仍然保持只接收一份,规则可以有各种,比如根据提案序号排列或者根据提案时间等。
实际上,在网络中,类似比特币这种,必然是属于多对多的这种情况,发送转账交易的节点不止一个,矿工不止一个,接收区块进行验证的节点当然也不止一个,Paxos中为了解决这样的问题,引入了称为“两阶段提交”的方案。所谓两阶段,就是“准备”和“提交”两个阶段:准备阶段解决大家对哪个提案进行投票的问题,提交阶段解决确认最终值的问题。上述这个过程中,可能会一直有新的提案出现,因此类似于比特币一样,分隔一下时间,比如每隔10分钟打包一次,而打包者只能有一个。
在提交阶段,如果一个提案者在准备阶段接收到大多数节点的回复,则会发出确认消息,如果再次收到大多数的回复,则 保持原先的提案编号和内容;如果收到的消息中有更新的提案,则替换为更新的提案内容;如果没有收到大多数的回复,则再次发出请求,等待其他节点的回复确 认。当接收者发现提案号与自己目前保留的一致,则对提案进行确认。
就个人的理解,这种做法如果是在一个相对私有的环境中或者网络环境比较好的情况下,效果会比较明显,实际上,所谓的收到大多数的回应,这也是节点自身的一个评估,因为节点并没有更好的办法去判断,到底算不算是大多数了,尤其是节点总数还不固定的情况下。
来源:我是码农,转载请保留出处和链接!
本文链接:http://www.54manong.com/?id=97
微信号:qq444848023 QQ号:444848023
加入【我是码农】QQ群:864689844(加群验证:我是码农)
全站首页 | 数据结构 | 区块链| 大数据 | 机器学习 | 物联网和云计算 | 面试笔试
var cnzz_protocol = (("https:" == document.location.protocol) ? "https://" : "http://");document.write(unescape("%3Cspan id='cnzz_stat_icon_1276413723'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "s23.cnzz.com/z_stat.php%3Fid%3D1276413723%26show%3Dpic1' type='text/javascript'%3E%3C/script%3E"));本站资源大部分来自互联网,版权归原作者所有!
评论专区