设计一个分布式系统必定会遇到一个问题—— 因为分区容忍性(partition tolerance)的存在,就必定要求我们需要在系统可用性(availability)和数据一致性(consistency)中做出权衡 。这就是著名的 CAP 定理。它告诉我们,分布式系统中有三项关键属性,但你不可能同时满足所有三个:
CAP 定理的意思是,你必须在这三者之间做取舍。例如,分区容忍性对于分布式系统非常重要,因为网络问题在分布式环境中经常发生。如果你想要保证系统的分区容忍性和可用性,那一致性就可能受到影响,反之亦然。
举个例子,如果你在不同城市的朋友们一起玩在线游戏,游戏可能因为网络分区导致有的人操作延迟。但游戏公司通常会优先保证可用性(即游戏继续运行),而不总是优先考虑一致性(比如大家瞬间同步)。这就是 CAP 定理的应用。
在分布式系统中,多个节点需要协作完成一致的操作(例如更新数据库、选举主节点)。但由于网络延迟、节点故障等问题,如何让所有节点对某个值(例如一条操作指令)达成一致,是一个复杂的挑战,称为共识问题。 Paxos协议由Leslie Lamport于1990年提出,是首个被严格证明正确性的分布式共识算法,成为解决此类问题的经典方案。
Paxos协议中有三类角色:
关键概念:
Paxos通过两阶段协议(Prepare & Accept)确保一致性:
Proposer发送Prepare请求:
n
,向所有Acceptor发送 Prepare(n)
。Acceptor响应Promise:
n
大于已回复过的所有Prepare请求的编号,则回复 Promise(n, accepted_n, accepted_v)
,其中 accepted_n
和 accepted_v
是该Acceptor已接受的最高编号提案的值。Proposer发送Accept请求:
若收到多数派Acceptor的Promise回复:
v
(若存在),否则使用自己的提案值。Accept(n, v)
。Acceptor接受提案:
n
大于等于已承诺的Prepare编号,则接受该提案,回复 Accepted(n, v)
。Learner学习结果:
v
作为最终结果。accepted_v
)。问题:多个Proposer同时提交递增的编号,导致无限循环的Prepare阶段。
解决方案:
目标:优化Basic Paxos的单次提案开销,支持连续多次共识(如日志复制)。
核心思想:
优点:
缺点:
Paxos通过两阶段协议和多数派机制,在不可靠的分布式环境中实现一致性。尽管其理论抽象性导致实现难度较高,但其思想深刻影响了后续共识算法(如Raft),成为分布式系统领域的基石。
学习建议:结合具体实现(如ZooKeeper)理解Multi-Paxos的应用,并通过Raft算法对比掌握共识问题的核心逻辑。
本文作者:司小远
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!