2
我正在學習MIT 6.824課,我有一個關於paxos的問題。當提議者發送準備給接受者時,接受者將返回一個prepare_ok,其中n和v是最高接受者所看到的。我想知道爲什麼acceptor需要返回n和v?爲什麼paxos接受者必須發回他們已經接受的任何值
我正在學習MIT 6.824課,我有一個關於paxos的問題。當提議者發送準備給接受者時,接受者將返回一個prepare_ok,其中n和v是最高接受者所看到的。我想知道爲什麼acceptor需要返回n和v?爲什麼paxos接受者必須發回他們已經接受的任何值
簡而言之,接受者必須返回v,因爲如果該值已經被提交,那麼新的提議者需要知道它是什麼。沒有全球性的「is_committed」標誌,因此提議者從至少大多數接受者那裏收集所有這些值及其相關回合。提議者然後將最高一輪的價值發送給所有接受者。
正如你所看到的,提議者總是在完成接受者的價值時,另一個提議者已經開始了。這有點類似於很多免等待算法。
添加到Michael所說的關於爲什麼他們同時返回'n'和'v'的關鍵點是,在複雜的網絡中斷情況下,許多節點可能發出不同的'accept(n,v)'消息, n'和'v'。因此,新領導可能會看到多個'prepareAck(n,v)',並按'n'排序,然後選擇最高的消息,然後在它的'accept(n',v)'消息中使用該值。 Paxos的「魔力」在於新領導等待看到多數人的迴應,然後保證所有可能的領導者都會選擇相同的「v」。 – simbo1905
另一個事實是,潛在的節點可能並沒有看到原來的「accept(n,v)」是選擇的值。所以你可以優化算法發送'v'的散列,如果這些值很大,如果它看到'v'你不需要通過網絡重傳它,但你必須考慮到新領導者可能永遠不會遇到該價值,因此必須將其傳遞給領導者,以便領導者可以將其廣播爲其選定的價值。 – simbo1905