理解分布式一致性:Paxos协议之Generalized Paxos & Byzantine Paxos

理解分布式一致性:Paxos协议之Generalized Paxos & Byzantine Paxos

在前面一篇文章我们讲到了理解分布式一致性:Paxos协议之Cheap Paxos & Fast Paxos,本篇文章我会讲解Paxos协议的另外两个变种:Generalized Paxos和Byzantine Paxos。

Generalized Paxos

我们大家都知道,分布式一致性的最大问题就是数据同步的问题,而产生问题的原因就是冲突,按照之前讲到的各种Paxos协议方案,发生了冲突之后就必须解决冲突然后重新发送请求,这样就会提高数据同步的成本和时间,那么有没有更好的方式来解决这个问题呢?

答案肯定是有。在分布式系统中,冲突是不可避免的,遇到冲突的时候是不是每次都解决冲突然后重新发送请求呢?我们举个例子:

如果Client1发送请求ReadA,Client2 发送请求ReadB,系统4个Acceptors,有2个接收ReadA,有2个接收ReadB,在共识层面来说,因为没有达到最大的共识个数,达不成共识,需要重新发送。但是如果我们仔细观察一下两个请求,ReadA,ReadB这两个命令是没有任何联系的,无论先执行哪一个都是同样的效果。那么我们可以认为这种情况是没有冲突的,我们在执行层面自行安排两个请求的顺序,而不用再次共识。 这就叫做Generalized Paxos。

这种共识的前提就是不同命令的先后顺序无关。下面以序列图的形式更加详细的介绍:

Client1 Client2 Leader Acceptor1 Acceptor2 Acceptor3 Learner Accept!(ReadA) Accept!(ReadA) Accept!(ReadA) Accept!(ReadA) Accept!(ReadB) Accept!(ReadB) Accept!(ReadB) Accept!(ReadB) Leader and Acceptor1 Accepted(N,<ReadA,ReadB>), Acceptor2 and Acceptor3 Accepted(N,<ReadB,ReadA>), 顺序无关,不冲突,最终值 Accepted(N,<ReadA,ReadB>) Accepted(N,<ReadA,ReadB>) Accepted(N,<ReadA,ReadB>) Accepted(N,<ReadA,ReadB>) Accepted(N,<ReadA,ReadB>) 下面是冲突的情况 ,WriteA和 ReadA同时发 生,产生冲突时, Leader自行 解决冲突,需要重 发请求 Accept!(ReadA) Accept!(ReadA) Accept!(ReadA) Accept!(ReadA) Accept!(WriteA) Accept!(WriteA) Accept!(WriteA) Accept!(WriteA) Accepted(N,<ReadA,WriteA>) Accepted(N,<ReadA,WriteA>) Accepted(N,<WriteA,ReadA>) Accepted(N,<WriteA,ReadA>) 冲突产生, Leader根据协议自行决定执行顺序,这里是<ReadA,WriteA>,N+1 Accept!(N+1,<ReadA,WriteA>) Accept!(N+1,<ReadA,WriteA>) Accept!(N+1,<ReadA,WriteA>) Accepted(N+1,<ReadA,WriteA>) Accepted(N+1,<ReadA,WriteA>) Accepted(N+1,<ReadA,WriteA>) Client1 Client2 Leader Acceptor1 Acceptor2 Acceptor3 Learner

Byzantine Paxos

最后一个我们要讲的Paxos协议是Byzantine Paxos。熟悉虚拟货币的人应该对拜占庭协议并不陌生,这里我们也不多讲拜占庭协议,后面我会用单独的文章来详细介绍拜占庭协议。

上面我们讲到的所有的Paxos协议,只讲到了服务出错的情况,并没有考虑服务伪造篡改信息的情况,即并没有考虑到恶意节点。而拜占庭协议就是为了解决这个问题而产生的。

Byzantine Paxos比正常的Paxos协议多了一个消息验证的过程,这个验证使用了拜占庭协议。

Byzantine Multi-Paxos

下面是个Byzantine Multi-Paxos的序列图:

Client Proposer Acceptor1 Acceptor2 Acceptor3 Learner Request Accept!(N,I,V) Accept!(N,I,V) Accept!(N,I,V) 验证消息 Verify(N,I,V) - BROADCAST Verify(N,I,V) - BROADCAST Verify(N,I,V) - BROADCAST Verify(N,I,V) - BROADCAST Accepted(N,V) Accepted(N,V) Accepted(N,V) Accepted(N,V) Accepted(N,V) Accepted(N,V) Response(V) Client Proposer Acceptor1 Acceptor2 Acceptor3 Learner

Fast Byzantine Multi-Paxos

同样的也会有Fast Byzantine Multi-Paxos,为了更加Fast,本协议将Verify和Accepted进行融合,放在一步完成。

Client Acceptor1 Acceptor2 Acceptor3 Learner Accept!(N,I,V) Accept!(N,I,V) Accept!(N,I,V) 验证消息,同时 Accepted Accepted(N,I,V) - BROADCAST Accepted(N,I,V) - BROADCAST Accepted(N,I,V) - BROADCAST Accepted(N,I,V) - BROADCAST Accepted(N,I,V) - BROADCAST Accepted(N,I,V) - BROADCAST Accepted(N,I,V) - BROADCAST Response(V) Client Acceptor1 Acceptor2 Acceptor3 Learner

更多精彩内容且看:

更多教程请参考flydean的博客

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flydean程序那些事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值