2010-04-30 76 views
7

我目前正在探索像2PC和3PC這樣的原子提交協議的最壞情況,並且我堅持在我無法找到的地方爲什麼3PC可以保證原子性。也就是說,它如何保證如果隊列A承諾,隊列B也承諾?三階段提交協議(3PC)如何保證原子性?

這裏的簡化3PC from the Wikipedia article

3PC commit protocol as depicted on English Wikipedia

現在讓我們假設下面的情況:

  1. 兩個同夥參與交易(A和B)
  2. 無論做他們的工作,然後投票提交
  3. 協調員現在發送預提交消息...
    • A接收預提交消息時,確認,然後很長時間
    • B不接收該消息預提交(無論是什麼原因可能是)進入脫機狀態,因此,仍然處於「不確定」狀態

結果:

  • 協調員中止的事務,因爲不是所有的預先承諾的消息是發送成功
  • 一個,是誰在預提交國家承認的,是仍處於脫機狀態,因此超時和承諾
  • 乙中止在任何情況下:他要麼保持脫機狀態和超時(原因中止)或聯機並從協調器收到中止命令

而你有它:一個隊列犯,另一箇中止。 交易已完成。

那麼我在這裏錯過了什麼?在我的理解中,如果超時自動提交(在預提交狀態)被無限等待協調器命令取代,那麼這種情況應該可以正常工作。

回答

8

您引用的文章似乎很準確地涵蓋了這種可能性:「這種算法的主要缺點是它無法在網絡以任何方式分割的情況下恢復。」您注意到的情況下,「A」只是離線,意味着「網絡已被分段」 - 即「A」現在在一個段中,而「B」和「協調器」在另一段。

在Kempster,Stirling和Thannish的paper中討論了各種增強的3PC協議來處理這個問題(以及其他地方)。

+0

好的,這證實了我的論點。我將閱讀這些基於法定人數的協議。謝謝 – AndiDog 2010-05-01 07:17:18