我對使用Paxos算法感到困惑。 似乎Paxos可以用於這種情況:多個服務器(一個集羣,我假設每個服務器都有3個角色,提議者,接受者,精簡者)需要保持相同的命令序列以實現一致性和備份。我假設有一些客戶端向這臺服務器發送命令(客戶端可以並行發送)。每次通過一個Paxos實例將該命令分派給多個服務器時。運行並行Paxos實例時的競爭條件
- 不同的客戶端可以發送不同的命令給不同的提議者,對嗎?
如果是這樣,來自某個客戶端的一個命令將引發一個Paxos實例。所以,
- 多個Paxos實例可能同時運行?
如果是這樣,客戶端A向提議者A發送「A + = 1」命令,並且客戶端B幾乎同時向提議者B發送「B + = 2」命令,我想看到每個服務器都收到2條命令,「A + = 1」和「B + = 2」。
然而,
鑑於5級的服務器,說S1-S5,S1發送命令 「A + = 1」 和S5發送命令 「B + = 1」,S2承諾S1然而S3,S4承諾S5,所以最終S3,S4,S5得到了「B + = 1」,但是S1,S2沒有得到,因爲承諾的數量不是多數。看起來像Paxos根本沒有幫助。我們在所有5臺服務器上都沒有得到預期的「A + = 1」和「B + = 2」?
所以我猜在Paxos的實際應用中,沒有平行的Paxos實例被允許?如果是這樣,如何避免平行Paxos實例,似乎我們仍然需要一個集中服務器來標記是否有Paxos正在運行,如果我們允許多個客戶端和多個提議者。
此外,我對提案人編號有疑問。我搜索互聯網和一些索賠以下
是一個解決方案: 5個服務器,給定相應的索引k(0-4),每個服務器使用數字5 * i + k爲這個服務器的第i個建議。
對於我來說,這似乎不符合要求的重要,因爲服務器-1的第一個提案數量始終爲1和服務器4的第一個提案數量始終是4,但服務器4可能早於提高提案server-1,但是它的提案號碼更大。
所以你的意思是在實踐中只有領導者提案者負責提出客戶的請求,從而避免多個paxos實例同時運行? – 2014-10-23 06:33:37
我仍然對提案編號感到困惑。您的提案編號解決方案看起來與我列出的提案編號解決方案類似,不同的提議者使用不同的編號空間,這只是保證後者在同一個節點中更大。但是,這還不足以保證後面的提案在不同的節點上有更大的數字,正如我在問題中所解釋的那樣。 – 2014-10-23 06:42:01
任何節點都可以通過制定一個成功的提案來促進領導者的發展,並且這需要成爲領導者;但可能很昂貴。如果所有節點在10毫秒時間內死亡的領導者都超時,那麼所有的節點都會在同一時間提出建議,這將是一場大戰,只有一個節點可以勝出。使每個節點超時在rand()* 60s,那麼你很可能不會得到領導力的鬥爭;但是在新的候選領導者提出建議之前,必須平均等待幾秒鐘。 – simbo1905 2014-10-23 21:22:22