1. 程式人生 > >分散式系統閱讀筆記(十八)-----副本備份技術

分散式系統閱讀筆記(十八)-----副本備份技術

介紹

在分散式系統中,副本和備份是一個用來提供高可用性和一定的容錯能力的手段和措施。HA(高可用性)在當前越來越成為一個趨勢在一些移動計算的領域和一些失去連線的狀態場景之下。在這篇筆記中,我會介紹一些副本備份的相關技術點,比如基於隸屬度管理的組通訊,還有被動和主動備份技術,以及最後的副本分割槽的一些情況。

1、副本在分散式系統中被用的非常的廣泛,比如說被用於資源的快取的訪問,放置在代理伺服器上或者說存在於客戶端的本地機子上,對於源資源的一個拷貝。

2、副本的技術的出現加強了服務的效能,首先可以避免了請求服務的延遲,當遠端訪問源伺服器資源的時候,第2點,提高了高可用性,當伺服器宕機的時候,至少還有他的副本資源的存在,以至於在客戶端失去連線的時候還能正常使用,這其實也是容錯能力的一個表現。這裡用一個數字來體現這一點,如果說伺服器有2個副本,每個伺服器宕機的概率為5%,只有當2個伺服器都不可用的時候才會造成系統真正的不可用,概率p=1-0.05*0.05=0.9975,也就是說是99.75%,這已經是很一個高度可用的比例值了。

3、但是這裡就會有一個比較重要的問題,已經有這麼多的副本備份了,如何維護他們的一致性問題,資料不一致了,後果可很嚴重哦,比如說一些資金,銀行等方面的,顯然是不容有失的。

系統模型和組通訊

各個副本其實是一個物理物件,存放在各個單一的機子上的。這裡提供了一種組通訊的機制用來協調他們之間的一致性。

系統模型

為了使得問題變得一般化,我們構造了一個基本的結構模型用來管理副本資料。在這個結構中,我們用到了一個主要的角色RM(Replication Manager)副本管理器,在這裡,你可以把副本管理器就理解為一個Server服務端。所以這個結構就變成了常見的C-S的模型了。在這裡每個副本管理器包含了每個物件的一個副本。

1、當客戶端發出一個請求操作的時候,他並不是直接馬上的發給RM,而是先到一個專門處理請求的元件,叫做front end,front end的作用才是通過訊息傳遞與RM副本管理器通訊的一個角色。

2、然後執行後面的5個階段的過程:(1)、Requesting請求。(2)、Coordination協調。(3)、Execution執行階段。(4)、Agreement一致性階段。(5)、Response回覆階段。

3、在之前的章節中,我們提到過組通訊中用到的covering algorithm覆蓋演算法,當在副本技術中,這裡要求一個更高要求的動態隸屬度方法,意味著在程序進入或者離開系統的時候,組的隸屬度會發生改變。因此就衍生出了一個額外的服務叫做membership service服務。

容錯服務

容錯服務與上面提到的高可用的區別在於對於資料的正確性上的處理上,也就是說,當伺服器掛了的時候,此時如果你的副本資料已經正確更新了,當然沒問題,但是如果此時的你的副本上的資料還是舊的話,顯然還達不到系統的要求,所以這裡說的容錯服務是對於資料一致性的要求。

1、在資料一致性的分類中,這裡分為了2類:Linearizability consistency和sequential consistency。

Passive replication

Passive replication的意思是被動副本的意思,一句話說,就是當最初的RM副本管理器掛掉的時候,在這些備份的副本中會選出一個作為新的主要的備份管理器,將會重新恢復剛剛操作失敗時的狀態。被動副本技術的缺點在於比較高的溝通成本,在這裡的過程會發生數次的來回的訊息通訊,無疑也會造成一定的延遲。而且當主副本上更新了資料的時候,必須one-to-one的方式更新備份副本上的資料,效率還是比較低下的。

Active replication

