Chubby
Google Chubby是一個分布式鎖服務,Chubby底層一致性實現(xiàn)就是以Paxos為基礎的涣达。
概述
Chubby是一個面向松耦合分布式系統(tǒng)的鎖服務,通常用于為一個由大量小型計算機構成的松耦合分布式系統(tǒng)提供高可用的鎖服務爬泥。一個分布式鎖服務的目的是允許他的客戶端進程同步彼此的操作童番,并對當前所處環(huán)境的基本狀態(tài)信息達成一致。
應用場景
最典型的場景是進行服務器的Master選舉恕齐。GFS使用Chubby來實現(xiàn)對GFS Master服務器的選舉乞娄。
設計目標
Chubby并沒有設計成Paxos算法協(xié)議庫,而是設計成一個需要訪問中心化節(jié)點的分布式鎖服務显歧。這樣做有如下四個好處:
1仪或、對上層應用的侵入性更小
2、便于提供數(shù)據(jù)的發(fā)布和訂閱
3追迟、開發(fā)人員對基于鎖的接口更加熟悉
4、更便捷的構建可靠服務
系統(tǒng)結構
一個典型的Chubby集群骚腥,或者叫Chubby cell敦间,通常由5臺服務器組成。這些副本服務器采用Paxos協(xié)議,通過投票方式決定一個服務器作為Master廓块。一旦一個服務器成為Master厢绝,Chubby會保證一段時間其他服務器不會成為Master,這段時間被成為租期带猴。在運行過程中昔汉,Master服務器會不斷續(xù)租,如果Master服務器發(fā)生故障拴清,余下的服務器會選舉新的Master產生新的Master服務器靶病。
在實際運行中,只有Master服務器才能對數(shù)據(jù)進行寫操作口予,其他服務器使用Paxos協(xié)議從Master服務器上同步數(shù)據(jù)庫數(shù)據(jù)的更新娄周。
Chubby客戶端會向所有服務器輪詢該服務器是否為Master服務器,在詢問過程沪停,那些非Master服務器會將Master服務器標識反饋給客戶端(存儲小數(shù)據(jù))煤辨,可以非常快的定位到Master木张。
客戶端定位到Master后众辨,所有的請求都會發(fā)到Master上,針對寫請求舷礼,Chubby Master會采用一致性協(xié)議將其廣播到所有副本服務器鹃彻,并且在過半機器接受請求后,再響應客戶端且轨。對于讀請求浮声,Master服務器單獨處理即可。
在Chubby運行過程中旋奢,Master服務器會周期性輪詢DNS列表泳挥,會很快感知到服務器地址變更。集群內部其他副本服務器通過復制獲得最新服務器地址列表至朗。
目錄與文件
Chubby提供類似Unix文件的接口屉符。典型節(jié)點路徑:ls/foo/path/node。
鎖與鎖序列器
在分布式系統(tǒng)中锹引,由于網絡的不確定性矗钟,鎖是一個非常復雜的問題。在Chubby中嫌变,任意一個數(shù)據(jù)節(jié)點都可以充當一個讀寫鎖來使用吨艇,Chubby舍棄了嚴格的強制鎖,客戶端可以在沒有任何鎖的情況下訪問Chubby的文件腾啥。
在Chubby中东涡,主要采用鎖延遲和鎖系列器兩種策略來解決以上提出的鎖問題冯吓。
Chubby中的事件通知機制
為了避免大量客戶端輪詢服務器帶來的壓力,Chubby提供了事件通知機制疮跑。Chubby客戶端可以向Chubby注冊事件通知组贺,當觸發(fā)了這些事件后服務端就會向客戶端發(fā)送事件通知。
Chubby中的緩存
Chubby在客戶端中實現(xiàn)了緩存祖娘,并且通過租期機制保證緩存的強一致性失尖。
會話和會話激活
客戶端和Chubby通過TCP連接建立會話,并且通過心跳來保持會話激活渐苏。
Paxos協(xié)議的實現(xiàn)
Chubby服務器的基本架構大致分三層:
1掀潮、最底層是容錯日志系統(tǒng),通過Paxos協(xié)議保證集群上的日志完全一致整以。
2胧辽、日志之上是KV類型的容錯數(shù)據(jù)庫,通過下層的日志來保證一致性和容錯性公黑。
3邑商、最上層是對外提供的分布式鎖服務和小文件存儲服務。