分布式系统基本副本协议
一、中心化副本控制協(xié)議
中心化副本控制協(xié)議的基本思路是由一個(gè)中心節(jié)點(diǎn)協(xié)調(diào)副本數(shù)據(jù)的更新、維護(hù)副本之間的一致性。
優(yōu)點(diǎn):協(xié)議相對(duì)較為簡(jiǎn)單,所有的副本相關(guān)的控制交由中心節(jié)點(diǎn)完成。并發(fā)控制也由中心節(jié)點(diǎn)完成。
缺點(diǎn):系統(tǒng)的可用性依賴于中心化節(jié)點(diǎn),當(dāng)中心節(jié)點(diǎn)異常時(shí)存在一定的停服務(wù)時(shí)間。
primary-secondary協(xié)議
primary-secondary協(xié)議(也稱 primary-backup)是中心化副本控制協(xié)議的非常常用的一種。在 primary-secondary 類型的協(xié)議中,副本被分為兩大類,其中有且僅有一個(gè)副本作為 primary 副本,除 primary 以外的副本都作為 secondary 副本。
維護(hù) primary 副本的節(jié)點(diǎn)作為中心節(jié)點(diǎn),中心節(jié)點(diǎn)負(fù)責(zé)維護(hù)數(shù)據(jù)的更新、并發(fā)控制、協(xié)調(diào)副本的一致性。
Primary-secondary 類型的協(xié)議一般要解決四大類問(wèn)題:數(shù)據(jù)更新流程、數(shù)據(jù)讀取方式、Primary副本的確定和切換、數(shù)據(jù)同步(reconcile)。
1、數(shù)據(jù)更新的基本流程
①數(shù)據(jù)更新都由 primary 節(jié)點(diǎn)協(xié)調(diào)完成。
②外部節(jié)點(diǎn)將更新操作發(fā)給 primary 節(jié)點(diǎn)
③primary 節(jié)點(diǎn)進(jìn)行并發(fā)控制即確定并發(fā)更新操作的先后順序
④primary 節(jié)點(diǎn)將更新操作發(fā)送給 secondary 節(jié)點(diǎn)
⑤primary 根據(jù) secondary 節(jié)點(diǎn)的完成情況決定更新是否成功并將結(jié)果返回外部節(jié)點(diǎn)
?
其中第4步,如果由primary節(jié)點(diǎn)同時(shí)將更新數(shù)據(jù)發(fā)送給其他secondary副本,則其他secondary副本的的更新受primary網(wǎng)絡(luò)帶寬的影響,最大為1/N.為了解決這個(gè)問(wèn)題,有些系統(tǒng)(GFS)使用接力的方式同步數(shù)據(jù)。
2、數(shù)據(jù)讀取方式
①如果只需要最終一致性,則讀取任何副本都可以滿足需求。
②如果需要會(huì)話一致性,則可以為副本設(shè)置版本號(hào),每次更新后遞增版本號(hào),用戶讀取副本時(shí)驗(yàn)證版本號(hào),從而保證用戶讀到的數(shù)據(jù)在會(huì)話范圍內(nèi)單調(diào)遞增。
primary-secondary 比較困難的是實(shí)現(xiàn)強(qiáng)一致性,以下是2中思路:
①如果始終只讀 primary 副本的數(shù)據(jù),可以實(shí)現(xiàn)強(qiáng)一致性,但是secondary將不提供讀服務(wù)。實(shí)踐中,如果副本不與機(jī)器綁定,以數(shù)據(jù)段為副本的基本單位,將副本分散到集群中個(gè),假設(shè)primary 也是隨機(jī)的確定的,那么每臺(tái)機(jī)器上都有一些數(shù)據(jù)的 primary 副本,也有另一些數(shù)據(jù)段的 secondary 副本,從而每臺(tái)服務(wù)器實(shí)際都提供讀寫服務(wù)。
②由?primary?控制節(jié)點(diǎn)?secondary?節(jié)點(diǎn)的可用性。當(dāng)?primary?更新某個(gè)?secondary?副本不成功時(shí),primary?將該?secondary?副本標(biāo)記為不可用,不可用的secondary?副本可以繼續(xù)嘗試與?primary?同步數(shù)據(jù)直到同步成功,primary將副本標(biāo)記為可用。這種方式依賴于一個(gè)中心元數(shù)據(jù)管理系統(tǒng),用于記錄哪些副本可用,哪些副本不可用。
3、primary副本的確定和切換
確定副本:在 primary-secondary 類型的分布式系統(tǒng)中,哪個(gè)副本是 primary 這一信息都屬于元信息,由專門的元數(shù)據(jù)服務(wù)器維護(hù)。
切換副本的難點(diǎn):
①如何發(fā)現(xiàn)primary節(jié)點(diǎn)異常,Lease 機(jī)制(后面介紹)
②切換primary后如何做到不影響副本的一致性。如何確定一個(gè) secondary 副本使得該副本上的數(shù)據(jù)與原primary一致?
由于分布式系統(tǒng)中可靠的發(fā)現(xiàn)節(jié)點(diǎn)異常是需要一定的探測(cè)時(shí)間的,這樣的探測(cè)時(shí)間通常是 10秒級(jí)別,在這 10 秒時(shí)間內(nèi),由于沒(méi)有 primary,系統(tǒng)不能提供更新服務(wù),甚至不能提供讀服務(wù)。因此,primary-backup 類副本協(xié)議的最大缺點(diǎn)就是primary切換帶來(lái)的一定的停服務(wù)時(shí)間。
4、數(shù)據(jù)同步
通常不一致的形式有三種:
①由于網(wǎng)絡(luò)分化等異常,secondary?上的數(shù)據(jù)落后于?primary?上的數(shù)據(jù)。回放?primary?上的操作日志。
②在某些協(xié)議下,secondary?上的數(shù)據(jù)有可能是臟數(shù)據(jù),需要被丟棄。臟數(shù)據(jù)是由于primary?副本沒(méi)有進(jìn)行某一更新操作,而?secondary?副本上反而進(jìn)行的多余的修改操作,從而造成secondary?副本數(shù)據(jù)錯(cuò)誤。可以設(shè)計(jì)一些基于?undo?日志的方式(后期分享)從而可以刪除臟數(shù)據(jù)。
③secondary?是一個(gè)新增加的副本,完全沒(méi)有數(shù)據(jù),需要從其他副本上拷貝數(shù)據(jù)。直接拷貝?primary?副本的數(shù)據(jù),但拷貝數(shù)據(jù)時(shí)?primary?副本需要能夠繼續(xù)提供更新服務(wù),這就要求?primary?副本支持快照(snapshot)功能。即對(duì)某一刻的副本數(shù)據(jù)形成快照,然后拷貝快照,拷貝完成后使用回放日志的方式追快照形成后的更新操作。
二、去中心化副本控制協(xié)議
去中心化副本控制協(xié)議沒(méi)有中心節(jié)點(diǎn),協(xié)議中所有的節(jié)點(diǎn)都是完全對(duì)等的,節(jié)點(diǎn)之間通過(guò)平等協(xié)商達(dá)到一致。從而去中心化協(xié)議沒(méi)有因?yàn)橹行幕?jié)點(diǎn)異常而帶來(lái)的停服務(wù)等問(wèn)題。
缺點(diǎn):協(xié)議過(guò)程通常比較復(fù)雜、效率低
Paxos?是唯一在工程中得到應(yīng)用的強(qiáng)一致性去中心化副本控制協(xié)議。
?
實(shí)例:
①GFS?系統(tǒng)的副本控制協(xié)議是典型的?Primary-Secondary?型協(xié)議,Primary?副本由?Master?指定,Primary?副本決定并發(fā)更新操作的順序。雖然在?GFS?中,更新操作的數(shù)據(jù)由客戶端提交,并在各個(gè)副本之間流式的傳輸,及由上一個(gè)副本傳遞到下一個(gè)副本,每個(gè)副本都即接受其他副本的更新,也向下更新另一個(gè)副本,但是數(shù)據(jù)的更新過(guò)程完全是由?primary?控制的,所以也可以認(rèn)為數(shù)據(jù)是由primary?副本同步到?secondary?副本的。
②Zookeeper?使用了基于?Paxos?的去中心化協(xié)議(后期分享)選出?primary?節(jié)點(diǎn),但完成?primary節(jié)點(diǎn)的選舉后,這兩個(gè)系統(tǒng)都轉(zhuǎn)為中心化的副本控制協(xié)議,即由?primary?節(jié)點(diǎn)負(fù)責(zé)同步更新操作到secondary?節(jié)點(diǎn)。
?
參考資料:《分布式系統(tǒng)原理介紹》作者:劉杰
如有錯(cuò)誤歡迎指正!
總結(jié)
以上是生活随笔為你收集整理的分布式系统基本副本协议的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 分布式系统的数据分布方式
- 下一篇: 分布式系统Lease机制