Zookeeper Paxos不是以完全相同的顺序得到了相同的指令吗?

fiei3ece  于 12个月前  发布在  Apache
关注(0)|答案(2)|浏览(211)

我试图理解为什么当Paxos做同样的事情时,ZAB是必需的。我读了很多文档和文章,所有的总结都是Zookeeper要求指令的顺序完全相同。但是对于基本的Paxos,领导者不就是用精确的索引为日志投球吗?因此,即使消息被重新排序,最终消息也会进入完全相同的日志索引,并以完全相同的日志结束。因此,这是否意味着在Paxos中,所有的复制品都能以完全相同的顺序得到相同的指令吗
所以请按以下顺序回答我的问题
1.消息重新排序究竟是什么?为什么Paxos不能处理它?

  1. Paxos最初不是为了原子广播而设计的吗?原子广播的意思是达到总的顺序。但是通过将消息放在副本日志中相同的索引中,Paxos最终不就是达到了总的顺序吗?
    推荐人。
bksxznpy

bksxznpy1#

我可以帮你查https://en.wikipedia.org/wiki/Atomic_broadcast吗?
一致性和原子广播是等价的(如链接中所述),因此两者都可以使用。
Paxos协议是一个协议族,在实际应用中,需要考虑很多边缘情况,如节点的有效上线和下线、节点的替换、日志的归档等。
ZAB协议是根据设计者所需的规格支持所有这些情况的协议。
总结一下:Paxos和Zab(以及其他协议)都提供了正确性,但是这些协议在效率上有所不同。
编辑后将链接添加到问题:
从以下链接之一:
第一个月
这些重新排序和丢失是关于消息在不可靠的网络中传递的,原子广播保证了即使在不稳定的网络中,所有节点也能以相同的顺序获得所有消息。
既然原子广播和一致性是一回事,你可以使用其中任何一个来达到这个目标,所以ZAB和Paxos都可以使用。
您的问题:
消息重新排序究竟是什么?为什么Paxos不能处理它?
Paxos可以很好地处理(网络层上消息的)重新排序。
Paxos最初不是为了原子广播而设计的吗?原子广播的意思是达到总的顺序。但是通过将消息放在副本日志中相同的索引中,Paxos最终不就是达到了总的顺序吗?
Paxos是在一篇关于共识的研究论文中提出的。如果我没记错的话,最初的工作能够运行一次共识轮,就一个值达成一致。Paxos扩展能够处理值流,这使得它看起来像原子广播(这是因为共识和原子广播是同一件事)。
如果有人想用Paxos替换ZAB,他们完全可以。可能会损失一些效率,但正确性仍然存在。这里是更多信息:https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos

mepcadol

mepcadol2#

消息重新排序究竟是什么?为什么Paxos不能处理它?
paxos的正确操作取决于一些关于消息排序的假设:
1.阶段排序:Paxos在多个阶段(如准备和接受阶段)中运行。该协议假设特定阶段中的消息以正确的顺序处理。例如,接受者必须在处理接受的请求之前接收并响应准备好的请求。
1.建议订购:Paxos确保提案按照一定的顺序处理,由单调递增的提案编号决定。接受者必须根据他们看到的编号最高的提案来响应提案。
当消息被显著地重新排序时,这些假设可能被违反。
举例来说:
如果“accept”消息在相应的“prepare”消息之前到达,则接受者可能在没有适当上下文的情况下接受建议,从而导致不一致。重新排序可能导致较旧的建议在较新的建议之后处理,这可能会混淆协议状态,并可能导致错误的决策或死锁。但是,Paxos可以处理一定程度的消息重新排序,这一点很重要。该协议的设计使用了提案编号,并要求接受者跟踪他们看到的编号最高的提案,Paxos可能会遇到的是消息重排序的极端或病态情况,其中严重违反了关于阶段和建议顺序的假设。GPT Paxos中消息重排序的极端情况可能会带来挑战,这是来自不同回合协议的消息严重延迟或顺序不一致的情况,从而导致混乱和潜在的错误决策。
让我们考虑一个有两个提议者(P1和P2)和一组接受者(A1,A2,A3,...)的例子,说明严重的消息重新排序会如何破坏共识过程。
示例场景:

