gpt4 book ai didi

transactions - 三阶段提交协议(protocol)(3PC)如何保证原子性?

转载 作者:行者123 更新时间:2023-12-04 11:45:10 25 4
gpt4 key购买 nike

我目前正在探索 2PC 和 3PC 之类的原子提交协议(protocol)的最坏情况,并且卡在我无法找到 的点上。为什么3PC能保证原子性 .也就是说,它如何保证如果队列 A 提交,队列 B 也提交?

这是简化的 3PC from the Wikipedia article :

3PC commit protocol as depicted on English Wikipedia

现在让我们假设以下情况:

  • 两个群组参与交易(A 和 B)
  • 两者都做他们的工作,然后投票给提交
  • 协调器现在发送预提交消息...
  • A收到precommit消息,确认,然后长时间离线
  • B 没有收到预提交消息(无论原因是什么),因此仍处于“不确定”状态

  • 结果:
  • 协调器中止 事务,因为并非所有预提交消息都已成功发送和确认
  • 一个 ,处于预提交状态,仍处于脱机状态,因此超时和 提交
  • B 中止 在任何情况下:他要么保持离线并超时(导致中止),要么上线并收到来自协调器的中止命令

  • 你有它:一个队列 promise ,另一个流产。 交易搞砸了。

    那么我在这里错过了什么?据我了解,如果超时时的自动提交(处于预提交状态)被无限等待协调器命令所取代,那么这种情况应该可以正常工作。

    最佳答案

    您引用的文章似乎非常准确地涵盖了这种可能性:“这种算法的主要缺点是,如果网络以任何方式被分割,它就无法恢复。”您注意到的情况,其中“A”只是离线,转换为“网络已分段” - 即“A”现在在一个段中,而“B”和“协调器”在另一个片段。

    paper 中(在其他地方)讨论了处理这个问题的各种增强型 3PC 协议(protocol)。肯普斯特、斯特林和坦尼什。

    关于transactions - 三阶段提交协议(protocol)(3PC)如何保证原子性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2746875/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com