在paxos算法的第二階段,如果接受者之前已經選擇了一個值,則提議者發出一個接受請求,其號碼爲n
,值爲v
,它來自接受者。我的問題是提案人爲什麼這樣做?因爲一旦選擇了一個值,它就是永久的並且不能改變,所以在這種情況下,提議者只是學習了在準備請求的響應中發送的選擇值。爲什麼它會要求接受已經接受的價值?爲什麼提議者發送的接受請求具有與接受者相同的值?
回答
所選擇的值必須與最後一位領導者提出的值一致,否則所選擇的值可能會丟失。一種有益的思考方式是新提案人選擇與舊提案人合作。如果它不合作,那麼就會出現矛盾,我們可能會在分佈式系統中出現不一致。
實施例:
考慮節點A,B和C作用多的Paxos的所有角色。節點A是領導者並提出V1。想象一下,網絡發生故障,只有節點A和節點B能夠通信,節點A只有最少數量的消息可以通知節點A選擇了V1。
當節點A從節點B聽到它知道V1被選擇,因爲它有大多數(節點A和B)。它將消息發送給節點B和C,以說明該值的選擇,但是如本例中所述,節點A沒有進一步的消息通過。節點A執行業務操作,例如從數量爲V1的銀行賬戶中支付資金。節點A然後崩潰。
節點C現在成爲領導者,並不知道正確的銀行賬戶餘額,也沒有任何關於甚至建議付款的事實。節點B知道在V1中建議付款,但不知道它是否被選中,因爲它從未聽過節點A的結果。因此,節點B也不知道正確的銀行賬戶餘額。
您描述的機制恰恰是節點C在選擇值V1時與節點A進行協作的方式。如果沒有進一步的信息丟失,B和C將進入一致的狀態,即他們同意從銀行賬戶中支付的金額。
很明顯,如果節點C不是通過節點B發現值V1並提出一些新值,那麼我們就會有矛盾。銀行賬戶將被破壞爲付款V1不會在帳戶上的每個節點B和C.
的平衡反映討論
有一個關於你所要求的機制的詳細討論關於我的博客文章,其中描述了the leader takeover phase。
在上面描述的事件中,事件中假定有一些標準的實現細節。例如,有人可能會說:「不要在沒有更多消息的情況下從銀行賬戶轉移資金,以確認所有節點都知道該值已被選中」。然而,Paxos被證明只需要最少數量的消息是安全的,崩潰應該是罕見的。這意味着在實施Paxos時,在正常運行期間使用最少數量的消息通常是最佳的,並且在故障情況下依賴算法在整個系統中恢復一致的狀態。
有趣的是,可以選擇一個值,但沒有活節點知道它。在上面的例子中,節點A運行時間足夠長,以查看來自節點B的消息並在銀行賬戶之間轉移資金。然而,它可能在從節點A聽到之前崩潰。除節點B外,它將接受V1,但節點不知道該值已被選擇,直到節點C發現V1並選擇它爲止。
有趣的是,系統的客戶,觀察銀行賬戶的那些東西,或從銀行賬戶接收支付的其他系統也是分佈式系統的一部分。如果在這個例子中沒有從銀行賬戶支付款項,那麼放棄V1並不是問題。然而,選擇價值觀的副作用是相當正常的。觀察系統的第三方系統或用戶Web瀏覽器實際上是分佈式系統的一部分。
- 1. 爲什麼paxos接受者必須發回他們已經接受的任何值
- 2. 接受跟隨者請求與安全的Twitter帳戶的問題 - Twitter4j
- 3. 爲什麼AJAX有時會發送兩個相同的請求
- 4. Webpack不接受POST請求
- 5. 如何顯示上次發送/已接受測驗的參與者人數?
- 6. 爲什麼protobuf的要求兩者/可選字段接受「默認」值,我希望只有「可選」應該
- 7. 爲什麼python描述符__get__方法接受所有者類作爲arg?
- 8. 202接受的相反是什麼?
- 9. 從一個發送者/接收者併發地接收/發送
- 10. 未接受連接會發生什麼?
- 11. 爲什麼IIS在RoleEntryPoint.OnStart返回之前接受請求?
- 12. 什麼是連接發送者和接收者的好設計模式?
- 13. stringName.next()接受用戶的輸入,但stringName.nextLine()不接受。有什麼不同? (Java)
- 14. AWS:接受VPC對等連接請求
- 15. CoreBluetooth - 請求不受支持。爲什麼?
- 16. Microsoft Visual Studio SDK DSL工具 - 任何嚴肅的接受者?
- 17. 什麼是每頁可接受的網站請求時長?
- 18. strtod接受「e」但也接受「d」 - 爲什麼?
- 19. 對特定bean的Incept接受請求
- 20. 接受POST請求的Node.js服務器
- 21. http請求的可接受率
- 22. 廣播發送者和接收者對
- 23. 爲什麼不接受我的代碼?
- 24. 如何使用Outlook VBA發送會議請求,該會議將接受前X個與會者並拒絕其他人?
- 25. Windows Phone不接受DCHP提議
- 26. 接受Object []的Web Service。它接受什麼JSON?
- 27. 接受與ACE_SOCK_Acceptor的連接
- 28. 不具有相同值的Sql請求
- 29. 如何接受Spring請求的GET請求中的LocalDateTime參數?
- 30. Outlook會議請求自動接受並刪除