第1轮-P1提案人:

P1向所有接受者发送一个建议号为1的准备请求。由于网络延迟,这些消息会有很大的延迟。

第二轮-提议人P2:

当P1的消息被延迟时,P2发送一个建议号为2的准备请求。接受者A1和A2首先接收P2的请求,并响应P2,确认建议号为2。

第1轮延迟消息到达:

现在,来自P1的延迟的准备请求(建议号1)终于到达了接受者。假设A3在看到来自P2的任何消息之前收到了P1的准备请求。A3响应P1,确认建议号1。

P1发送接受请求:

P1收到了来自A3的响应(如果其他人对P2的响应也被延迟了,也可能收到其他人的响应),发送了值为1的接受请求。

接受者混淆:

接受者现在正在接收来自P1的对较旧的建议编号(1)的接受请求,而他们已经确认了来自P2的较高的建议编号(2)。根据消息到达的确切时间和顺序,某些接受者可能会错误地接受P1的建议,或者可能会出现拆分,其中某些接受者与P1对齐,而其他接受者与P2对齐。

潜在不一致:

这种情况可能会导致混乱和不一致。如果一些接受者已经承诺不接受低于2的提议(来自P2的回合),但随后接收并执行P1的延迟接受消息,则违反了协议的不变量。不同的接受者可能最终处于不同的状态,并且如果仲裁以某种方式接受P1的值,则可能与P2试图提出的内容冲突。
Paxos最初不是为了原子广播而设计的吗?原子广播的意思是达到总的顺序。但是通过将消息放在副本日志中相同的索引中,Paxos最终不就是达到了总的顺序吗?
Zab使用epoch编号和transaction ID的组合来对消息进行排序。每次leader选举都会产生一个新的epoch,并且leader在epoch内提出的每个transaction都有一个唯一的ID。这种组合有助于确保消息按照预期的顺序进行处理,即使它们没有按顺序到达。
操作阶段:Zab分为三个阶段-发现,同步和广播:
发现:确定最近的epoch和最后提交的事务。此阶段有助于从leader更改中恢复,并确保所有节点从一致的状态开始。同步:新的leader建议一组初始事务以同步所有follower的状态。这有助于在广播新事务之前调整整个集群的状态。广播:leader向followers发送新的事务,事务按顺序发送,每个事务包含一个单调递增的ID。
使用具有两个提议者(P1和P2)和一组接受者(A1,A2,A3)的相同设置:

**Epoch 1 - Leader P1:**P1是Leader,提出了一组事务,由于网络延迟,这些事务被显著延迟。
**领导者失败和新纪元:**P1被视为失败。P2被选为新领导者,开始纪元2。在发现阶段,P2标识在纪元1中提交的最高事务ID。在同步期间,P2确保所有跟随者具有来自纪元1的所有已提交事务。
**Epoch 2 - Leader P2:**P2现在开始广播Epoch 2中的新事务。这些事务包括唯一ID,该ID遵循Epoch 1中的ID。
**Epoch 1的延迟事务:**如果P1(Epoch 1)的延迟事务现在到达,则它们要么已经提交并存在于关注者的日志中(因此被忽略),要么未提交并被Epoch 2中的P2事务取代。关注者根据epoch和事务ID的顺序应用事务,以确保一致性。
**一致状态:**由于epoch和同步阶段的明确分离,所有follower都保持一致状态。来自前一个leader(P1)的事务延迟到达不会破坏新leader(P2)下的当前状态。Zab中的事务按照严格的顺序应用,由其epoch和事务ID确定。

相关问题