此处的标题可能具有误导性。我会尽力通过一个例子来解释我的疑问。
我正在从 wiki 和其他来源阅读有关 paxos 算法的信息。
1)想象一个客户更新值的请求(X
在下面的例子中)被处理的情况。在一轮 Paxos 之后,Vb
会选择一个值,因为 Acceptors 对 Proposers 的回复包含他们之前接受的 Proposal 编号和相应的值。在下面的情况下,三个接受者发送(8,Va),(9,Vb),(7,Vc)
给当前拥有的提议者(10,X)
。因为它是它收到的最高(9,Vb)
提案编号,所以它会接收并将该值广播(10,Vb)
给所有接受者以供接受。X
因此,处理这一整轮 Paxos的初始值从未得到更新。那么在这种情况下更新到 X 的客户端事务是否失败?
在这之后 Acceptors 的最终状态是什么?它们是否都具有(10,Vb)
最高接受的提案编号和价值,因此是同步的?
客户 提议者 接受者 学习者 | | | | | | | --- 第一个请求 --- X-------->| | | | | | 要求 | X--------->|->|->| | | 准备(10) | |<---------X--X--X | | 承诺(10,{(8,Va),(9,Vb),(7,Vc)} | X--------->|->|->| | | 接受!(10,9,Vb) | |<-------X--X--X------>|->| 接受(10,9,Vb) |<----------------------------------X--X 响应 | | | | | | |
2)现在是一个更复杂的情况,其中提出了两个提案,但在试图达成共识时在不同的时间点。想象一下这样一种情况:区域 A 中的客户端 C1 正在修改一些数据X
并且尚未达成共识,而区域 B 中的客户端 C2 正在修改相同的数据X
。客户的其中一项请求是否被拒绝?请注意 C2 比 C1 发生得晚,但尚未达成共识。如果按照顺序,必须完成 C1 请求,接受共识,然后处理 C2 请求。根据我对这篇博客的理解,在这种情况下,选择了 C1 请求值。
那么C2请求被放弃了吗?这可能不是一个好的选择。
示例(来自此博客的版权):
在这种情况下,v=8
尽管 request forV=5
是客户端请求的最新更新,但最终选择了。为什么会这样?这可能会产生严重影响
感谢您的帮助,祝您新年快乐!