date
Oct 12, 2024
icon
password
Pin
Pin
Hide-in-Web
Hide-in-Web
网址
type
Page
slug
btc-paxos
tags
知识点
category
bottom
bottom
Hide-in-Config
Hide-in-Config
comment
Show
status
Published
summary
Paxos 是一种用于在分布式系统中实现一致性的算法。它的主要目标是在多个节点(计算机)之间达成一致,即使其中一些节点可能会出现故障或不响应。Paxos 算法的主要组成部分包括提议者(Proposer)、接受者(Acceptor)和学习者(Learner),这些角色在算法的不同阶段中各自发挥作用。
首先以一个简单的情形入门:
想象一下,你和你的朋友们正在决定一个班级活动,比如要去哪个地方玩。你们需要一起达成一致,选出一个大家都喜欢的地方。我们可以用 Paxos 的方法来帮助你理解这个过程。
1. 提议者(你):
假如你是提议者,想要提出一个活动地点,比如“去公园”,在你提出该活动地点以前,如果有其他的人提出了比如“去海滩”、“去澡堂”这样的提议,那么他们的提议与你的相比是编号小的。
2. 接受者(你的朋友们):
你的朋友们是接受者,他们的任务是决定是否同意你的提议。
3. 学习者(其他同学):
其他同学是学习者,他们会知道你们的决定。
4. 选择活动的过程:
- 首先:你告诉朋友们:“我提议我们去公园玩。”(提议阶段)
- 接着:你的朋友们会说:“我们同意,但我们之前也考虑过去海滩。”(准备阶段)
- 然后:如果大多数朋友(比如 3 个或更多)同意去公园,而不是海滩,他们就会说:“好,我们一起去公园。”(接受阶段)
- 最后:所有人都听到了这个决定,大家知道了活动地点是“公园”。(学习阶段)
Paxos 的基本流程:
- 提议阶段:
- 提议者向接受者发送提议编号和提议值。
- 接受者根据提议编号来决定是否接受提议。只有当提议编号比之前收到的提议编号更高时,接受者才会接受该提议。
什么叫做提议编号比之前收到的提议编号更高呢?
比如班级里有几个人提议去不同的地方玩,编号越大的提议表示是越新的提议。每个人(接受者)只能接受编号更大的提议或者保持原有的提议不变。比如,如果你已经答应了编号为 5 的提议,然后有人拿着编号为 3 的提议来找你,你就不会再同意这个编号 3 的提议,除非新的提议编号比 5 更大。
- 准备阶段:
- 提议者选择一个提议编号,并向大多数接受者发送“准备”请求,询问他们是否接受这个提议。
- 接受者会回复它们已接受的最高提议值(如果有的话)和它们的编号。
- 接受阶段:
- 一旦提议者收到了足够多的“准备”响应(通常是大多数),它会将提议值发送给大多数接受者请求他们接受该值。
- 如果大多数接受者接受了该值,整个系统就达成了一致,提议者和学习者会得到这个值。
Paxos 的特点:
- 容错性:即使部分节点崩溃或失去响应,Paxos 仍能工作。
- 一致性:保证所有接受者在最终的一致值上达成共识。
- 灵活性:Paxos 适用于多种分布式系统,确保系统在有节点失效的情况下仍能正常运行。