# 从Paxos到Raft
# Basic Paxos
多节点就单值达成共识的算法,是一种2PC(two-phase commit)算法。可以通过Basic Paxos实现只读的分布式存储。
# 提出疑问
- 为什么只能单值达成共识?
- 关键是依靠哪些步骤来达成共识的?有没有让你觉得惊艳的步骤?
- 集群中只有固定节点是proposer?是否存在单点?或性能瓶颈?
- 任何一个acceptor都可以做proposer。
- 提议编号(proposal number)需要保证全局唯一?如何做到?proposal number单调递增是怎么做到的?没有可能重复吗?
- 需要保证全局唯一,且单调递增。
- 算法中并没有说明实现方式,每个具体落地的算法(例如Raft)都有自己的实现方式
- 当proposal number重复时,paxos是如何解决的?
- 需要自己实现,算法中没有说明
- proposer中途失联了,要重新选一个proposer该如何实现?
- 如何解释Paxos的活锁问题?如何解决活锁问题?
- 解决活锁:proposer再去提案时,加上一个随机的等待时间,避免马上去提案。
关键点:
- 多角色
- 两阶段
- 共识约定
多角色:提议者(proposer)、接受者(acceptor)、学习者(learner)
两阶段:准备阶段(prepare)、接受阶段(accept)
共识约定: