【问题标题】:Paxos questions: if proposer down, what happened?Paxos 问题:如果提议者失败,会发生什么?
【发布时间】:2016-01-07 02:54:51
【问题描述】:

我正在经历基本 Paxos 算法可以与最终结果达成一致的各种场景。有一种情况我无法解释结果。

有两个提议的 P1 P2,三个受体 A1 A2 A3。 P1 会提出价值 u,P2 会提出价值 v。

1. P1(send id n) 完成prepare步骤,从A1 A2 A3接收所有promise,然后在A1 A2 A3中全部存储n为id。

2. P2(send id n+1) then A1 A2 A3 store n+1 as id

3. P2 下降。

4. P1 向 A1 A2 A3 发送带有 (n, u) 的接受请求,当然 A1 A2 A3 会拒绝该请求,不幸的是同时 P2 已经宕机了。

这样的提议者失败案例,我们下一步该怎么做?又一轮新的 Paxos?

【问题讨论】:

  • 你能在这里提供一些上下文吗?如果 quorum(A1,A2,A3) 已经接受了 P2 提出的值,为什么还需要 P2 在线?
  • A1, A2, A3 只需在准备阶段向 P2 回复 OK 并将 id 存储在本地存储中。在 P2 发送值为 v 的接受请求之前,P2 已关闭。这意味着该值尚未由 (A1, A2, A3) 决定,因为未到达 v。但是 P1(id is n) 发送任何接受请求都会被 A1,A2,A3 丢弃,因为它的 id 小于 P2 的 id (n+1)。

标签: distributed-transactions distributed-system


【解决方案1】:

做一个新的paxos轮,这正是它的目的。

提议者在 Prepare 消息中发送他们的值,因此接受者将在下一轮 paxos 中将 P2 的值发送给 P1。

【讨论】:

  • 嘿,Micheal,正如你所说的“做一个新的 Paxos 回合”,如果没有得到一致的结果,是否意味着一个 Paxos 回合结束了?
  • @TongxuanLiu 提议者在收到来自简单多数的接受者的接受确认时可以退出。在此之前,它不知道一个值是否被提交。
【解决方案2】:

几年前我学习这个时,我复习了我所有的课堂笔记和材料。对于 Paxos 的正确实现,它必须是容错的,并且在提议者和接受者双方都永远不会终止。由于问题是关于提议者的容错性,因此我将重点关注它们:

这个问题的一个解决方案(但不是唯一的一个)是复制提议者,每个提议者类型有几个实例,其中一个是开始时选择的领导者/主人,并且是发送者提案。如果 master 失败,另一个可能会在新的选举中被决定,或者使用在初始化时建立的优先级,作为新的 master 并取代它的位置。

在这种情况下,您可以有 3 个 P2 实例:P2-1、P2-2、P2-3,默认情况下 P2-1 是领导者,如果 P2-1 失败,则 P2-2 可以升级。

必须记住,acceptors 可以请求 P2 的确认,而 P2-2 仍处于升级为新领导者的过程中,因此在超时后设置重试可能是一个好主意,给P2-2 有足够的时间做好准备。

【讨论】:

  • 这是一种解决问题的方法。为了保持系统的活跃性,副本和超时始终是方法。
【解决方案3】:

“Paxos 变得简单”Lamport

"很容易构建一个场景,其中两个提议者每个人都不断发布一系列提案,数量不断增加,但没有一个被选中。提议者 p 完成第 1 阶段的提议编号 n1。然后另一个提议者 q完成第 1 阶段的提案编号 n2 > n1。提案者 p 对编号为 n1 的提案的第 2 阶段接受请求被忽略,因为接受者都承诺不接受任何编号小于 n2 的新提案。因此,提案者 p 然后开始并完成阶段1 用于新的提案编号 n3 > n2,导致第二阶段 2 接受提案者 q 的请求被忽略。以此类推。"

从描述第 4 步: (A1,A2,A3) 会回复 P1 的接受请求,将 id+1 发送给 P1,然后通知 P1 并增加 id -> id+2。 P1 发送到 (A1,A2,A3) 再次使用 id+2 准备请求。为了避免 P1 和 P2 之间的活锁,更好的方法应该是只有一个提议者(参考“Paxos Made Simple”的 2.4 章节)。

【讨论】:

  • 是一个很好的观点,尽管在第一个问题上没有表达这种担忧,我会将其添加到原始问题中,以使将来可能阅读它的人更加丰富。
  • 当然,根据simbo1905.wordpress.com/2016/01/02/…,paxos 议会协议有一个领导者,但你需要逻辑来确保当它崩溃时,它只会被一个新的提议者安全地取代。这可以通过指数退避来完成,这样每个未能赢得一轮的节点在重新尝试成为领导者之前等待更长的时间,如simbo1905.wordpress.com/2014/10/28/… 所述
猜你喜欢
  • 2018-10-07
  • 1970-01-01
  • 1970-01-01
  • 2019-03-16
  • 1970-01-01
  • 1970-01-01
  • 2020-09-18
  • 2016-01-23
  • 1970-01-01
相关资源
最近更新 更多