分布式系统理论之租约机制学习
一,租約機制介紹
在分布式系統(tǒng)中,往往會有一個中心服務(wù)器節(jié)點。該節(jié)點負責存儲、維護系統(tǒng)中的元數(shù)據(jù)。如果系統(tǒng)中的各種操作都依賴于中心服務(wù)器上的元數(shù)據(jù),那么中心服務(wù)器很容易成為性能瓶頸及存在單點故障。而通過租約機制,可以將中心服務(wù)器的“權(quán)力”下放給其他機器,就可以減輕中心服務(wù)器的壓力。當然,租約機制還有許多其他的用途:比如,確定集群中結(jié)點的狀態(tài),還可以實現(xiàn)分布式下的讀寫鎖……
如下圖,GFS master頒發(fā)租約給某個chunk server,讓它成為Primary 副本,當有多個client并發(fā)更新數(shù)據(jù)塊時,由Primary副本確定并發(fā)更新該數(shù)據(jù)塊的順序。GFS master 將權(quán)力下放給 chunk server,緩解了一定的壓力。
?
當然,也可以將中心服務(wù)器(元數(shù)據(jù)服務(wù)器)設(shè)計成集群的形式。這樣,也避免了中心服務(wù)器成為瓶頸問題。比如,消息服務(wù)器:RocketMQ。其中生產(chǎn)者和消費者都需要NameServer來確定訂閱關(guān)系,將NameServer做成無狀態(tài)的集群,這里就不需要租約機制了。
?
對于租約而言,就有發(fā)布租約方 和 接收租約方。租約規(guī)定的內(nèi)容可以多種多樣(這也是租約具有各種應(yīng)用場景的原因)。發(fā)布租約方一般為上面提到的中心服務(wù)器,中心服務(wù)器保證在租約的有效期內(nèi)承諾租約規(guī)定的內(nèi)容的保持不變。
比如,分布式緩存系統(tǒng),元數(shù)據(jù)服務(wù)器(中心服務(wù)器)給各個Client發(fā)布租約,承諾在租約有效期內(nèi)不會更改元數(shù)據(jù)。這樣,各個Client只要檢查它的租約未過期,就可以直接從本地讀取緩存的元數(shù)據(jù),而不是每次都訪問元數(shù)據(jù)服務(wù)器獲得元數(shù)據(jù)。
?
二,租約機制分析
①租約機制保證緩存的一致性
?服務(wù)器發(fā)出Lease后,會保證在Lease的有效期內(nèi)不改變數(shù)據(jù)。這樣,收到Lease的Client在有效期內(nèi)可以放心地使用數(shù)據(jù)。在這個有效期內(nèi),Client 緩存的數(shù)據(jù)和 服務(wù)器上的數(shù)據(jù)是一致的。
存在的問題:
1)服務(wù)器修改元數(shù)據(jù)時,需要 阻塞所有的讀請求,此時服務(wù)器不能發(fā)出新的Lease。以防止新發(fā)出的Lease保證的數(shù)據(jù)與服務(wù)器剛才修改的數(shù)據(jù)不一致。
解決方法:讀請求到來時,直接返回數(shù)據(jù),不頒發(fā)Lease
?
2)服務(wù)器需要等待直至所有的Client的Lease都過期后,再才頒發(fā)新“修改”后的Lease。因此,此時服務(wù)器上的數(shù)據(jù)修改了,生成了一個新的Lease版本,需要等到Client上所有的老Lease過期后,該新Lease版本才能頒布給Client。
解決方法:服務(wù)器主動通知持久Lease的Client放棄當前的Lease,并請求新Lease
?
另一種緩存一致性的保證方法類似于“租約機制”,當Client請求Server的數(shù)據(jù)時,Server為Client提供一個“回調(diào)承諾”,用于保證當其他Client修改此數(shù)據(jù)時通知該Client。回調(diào)承諾 和 請求的數(shù)據(jù)都保存在Client端,回調(diào)承諾有兩種狀態(tài):有效和取消。
當Server執(zhí)行了一個更新數(shù)據(jù)請求時,它會通知它發(fā)送了回調(diào)承諾的所有Client,即給Client的端的進程發(fā)一個回調(diào)(server到client的一個遠程過程調(diào)用)
,當Client進程收到回調(diào)時,它將相關(guān)數(shù)據(jù)的回調(diào)承諾標識設(shè)置為“取消”。
?
②租約機制能夠很好地容納網(wǎng)絡(luò)錯誤異常
?1)Lease頒發(fā)過程只依賴于單向的網(wǎng)絡(luò)通信
服務(wù)器頒發(fā)Lease后,即使Client沒有收到(Client宕機、網(wǎng)絡(luò)異常),服務(wù)器只要等到Lease超時,就可以保證Client不再cache數(shù)據(jù),從而可以放心地修改數(shù)據(jù)而不會破壞cache的一致性。
2)一旦Lease被Client接收,后續(xù)Lease機制不再依賴于網(wǎng)絡(luò)通信。
3)對宕機節(jié)點有很好的容錯性
頒發(fā)Lease的節(jié)點宕機了,宕機的頒發(fā)者改變不了已經(jīng)頒發(fā)出的Lease的約定,不會影響Lease的正確性。
擁有Lease的節(jié)點宕機了,頒發(fā)者也不需要做容錯處理,只需要等待Lease到期了,就可以收回承諾進行下一步處理。
?
③租約機制確定節(jié)點的狀態(tài)
?在網(wǎng)絡(luò)中,如何確定某個節(jié)點的狀態(tài)呢?由于網(wǎng)絡(luò)故障(網(wǎng)絡(luò)分化)的存在,采用“心跳”機制確定節(jié)點的狀態(tài)會有一些不足。
比如,A、B、C三個節(jié)點互為副本,A為primary,Q負責判斷A、 B 、C的狀態(tài)。如果A正常工作,但是A 、Q之間的網(wǎng)絡(luò)異常,Q也會認為A出現(xiàn)了問題了,于是 Q 重新選擇B作為primary,這里會導(dǎo)致“雙主”問題。
這里的本質(zhì)是:Q認為A異常了,但是A自己不認為自己異常。即,由于網(wǎng)絡(luò)分化造成系統(tǒng)對于“節(jié)點狀態(tài)”認知的不一致。
?解決方法有兩個:1)可以使用全體協(xié)商確定誰為primary(Paxos算法) ,這是一種去中心化協(xié)議
?2)采用Lease機制
?Q收到 A 、B 、C 的heart beat后,給它們頒發(fā)一個Lease,表示已經(jīng)知道了它們的狀態(tài),這樣 A 、B 、C 可以在有效期內(nèi)正常工作。同時,Q 可以給 A一個特殊的Lease,表示A可以作為primary工作。當需要切換primary時,只需要等到A的Lease過期,Q給另外節(jié)點頒發(fā)表示 primary的Lease即可。
?
三,租約機制在 GFS 的寫操作中的作用
We designed the system to minimize the master’s involvement in all operations. .... A mutation is an operation that changes the contents or metadata of a chunksuch as a write or an append operation.Each mutation is performed at all the chunk’s replicas. We use leases to maintain a consistent mutation order across replicas. The master grants a chunk lease to one of the replicas, which we call the primary. The primary picks a serial order for all mutations to the chunk. All replicas follow this order when applying mutations.為了減小 master 的負載,master 給某個chunk server 頒發(fā)lease,使之成為primary,然后由primary確定 mutation order。
?
這里也采用 “租約機制分析”中講到的:①master可以在租約還未過期之前 try to revoke a lease。②也可以等到租約過期后,向其他chunk server頒發(fā)primary租約(更換primary)。
?
The lease mechanism is designed to minimize management overhead at the master. A lease has an initial timeout of 60 seconds.這句話表明,租約減少了master的負載,租約的有效期限是60s
寫操作的步驟如下:
1)The client asks the master which chunkserver holds the current lease for the chunk and the locations of the other replicas.
Client向master 請求primary地址和其他chunk server地址
2)The master replies with the identity of the primary and the locations of the other (secondary) replicas.
?master返回primary地址及其他chunk server地址。Client可在Lease的有效期內(nèi)緩存這些信息。
?3)The client pushes the data to all the replicas
Client把待修改的數(shù)據(jù)發(fā)給各個chunk server(replicas),這里實現(xiàn)了控制流與數(shù)據(jù)流的分離(Client在第二步時獲得了控制信息)。
?4)Once all the replicas have acknowledged receiving the data, the client sends a write request to the primary.
Client先把待寫入的數(shù)據(jù)發(fā)給各個 chunk server,等到所有的chunk server都收到這些數(shù)據(jù)后,向 primary 發(fā)起寫請求。
5)The primary forwards the write request to all secondary replicas.
由primary制定寫請求的順序。所有的replicas都按照這個順序?qū)憯?shù)據(jù)。看,采用“中心化”的方式制定寫請求的順序,這樣很容易保證順序的唯一性。
6)The secondaries all reply to the primary indicating that they have completed the operation
所有的replicas(secondaries)都按照相同的順序?qū)懭霐?shù)據(jù)后,向primary發(fā)送完成報告。
7)The?primary?replies to the client.
由primary向Client報告此次寫操作的結(jié)果。
從上面的整個流程看,上面的操作很少涉及到master。大部分由master 頒發(fā)給Lease的primary來完成。
其實,個人感覺對于 mutation operation,這里的核心是兩個:?降低master的負載?? ?保證修改順序的一致性。而通過Lease機制,解決了這兩個問題。
master給某臺chunk server頒發(fā)Lease,使之成為Primary。由Primary接收Client的寫請求,由Primary負責其他replicas的寫操作是否完成……這都有效地降低了master的負載;其次,由primary制定寫操作的序列號,順序的確定是由primary確定的,不是協(xié)商確定的,這種“中心化”的機制容易保證順序的一致性。
?
四,參考資料
《分布式系統(tǒng)原理介紹》--劉杰
租約機制簡介
租約機制簡單介紹
?Lease 機制在分布式系統(tǒng)中的應(yīng)用
?分布式系統(tǒng)概念--第一篇 一致性協(xié)議、一致性模型、拜占庭問題、租約、副本協(xié)議
?
原文:http://www.cnblogs.com/hapjin/p/5620542.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的分布式系统理论之租约机制学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 红黑树、B(+)树、跳表、AVL对比
- 下一篇: 分布式系统的一致性协议之 2PC 和 3