周志明的软件架构课
周志明
博士,远光软件研究院院长,《深入理解 Java 虚拟机》《凤凰架构》等书作者
54203 人已学习
免费领取
课程目录
已完结/共 74 讲
架构师的视角 (24讲)
周志明的软件架构课
15
15
1.0x
00:00/00:00
登录|注册

32 | 分布式共识(下):Multi Paxos、Raft与Gossip,分布式领域的基石

你好,我是周志明,这节课我们继续学习分布式共识算法。
在上节课的最后,我通过一个批准阶段重复失败例子,和你介绍了 Basic Paxos 的活锁问题,两个提案节点互不相让地提出自己的提案,抢占同一个值的修改权限,导致整个系统在持续性地“反复横跳”,从外部看就像是被锁住了。
同时,我还讲过一个观点,分布式共识的复杂性,主要来源于网络的不可靠、请求的可并发,这两大因素。活锁问题和许多 Basic Paxos 异常场景中所遭遇的麻烦,都可以看作是源于任何一个提案节点都能够完全平等地、与其他节点并发地提出提案而带来的复杂问题。
为此,Lamport 专门设计(“专门设计”的意思是,在 Paxos 的论文中 Lamport 随意提了几句可以这么做)了一种 Paxos 的改进版本“Multi Paxos”算法,希望能够找到一种两全其美的办法:既不破坏 Paxos 中“众节点平等”的原则,又能在提案节点中实现主次之分,限制每个节点都有不受控的提案权利。
这两个目标听起来似乎是矛盾的,但现实世界中的选举,就很符合这种在平等节点中挑选意见领袖的情景。

Multi Paxos

Multi Paxos 对 Basic Paxos 的核心改进是,增加了“选主”的过程:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了分布式共识算法的核心问题和解决方案,为读者提供了全面的技术视角和理解。文章介绍了分布式共识算法中的活锁问题以及Basic Paxos的异常场景,指出其复杂性主要源于网络的不可靠和请求的可并发。为了解决这些问题,Lamport提出了改进版本的Paxos算法——Multi Paxos。Multi Paxos对Basic Paxos的核心改进是增加了“选主”的过程,从而解决了平等提案节点并发带来的复杂问题。此外,文章还介绍了数据复制的过程以及如何保证过程是安全的。最后,文章提出了Raft算法,将共识问题分解为“Leader Election”、“Entity Replication”和“Safety”三个问题来思考、解决,成为了日后重要分布式程序的实现基础。另外,文章还介绍了Gossip协议,作为一种“最终一致性”的分布式共识协议,展示了其在分布式数据库和比特币网络中的应用。文章通过深入讲解分布式共识算法的核心问题和解决方案,为读者提供了全面的技术视角和理解。

该试读文章来自《周志明的软件架构课》,如需阅读全部文章,
请先领取课程
免费领取
登录 后留言

全部留言(18)

  • 最新
  • 精选
  • 刘智恒
    在Multi-Paxos数据复制阶段,如果主应答客户端后,在广播“可以提交”消息之前下线了。用户会收到一个没有被集群提交共识。这样的风险我们应该怎么解决呢?

    作者回复: 主节点是收到过半数的签收消息之后才会提交应答客户端的呀。

    2021-01-29
    5
    1
  • Jxin
    哎,每次都花好几个小时才看懂。过后又忘记了。
    2021-02-10
    8
    23
  • zhanyd
    Multi Paxos 对 Basic Paxos 的核心改进是,增加了“选主”的过程,利用Basic Paxos把分布式中最难的共识部分通过“选主”先解决了。 Basic Paxos是每次并发操作都需要达成共识,用共识算法跑一遍。 Multi Paxos是用共识算法先选个主节点出来,然后就开开心心地把并发操作变成了对主节点的单机操作。
    2021-01-29
    20
  • simple_孙
    ES应该是比较典型的raft协议应用,使用过半数选举主分片,并且只有主分片接收写请求,主副分片都支持读请求,如果发生了网络分区则会产生脑裂的现象。 Kafka是使用zookeeper的临时节点实现主broker的选举,并且读写操作都要在主分片上进行,副分片只是备份的作用,可以通过确认等级来设置是否需要同步到所有副分片才算写成功,所以如果采用较低的确认登记表,发生故障转移的时候就会有丢失消息的可能。
    2021-10-12
    1
    3
  • 唐江
    paxos对外部系统来说也不是强一致性吧,主节点先响应客户,再广播提案可以提交了,那客户端收到响应后,马上查询非主节点就有可能查到老数据呀
    2021-08-05
    1
    1
  • 花儿少年
    课后问题解答: 我们可以看下zookeeper 的官方文档,里面列举了它的应用场景: naming, configuration management, synchronization, and group services 1.命名服务:是指客户端可以获取指定资源的信息,例如RPC的服务地址列表 2.配置管理:类似Apollo的配置管理,配置下发,变更通知等等 3.同步:实现了分布式锁,master选举等功能 4.集群管理:是指对另一个集群的存活监控机制
    2021-06-16
    1
  • 沐风
    假设一个集群中有3个节点,一个更新操作成功同步给2个节点后(超过半数)返回给客户端,这时有一台节点数据是不一致的,如果同时有一个查询操作请求到了这台节点上,就查到了不一致的数据,算法上怎么保证内部是不一致但外部使用起来又是一致的?
    2021-06-01
    2
    1
  • 丁小明
    gossip协议是怎么区分消息的顺序性呢?对于同一个元数据的不同节点发起的变更消息,其他子节点要怎么区分顺序性呢
    2021-04-11
    1
    1
  • Mong狗
    才算明白,原来选主只是共识算法的中的一个应用
    2021-03-26
    1
  • 买房只买上海的
    难度一下子提升了,现在看着很吃力
    2021-02-20
    1
收起评论
显示
设置
留言
18
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部