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