【分布式】Chubby與Paxos

一、前言

在上一篇理解了Paxos算法的理論基礎(chǔ)后,接下來(lái)看看Paxos算法在工程的應(yīng)用。

二、Chubby

Chubby是一個(gè)面向松耦合分布式系統(tǒng)的鎖服務(wù),GFS(Google File System)和Big Table等大型系統(tǒng)都是用它來(lái)解決分布式協(xié)作、元數(shù)據(jù)存儲(chǔ)和Master選舉等一些列與分布式鎖服務(wù)相關(guān)的問(wèn)題。Chubby的底層一致性實(shí)現(xiàn)就是以Paxos算法為基礎(chǔ),Chubby提供了粗粒度的分布式鎖服務(wù),開(kāi)發(fā)人員直接調(diào)用Chubby的鎖服務(wù)接口即可實(shí)現(xiàn)分布式系統(tǒng)中多個(gè)進(jìn)程之間粗粒度的同控制,從而保證分布式數(shù)據(jù)的一致性。

2.1 設(shè)計(jì)目標(biāo)

Chubby被設(shè)計(jì)成為一個(gè)需要訪問(wèn)中心化的分布式鎖服務(wù)

① 對(duì)上層應(yīng)用程序的侵入性更小,使用一個(gè)分布式鎖服務(wù)的接口方式對(duì)上層應(yīng)用程序的侵入性更小,應(yīng)用程序只需調(diào)用相應(yīng)的接口即可使用分布式一致性特性,并且更易于保持系統(tǒng)已有的程序結(jié)構(gòu)和網(wǎng)絡(luò)通信模式。

② 便于提供數(shù)據(jù)的發(fā)布與訂閱,在Chubby進(jìn)行Master選舉時(shí),需要使用一種廣播結(jié)果的機(jī)制來(lái)向所有客戶端公布當(dāng)前Master服務(wù)器,這意味著Chubby應(yīng)該允許其客戶端在服務(wù)器上進(jìn)行少量數(shù)據(jù)的存儲(chǔ)和讀?。ù鎯?chǔ)主Master地址等信息),也就是對(duì)小文件的讀寫操作。數(shù)據(jù)的發(fā)布與訂閱功能和鎖服務(wù)在分布式一致性特性上是相通的。

③ 開(kāi)發(fā)人員對(duì)基于鎖的接口更為熟悉,Chubby提供了一套近乎和單機(jī)鎖機(jī)制一直的分布式鎖服務(wù)接口。

④ 更便捷地構(gòu)建更可靠的服務(wù),Chubby中通常使用5臺(tái)服務(wù)器來(lái)組成一個(gè)集群?jiǎn)卧–ell),根據(jù)Quorum機(jī)制(在一個(gè)由若干個(gè)機(jī)器組成的集群中,在一個(gè)數(shù)據(jù)項(xiàng)值的選定過(guò)程中,要求集群中過(guò)半的機(jī)器達(dá)成一致),只要整個(gè)集群中有3臺(tái)服務(wù)器是正常運(yùn)行的,那么整個(gè)集群就可以對(duì)外提供正常的服務(wù)。

⑤ 提供一個(gè)完整的、獨(dú)立的分布式鎖服務(wù),Chubby對(duì)于上層應(yīng)用程序的侵入性特別低,對(duì)于Master選舉同時(shí)將Master信息等級(jí)并廣播的場(chǎng)景,應(yīng)用程序只需要向Chubby請(qǐng)求一個(gè)鎖,并且在獲得鎖之后向相應(yīng)的鎖文件寫入Master信息即可,其余的客戶端就可以通過(guò)讀取這個(gè)鎖文件來(lái)獲取Master信息。

⑥ 提供粗粒度的鎖服務(wù),Chubby針對(duì)的應(yīng)用場(chǎng)景是客戶端獲得鎖之后會(huì)進(jìn)行長(zhǎng)時(shí)間持有(數(shù)小時(shí)或數(shù)天),而非用于短暫獲取鎖的場(chǎng)景。當(dāng)鎖服務(wù)短暫失效時(shí)(服務(wù)器宕機(jī)),Chubby需要保持所有鎖的持有狀態(tài),以避免持有鎖的客戶端出現(xiàn)問(wèn)題。而細(xì)粒度鎖通常設(shè)計(jì)為為鎖服務(wù)一旦失效就釋放所有鎖,因?yàn)槠涑钟袝r(shí)間很短,所以其放棄鎖帶來(lái)的代價(jià)較小。

⑦ 高可用、高可靠,對(duì)于一個(gè)由5太機(jī)器組成的集群而言,只要保證3臺(tái)正常運(yùn)行的機(jī)器,整個(gè)集群對(duì)外服務(wù)就能保持可用,另外,由于Chubby支持通過(guò)小文件讀寫服務(wù)的方式來(lái)進(jìn)行Master選舉結(jié)果的發(fā)布與訂閱,因此在Chubby的實(shí)際應(yīng)用中,必須能夠支撐成百上千個(gè)Chubby客戶端對(duì)同一個(gè)文件進(jìn)行監(jiān)控和讀取。

⑧ 提供時(shí)間通知機(jī)制,Chubby客戶端需要實(shí)時(shí)地感知到Master的變化情況,這可以通過(guò)讓你客戶端反復(fù)輪詢來(lái)實(shí)現(xiàn),但是在客戶端規(guī)模不斷增大的情況下,客戶端主動(dòng)輪詢的實(shí)時(shí)性效果并不理想,且對(duì)服務(wù)器性能和網(wǎng)絡(luò)帶寬壓力都非常大,因此,Chubby需要有能力將服務(wù)端的數(shù)據(jù)變化情況以時(shí)間的形式通知到所有訂閱的客戶端。

2.2 技術(shù)架構(gòu)

Chubby的整個(gè)系統(tǒng)結(jié)構(gòu)主要由服務(wù)端和客戶端兩部分組成,客戶端通過(guò)RPC調(diào)用和服務(wù)端進(jìn)行通信,如下圖所示。

網(wǎng)友評(píng)論