在散布式系統(tǒng)中,副本和備份是1個用來提供高可用性和1定的容錯能力的手段和措施。HA(高可用性)在當前愈來愈成為1個趨勢在1些移動計算的領域和1些失去連接的狀態(tài)場景之下。在這篇筆記中,我會介紹1些副本備份的相干技術點,比如基于隸屬度管理的組通訊,還有被動和主動備份技術,和最后的副本分區(qū)的1些情況。
1、副本在散布式系統(tǒng)中被用的非常的廣泛,比如說被用于資源的緩存的訪問,放置在代理服務器上或說存在于客戶真?zhèn)€本地機子上,對源資源的1個拷貝。
2、副本的技術的出現(xiàn)加強了服務的性能,首先可以免了要求服務的延遲,當遠程訪問源服務器資源的時候,第2點,提高了高可用性,當服務器宕機的時候,最少還有他的副本資源的存在,以致于在客戶端失去連接的時候還能正常使用,這其實也是容錯能力的1個表現(xiàn)。這里用1個數(shù)字來體現(xiàn)這1點,如果說服務器有2個副本,每一個服務器宕機的幾率為5%,只有當2個服務器都不可用的時候才會造成系統(tǒng)真實的不可用,幾率p=1-0.05*0.05=0.9975,也就是說是99.75%,這已是很1個高度可用的比例值了。
3、但是這里就會有1個比較重要的問題,已有這么多的副本備份了,如何保護他們的1致性問題,數(shù)據(jù)不1致了,后果可很嚴重哦,比如說1些資金,銀行等方面的,明顯是不容有失的。
各個副本實際上是1個物理對象,寄存在各個單1的機子上的。這里提供了1種組通訊的機制用來調和他們之間的1致性。
為了使得問題變得1般化,我們構造了1個基本的結構模型用來管理副本數(shù)據(jù)。在這個結構中,我們用到了1個主要的角色RM(Replication Manager)副本管理器,在這里,你可以把副本管理器就理解為1個Server服務端。所以這個結構就變成了常見的C-S的模型了。在這里每一個副本管理器包括了每一個對象的1個副本。
1、當客戶端發(fā)出1個要求操作的時候,他其實不是直接馬上的發(fā)給RM,而是先到1個專門處理要求的組件,叫做front end,front end的作用才是通過消息傳遞與RM副本管理器通訊的1個角色。
2、然后履行后面的5個階段的進程:(1)、Requesting要求。(2)、Coordination調和。(3)、Execution履行階段。(4)、Agreement1致性階段。(5)、Response回復階段。
3、在之前的章節(jié)中,我們提到過組通訊中用到的covering algorithm覆蓋算法,當在副本技術中,這里要求1個更高要求的動態(tài)隸屬度方法,意味著在進程進入或離開系統(tǒng)的時候,組的隸屬度會產生改變。因此就衍生出了1個額外的服務叫做membership service服務。
容錯服務與上面提到的高可用的區(qū)分在于對數(shù)據(jù)的正確性上的處理上,也就是說,當服務器掛了的時候,此時如果你的副本數(shù)據(jù)已正確更新了,固然沒問題,但是如果此時的你的副本上的數(shù)據(jù)還是舊的話,明顯還達不到系統(tǒng)的要求,所以這里說的容錯服務是對數(shù)據(jù)1致性的要求。
1、在數(shù)據(jù)1致性的分類中,這里分為了2類:Linearizability consistency和sequential consistency。
Passive replication的意思是被動副本的意思,1句話說,就是當最初的RM副本管理器掛掉的時候,在這些備份的副本中會選出1個作為新的主要的備份管理器,將會重新恢復剛剛操作失敗時的狀態(tài)。被動副本技術的缺點在于比較高的溝通本錢,在這里的進程會產生數(shù)次的來回的消息通訊,無疑也會造成1定的延遲。而且當主副本上更新了數(shù)據(jù)的時候,必須one-to-one的方式更新備份副本上的數(shù)據(jù),效力還是比較低下的。
與上面的方式相對的是Active replication,積極的備份技術,如果在此模式下,如果服務器的RM掛了,將不會對系統(tǒng)的性能有任何的影響,剩下的副本管理器還是會繼續(xù)的響應回復。所以積極的副本技術的原理就是他會向所有的副本管理器發(fā)出要求,然后要求會在所有的RM上跑1遍,然后客戶端獲得到所有的回復,最后第1個回復的結果將會被采用。所以在積極副本技術中,其中的全局有序性就顯得比較重要了。
在下面,將會羅列出幾個利用了副本技術使得服務變得高可用性的例子。
1、gossip結構實現(xiàn)高可用的措施是通過副本管理器之間進行周期性的交換gossip message,為了是副本之間能及時獲得到來自客戶真?zhèn)€更新操作以此保持1致性。gossip服務提供2種類型的操作,query操作和update更新操作。
2、為了保持進程操作的有序性,每一個要求采取了類似于1個vector timestamp時間戳向量的概念。當每次操作結束,就會更新新的時間戳向量的新的值。
3、每一個gossip信息包括了2個項,1個是副本管理器RM的log,和副本的timestamp,日志是用來合并用的。
4、gossip結構并沒有規(guī)定甚么時候或說在哪里進行副本管理器之間的信息交換,這里推薦了1種update-propagation更新傳播的策略。
Bayou系統(tǒng)是1個提供數(shù)據(jù)副本的高可用性但是在1致性的方面稍微差1點的系統(tǒng)。他的副本情勢是以數(shù)據(jù)庫的情勢保存的,因此可以支持增刪改查的操作。Bayou的更新操作會被標記為暫存的臨時的版本直到下1次的更新操作來到的時候,上次的更新操作才會被利用。更新的沖突需要1個獨立的檢驗進程和合并進程。
Coda是1個文件系統(tǒng),他的出現(xiàn)是為了彌補AFS文件系統(tǒng)的不足的地方。Coda的1個為了提高可用性的核心措施是利用了數(shù)據(jù)的本地副本實現(xiàn)了HA特性。Coda的副本策略是樂觀的,為何這么說呢,他允許在網絡分區(qū)的情況下,或失去連接的條件下,對副本數(shù)據(jù)進行修改的處理。然后依托每一個副本文件的Coda version vector(CVV)來提供足夠的信息表明了文件的更新歷史,以便最后做沖突的檢測。
我們已知道客戶端要求單1操作在1系列的對象副本中。1個事務用在有副本對象的場景與無副本對象的場景的表現(xiàn)應當是要1樣的。這個屬性叫做one-copy serializability。還好,每一個RM提供了1定的并發(fā)控制能力和恢復對象的能力。one-copy Serializability的實現(xiàn)依托的是read-one和write-all的機理實現(xiàn)。怎樣說呢?read-one指的是讀操作只會在你1個單1的副本管理器RM上履行,畢竟只是讀操作而已,而write-all則要在每一個RM上利用到,所以他的體系結構要求,當?shù)絹?個寫要求時,所有的RM都要履行1遍,至于要求怎樣轉達到各個副本管理器,不需要客戶端1個個要求到每一個RM里,RM之間可以自己交換,傳播消息。
副本管理器的拷貝復制是為了避免,RM意外產生宕機或說通訊失敗,要求拷貝1個與他1樣數(shù)據(jù)的RM,1遍能夠選擇另外的方式進行操作。
網絡的分區(qū)會致使副本管理器的group會本分成2個或2個以上的子組,而子組之間由于分區(qū)的緣由是沒法通訊的,所以這常常造成數(shù)據(jù)的不1致性。解決這個問題的辦法叫available copies algorithm可用拷貝算法,利用在每一個分區(qū)中,當分區(qū)已被修復的時候,再進行沖突的驗證。沖突的驗證可以用Version vector版本向量標記寫操作。在網絡分區(qū)中,還有1個重要的概念叫virtual partition algorithm虛擬分區(qū)算法。
參考文獻:<<Distributed Sysytems Concepts And Design>>原版第5版,author:George Coulouris,Jean Dollimore, Tim Kindberg,Gordon
Blair