2015-09-14 39 views

回答

3

簡而言之,接受者必須返回v,因爲如果該值已經被提交,那麼新的提議者需要知道它是什麼。沒有全球性的「is_committed」標誌,因此提議者從至少大多數接受者那裏收集所有這些值及其相關回合。提議者然後將最高一輪的價值發送給所有接受者。

正如你所看到的,提議者總是在完成接受者的價值時,另一個提議者已經開始了。這有點類似於很多免等待算法。

+1

添加到Michael所說的關於爲什麼他們同時返回'n'和'v'的關鍵點是,在複雜的網絡中斷情況下,許多節點可能發出不同的'accept(n,v)'消息, n'和'v'。因此,新領導可能會看到多個'prepareAck(n,v)',並按'n'排序,然後選擇最高的消息,然後在它的'accept(n',v)'消息中使用該值。 Paxos的「魔力」在於新領導等待看到多數人的迴應,然後保證所有可能的領導者都會選擇相同的「v」。 – simbo1905

+0

另一個事實是,潛在的節點可能並沒有看到原來的「accept(n,v)」是選擇的值。所以你可以優化算法發送'v'的散列,如果這些值很大,如果它看到'v'你不需要通過網絡重傳它,但你必須考慮到新領導者可能永遠不會遇到該價值,因此必須將其傳遞給領導者,以便領導者可以將其廣播爲其選定的價值。 – simbo1905

相關問題