與上面的方式相對的是Active replication,積極的備份技術,如果在此模式下,如果伺服器的RM掛了,將不會對系統的效能有任何的影響,剩下的副本管理器還是會繼續的響應回覆。所以積極的副本技術的原理就是他會向所有的副本管理器發出請求,然後請求會在所有的RM上跑一遍,然後客戶端獲取到所有的回覆,最後第一個回覆的結果將會被採納。所以在積極副本技術中,其中的全域性有序性就顯得比較重要了。

HA服務例子:gossip結構,Bayou,Coda

在下面,將會列舉出幾個應用了副本技術使得服務變得高可用性的例子。

Gossip結構

1、gossip結構實現高可用的措施是通過副本管理器之間進行週期性的交換gossip message,為了是副本之間能及時獲取到來自客戶端的更新操作以此保持一致性。gossip服務提供2種類型的操作,query操作和update更新操作。

2、為了保持程序操作的有序性,每個請求採用了類似於一個vector timestamp時間戳向量的概念。當每次操作結束,就會更新新的時間戳向量的新的值。

3、每個gossip資訊包含了2個項,一個是副本管理器RM的log,和副本的timestamp,日誌是用來合併用的。

4、gossip結構並沒有規定什麼時候或者說在哪裡進行副本管理器之間的資訊交換,這裡推薦了一種update-propagation更新傳播的策略。

Bayou

Bayou系統是一個提供資料副本的高可用性但是在一致性的方面略微差一點的系統。他的副本形式是以資料庫的形式儲存的,因此可以支援增刪改查的操作。Bayou的更新操作會被標記為暫存的臨時的版本直到下一次的更新操作來到的時候,上次的更新操作才會被應用。更新的衝突需要一個獨立的檢驗過程和合並過程。

Coda

Coda是一個檔案系統,他的出現是為了彌補AFS檔案系統的不足之處。Coda的一個為了提高可用性的核心措施是利用了資料的本地副本實現了HA特性。Coda的副本策略是樂觀的,為什麼這麼說呢,他允許在網路分割槽的情況下,或者失去連線的條件下,對於副本資料進行修改的處理。然後依靠每個副本檔案的Coda version vector(CVV)來提供足夠的資訊表明了檔案的更新歷史,以便最後做衝突的檢測。

事務和副本資料

我們已經知道客戶端請求單一操作在一系列的物件副本中。一個事務用在有副本物件的場景與無副本物件的場景的表現應該是要一樣的。這個屬性叫做one-copy serializability。還好,每個RM提供了一定的併發控制能力和恢復物件的能力。one-copy Serializability的實現依靠的是read-one和write-all的機理實現。怎麼說呢?read-one指的是讀操作只會在你一個單一的副本管理器RM上執行,畢竟只是讀操作而已,而write-all則要在每個RM上應用到,所以他的體系結構要求,當到來一個寫請求時,所有的RM都要執行一遍,至於請求怎麼傳達到各個副本管理器,不需要客戶端一個個請求到每個RM裡,RM之間可以自己交流,傳播訊息。

副本管理器的拷貝

副本管理器的拷貝複製是為了防止,RM意外發生宕機或者說通訊失敗,要求拷貝一個與他一樣資料的RM,一遍能夠選擇另外的方式進行操作。

網路分割槽

網路的分割槽會導致副本管理器的group會本分成2個或者2個以上的子組,而子組之間由於分割槽的原因是無法通訊的,所以這往往造成資料的不一致性。解決這個問題的辦法叫available copies algorithm可用拷貝演算法,應用在每個分割槽中,當分割槽已經被修復的時候,再進行衝突的驗證。衝突的驗證可以用Version vector版本向量標記寫操作。在網路分割槽中,還有一個重要的概念叫virtual partition algorithm虛擬分割槽演算法。

參考文獻:<<Distributed Sysytems Concepts And Design>>原版第五版,author:George Coulouris,Jean Dollimore, Tim Kindberg,Gordon Blair