Paxos算法——科普貼(上篇,共識問題+故障是常態)

維基百科

維基百科上對Paxos算法有如下描述:

Paxos is a family of protocols for solving consensus in a network of unreliable processors (that is, processors that may fail).

翻譯成中文是:Paxos是用於解決共識問題的一系列協議,解決共識問題的環境是在一個“不可靠的處理器”網絡中,這裏不可靠是指處理器隨時可能發生故障

解決問題

一個算法的提出,必是爲了解決某個問題,從維基百科的定義,Paxos算法主要是爲了解決不可靠處理器網絡中的共識問題。在瞭解Paxos算法之前,必須先明白什麼是共識問題,爲什麼要強調是在不可靠的處理器網絡中的共識問題。

1. 共識問題

共識問題指的是,分佈式系統中的計算節點如何就計算期間所需的某些數值達成一致。

分佈式系統一般由一組獨立的計算節點(計算節點可以是我們的筆記本,也可以是專用的服務器,有計算能力就行)構成,節點之間通過傳遞消息相互通信,協調彼此的行爲。

可見,分佈式系統強調的節點之間的通信與協調。一個常見的場景:

現在的應用,往往致力於提供高可用、高性能的服務。因此會對服務器進行備份,這樣主服務器宕機,還有備份的服務器可以繼續提供服務。那麼,在主服務器提供服務的時候,比如處理客戶端某個寫請求,必然要和備份服務器進行通信,將寫請求同步到備份服務器上。主服務器和備份服務器是相互獨立的節點,但是他們需要進行通信協調,同步彼此的行爲,由此,算是一個分佈式系統。

假設主服務器處理的寫請求是將用戶個人信息中的性別改成女生,當主服務器處理這個寫請求時,可以稱之爲它在進行計算,那麼由主、備份服務器組成的分佈式系統,如何就用戶個人信息中的性別信息達成一致,就是共識問題。

cf:共識問題,一致性問題

對於分佈式系統中的共識和一致性,可以這麼理解:

一致性: 對於場景中的主備份服務器,如果它們均將用戶個人信息中的性別存儲改成了女生,很明顯,在所有服務器中,用戶性別信息完全一致

共識: 如果有一個備份服務器R和主服務器之間的網絡突然斷開了,主服務器還未將性別需要修改爲女生的信息通知備份服務器R。那麼此時,主、備份服務器組成的分佈式系統中關於用戶性別信息的存儲肯定是不一致的(至少主服務器和備份服務器R的存儲就不一致),此時雖然服務器間關於用戶性別信息的存儲不一致,但是所有服務器需要就用戶性別信息達成一致(共識),以便以後在用戶讀取性別信息時,始終返回一個一致的結果。

2.不可靠的處理器網絡

分佈式系統中所有節點(也就是處理器,對於上述場景中的服務器)始終正常工作,連接節點之間的網絡從不發生問題(如突然斷開等)

這是不可能的!!!!

幾十年分佈式系統的實踐經驗告訴我們一個血的教訓:

故障是常態!!!故障是常態!!!故障是常態!!!

也就是,分佈式系統中,節點(處理器)會故障,網絡會故障,所有的一切都會故障——“不可靠的處理器網絡”

正是由於萬物皆會故障,全都靠不住,在分佈式系統中,解決共識問題纔會如此困難,Paxos算法纔會如此重要!

舉很多個例子:

上述場景中,主服務器收到用戶提交的將性別信息寫爲女生的請求後,有三種選擇:

1.馬上回複用戶:好的!已經提交!

2. 還是等所有備份服務器都將性別信息寫爲女生後,再回複用戶:好的!已經提交!

3. 在部分備份服務器都將性別信息寫爲女生後,再回複用戶:好的!已經提交!

選1的話,回覆完用戶之後,主服務器不爭氣地宕機了。。。。。現在用戶以爲自己修改成功了,但是分佈式系統中沒有一臺服務器知道這個消息。。。。。你說用戶現在到底是不是女生?

選2的話,首先,主服務器怎麼知道所有備份服務器都將性別信息寫好了?有人說,可以讓主服務器發送消息給所有備份服務器,等到所有備份服務器都回覆成功修改性別信息後,主服務器就可以恢復用戶啦~如果這個時候,有一臺備份服務器突然宕機了。。。。。主服務器要一輩子等下去嗎。。。。。。永遠不能回覆用戶。。。。。。(注意!故障是常態啊!經常會發生的啊!

選3的話,主服務器收到部分備份服務器將性別信息寫好的回覆(這裏部分服務器是多少,暫且不討論)後,開心地回覆用戶:好的!已經提交!這裏有兩個問題:1)主服務器收到部分備份服務器的回覆後,不爭氣地掛了。。。。。這個時候,用戶沒有收到回覆,以爲沒有修改,但是分佈式系統中也有備份服務器已經修改了,你說,用戶現在到底是不是女生?2)主服務器不負衆望,成功堅持到回覆用戶之後掛了!現在有的備份服務器中,用戶性別還不是女生,有的備份服務器中,用戶性別是女生了!你說,用戶現在到底是不是女生?

目前,已有定理(FLP不可能定理,有興趣可以百度)證明出,在存在故障(即使只有一個進程故障)的異步系統中,不存在用於解決共識問題的確定性算法!

那麼,我們還在研究什麼啊!不存在啊!

大家不要慌!異步系統所限制的條件太過於嚴厲(有興趣可以百度),現實世界比異步系統要稍微好一點,我們還是有希望的!

Paxos算法在異步系統中,放寬了一點要求:少數節點故障,消息最終可以送達。然後成功地解決了共識問題!具體算法解析,快速理解Paxos算法可以期待《Paxos算法——科普貼(下篇)!

 


上篇主要對共識問題,故障是常態這一理念進行介紹。故障是常態這一理念,可能聽起來就是一句話,但是這一理念,在分佈式系統(包括Paxos算法)的設計中,必須時刻考慮!時刻銘記在心!這是很多設計決定的來源!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章