2021-03-25
Paxos協議:
戰國中期,秦國商鞅變法後迅速崛起對外擴張,在函谷關外拉開大軍,準備全面入侵山東國家,山東諸國惶惶不可終日,
此時公孫衍犀首遊說列國,並先後出任魏國韓國趙國等多個國相,提議欲抵抗秦國必須結成同盟,合縱方可破秦。
最終有三個國家魏國,楚國,韓國集兵於函谷關外,各佔一個山頭準備攻打秦國。
但是任意一個國家和秦國對抗必敗,必須在三個國家中至少有兩個國家達成一致,同時進攻。
每個國家都有主帥(魏王,楚王,韓王) 三人 , 參謀(魏相犀首,春申君黃歇) 兩人, 參謀給出的進攻時間必須得到魏楚韓中任意兩個國家的同意,才可決議,
但是派出信使有可能被秦國密探捕獲,而導致資訊丟失。
所以達成一致的進攻時間是個難題。那麼這裡考慮採用Paxos協議來決議。
參謀犀首派出信使送信給魏楚韓(提案號為1), 魏王楚王收到資訊,由於信使被捕,韓王未收到資訊;
魏王 : 提案號 1,提案值 0。
楚王 : 提案號 1,提案值 0
韓王 : 提案號 0,提案值 0
魏王楚王收到訊息後,派信使告訴犀首已經收到資訊,等待具體指示;
犀首 : 有兩個 收到提案號資訊 過半
參謀黃歇也派出信使給送信給魏楚韓(提案號2) 這次魏王未收到,楚王、韓王收到資訊;
魏王 : 提案號 1,提案值 0。
楚王 : 提案號 2,提案值 0。
韓王 : 提案號 2,提案值 0。
黃歇 : 有兩個 收到提案號資訊 過半
準備階段完成後進入接受階段
參謀犀首收到訊息後,派信使告訴魏楚王具體攻打日期是1號; (提案值1)
魏王收到後覺得可以,告訴犀首1號進攻可以; 魏王 :提案號 1,提案值 1
楚王收到後,因他儲存的提案號 是2 , 而犀首的提案號 1小於2,所以告訴犀首,提案號 1 不可行,正在等待 提案號 2號方案;
參謀黃歇首收到訊息後派出信使告訴楚王韓王進攻時間為下個月2號;(提案值2)
楚王收到後和自己的提案號對比,發現一致是2,則告訴參謀黃歇方案可行攻時間為下個月2號 楚王: 提案號 2,提案值 2
韓王收到後和自己的提案號對比,發現一致是2,則告訴參謀黃歇方案可行攻時間為下個月2號 韓王: 提案號 2,提案值 2
黃歇首 收到 (提案號 2,提案值 2 成立)
參謀犀首得到的提案不是一半以上(魏王認可、楚王不認可,韓王未知),因此只有再次派出信使,通知最新的提案號為3。這裡就進入了新一輪的準備階段。
新一輪的準備階段
魏王收到資訊後,告訴參謀犀首,我上次收到你的提案號 1,更改成 提案號 3 ,等待最新指示; (魏王: 提案號 3, 但沒值 )
楚王收到資訊後,告訴參謀犀首,我已經收到了提案號 3,我之前的議案值為2號 (楚王 : 提案號 3, 提案值 2)
進入新一輪的接受階段
參謀犀首收到資訊後,通過楚王的通知已經最新提案號 3,其對應的提案值 2 (提案號 3, 提案值 2)
所以這次派出信使發出資訊“議案號為3,議案值為進攻日期2號”;
魏王收到後,按最新的指示執行,並回復參謀犀首;(魏王: 提案號 3, 提案值 2)
楚王收到後,同自己儲存的議案號對比,發現收到的議案號和儲存的一致,則接受指示,並回復參謀犀首;(楚王 : 提案號 3, 提案值 2)
所以最後 提案值 2 成立