什麼是paxos演算法?
paxos演算法是分布式計算領域中乙個非常重要的演算法,主要解決分布式系統如何就某個值(決議)達成一致的問題。乙個典型的場景是分布式資料庫的一致問題:如果分布式資料庫的各個節點初始狀態一致,又能執行相同的操作序列,那麼最後能達到乙個一致的狀態。但是如何保證在每個節點上執行相同的命令序列呢?這就需要在每條指令上執行乙個「一致性演算法」以保證每個節點看到的指令一致。paxos演算法便是這樣一種一致性演算法,它由大牛lamport於2023年提出,在lamport的**中,他虛擬了乙個叫「paxos」的城邦並以講故事的方式闡述演算法,因此叫做paxos演算法。
1.應用場景
(1)分布式中的一致性
paxos演算法主要是解決一致性問題,關於「一致性」,在不同的場景有不同的解釋:
nosql領域:一致性更強調「能讀到新寫入的」,就是讀寫一致性
資料庫領域:一致性強調「所有的資料狀態一致」,經過乙個事務後,如果事務成功,所有的表資料都按照事務中的sql進行了操作,該修改的修改,該增加的增加,該刪除的刪除,不能該修改的修改了,該刪除的沒刪掉;如果事務失敗,所有的資料還是在初始狀態;
狀態機:在狀態機中的一致性更強調在每個初始狀態一致的狀態機上執行一串命令後狀態都必須相互一致,也就是順序一致性。paxos演算法中的一致性指的就是這種情況,接下來我們會對這種場景進一步討論。
(2)mq
假如所有系統的log資訊都寫入乙個mq server,然後通過mq把每條log指令發非同步送到多個log server寫入檔案(寫入多個log server的原因是對log檔案做備份以防資料丟失),則所有log server上的資料肯定是一致的(log內容及順序完全相同),因為mq本身就有排序功能,只要進了q資料也就有了序,相當於編了全域性唯一的號,無論把這些資料寫入多少個檔案,只要按編號,各檔案的內容必定是一致的,但乙個mq server顯然是乙個單點,如果宕機,會影響整個系統的可用性。
(3)多mq
要解決mq單點問題,首選方案是採用多個mq server,即使用乙個mq cluster,客戶端可以訪問任意mq server,不同的客戶端可能訪問不同mq server,不同mq server上的資料內容、順序可能不一致,如果不解決這個問題,每個mq server寫入log server的內容就不一致,這顯然不是我們期望的結果。
(4)nosql中的資料更新
一般的nosql都會通過資料複製的形式保證其可用性,但客戶端對多資料進行操作時,可能會有很多對同一資料的操作傳送的某一台或幾台server,有可能執行:insert、update a、update b....update n,就一次insert連續多次update,最終複製server上也必須執行這一的更新操作,如果因為執行緒池、網路、server資源等原因導致各複製server接收到的更新順序不一致,這樣的複製資料就失去了意義,如果在金融領域甚至會造成嚴重的後果。
上面這些不一致問題性正是paxos演算法要解決的,當然這些問題也不是只有paxos能解決,在沒有paxos之前這些問題也得到了解決,比如通過使用雙master模式的mq解決mq單點問題;通過使用master server解決nosql的複製問題,但這些解決方法都存在一些缺陷,要麼難水平擴充套件,要麼影響可用性。當然除了paxos演算法還有其他一些演算法也試**決這類問題,比如:viewstamped replication演算法。
2.paxos如何解決這類問題
paxos對這類問題的解決就是試圖對各server上的狀態進行全域性編號,如果能編號成功,那麼所有操作都按照編號順序執行,一致性就不言而喻。當cluster中的server都接收了一些資料,如何進行編號?就是表決,讓所有的server進行表決,看哪個server上的哪個資料應該排第一,哪個排第二...,只要多數server同意某個資料該排第幾,那就排第幾。
很顯然,為了給每個資料唯一編號,每次表決只能產生乙個資料,否則表決就沒有任何意義。paxos的演算法的所有精力都放在如何在一次表決只產生乙個資料。再進一步,我們稱表決的數
全可以得出最終結果。
分布式選舉演算法
主節點,在乙個分布式集群中負責對其他節點的協調和管理,也就是說,其他節點都必須聽從主節點的安排。主節點的存在,就可以保證其他節點的有序執行,以及資料庫集群中的寫入資料在每個節點上的一致性。這裡的一致性是指,資料在每個集群節點中都是一樣的,不存在不同的情況。下面介紹集中選舉演算法。bully 演算法在...
分布式系統 Paxos演算法
paxos演算法解決的問題正是分布式一致性問題,即乙個分布式系統中的各個程序如何就某個值 決議 達成一致。paxos演算法執行在允許宕機故障的非同步系統中,不要求可靠的訊息傳遞,可容忍訊息丟失 延遲 亂序以及重複。它利用大多數 majority 機制保證了2f 1的容錯能力,即2f 1個節點的系統最...
分布式系統選舉演算法剖析
我們在了解分布式選舉演算法之前,我們需要這樣一種演算法產生的背景。在乙個分布式系統中,因為各種意外的因素,有的伺服器可能會崩潰或變得不可靠,它就不能和其他伺服器達成一致狀態。因而這樣就需要一種consensus協議,來確保伺服器的容錯性,也就是說即使系統中有一兩個伺服器節點crash,也不會影響其處...