0
我們使用3PC(三階段承諾)進行分佈式事務。有4個節點,A,B,C,D,其中A是協調器。3PC在這種情況下會做什麼?
- A從所有其他人收到OK並將準備提交消息發送給他們。
- 雖然C和D收到此消息並移動到準備狀態,但B發生崩潰並且未收到此消息(因此保持等待狀態)。
- B超時,併發送中止給所有其他人,但只有D收到中止消息,而C收到中止消息之前崩潰。
現在的問題是:恢復後C會做什麼?根據http://courses.cs.vt.edu/~cs5204/fall00/distributedDBMS/sreenu/3pc.html,C將在失敗轉換後承諾恢復,而不是像D那樣中止。這不會導致不一致的狀態嗎?或者C有一些機制來檢測處於中止狀態的事務?
對不起,有一個錯字。我在最後一段中將B改爲C.不知道協調器是否會在恢復後繼續檢查C並重新發送消息。 – cntswj
我明白你的觀點,我不確定如何區別對待。現在我找到一篇文章https://www.researchgate.net/publication/275154978_Three-Phase_Commit。我會從那裏引用:「注意,恢復的參與者即使參與者相對於事務處於預先提交狀態也不能提交事務,這是因爲操作 - 所有站點可能已決定在事務之後中止事務如果沒有一個參與者處於預先承諾狀態,參與者就失敗了,在這種情況下,參與者必須向其他站點詢問交易的最終狀態。「 – chalda
這一點事實是C正在恢復。 C可以通過等待指揮協調員來找到狀態。或者它可以要求其他參與者瞭解最終狀態。這取決於實施。 – chalda