谷歌GFS论文笔记
谷歌GFS論文筆記
- 前言
- master
- chunkserver
- 一致性模型
- data integrity
- 下線
- mmap讀寫鎖
- FAQ
- 參考鏈接
前言
本篇文章主要講解谷歌經(jīng)典論文The Google File System,它構(gòu)建在廉價(jià)的普通pc服務(wù)器上,并且可以自動容災(zāi)容錯(cuò)。其對于整個(gè)存儲界具有里程碑的意義。
master
- GFS 為了簡化設(shè)計(jì),在整個(gè)系統(tǒng)中只有一個(gè) master 進(jìn)行管理。Master 不提供讀寫操作,它只會告訴 client,它所請求操作的文件在哪個(gè) chunkserver 上,然后 client 會根據(jù) master 提供的信息,與對應(yīng)的 chunkserver 進(jìn)行通信。
- 為了保證同一時(shí)刻只有一臺Master,GFS使用Chubby進(jìn)行選主。
- master保存所有的元數(shù)據(jù),并且以最快的時(shí)間可以把服務(wù)起來為目的。這里的元數(shù)據(jù)主要指:
- chunk的元數(shù)據(jù)(全局唯一ID,版本號,每個(gè)副本對應(yīng)的chunkserver,引用計(jì)數(shù))
- 文件及chunk命名空間,文件到chunk之間的映射,的由于GFS一般都是大文件,所以一般Master的內(nèi)存不會時(shí)瓶頸。
- master只有一個(gè)節(jié)點(diǎn),如果這個(gè)節(jié)點(diǎn)掛了,會在別的機(jī)器再起一個(gè)服務(wù),同時(shí)修改DNS
- 有一些shadow節(jié)點(diǎn),在master生成原數(shù)據(jù)的時(shí)候,也會把那些原數(shù)據(jù)同步過來,但是會比master節(jié)點(diǎn)慢一點(diǎn),我理解是如果master掛掉了,可以快速的再起一個(gè)。
除了負(fù)責(zé)管理chunk的元數(shù)據(jù)信息并和client和chunkserver通信,Master還負(fù)責(zé)以下事情:
chunkserver
ChunkServer中每個(gè)chunk為64M,相對較大,“append-at-least-once semantics”簡化了chunkServer的復(fù)雜程度。對于每個(gè)chunk,必須將所有的副本全部寫入成功,才視為寫入成功。下面我們主要介紹追加流程:
一致性模型
- 無論數(shù)據(jù)是單點(diǎn)寫但是并發(fā)寫,只要寫成功了,都是原子性,一致性的,如果出錯(cuò)則是不一致的。
- GFG主要是為了追加(append)而不是改寫(overwrite)而設(shè)計(jì)的。這么做的原因一方面是實(shí)現(xiàn)起來簡單,一致性模型也簡單,另一方面是上層的應(yīng)用Bigtable主要就是用追加寫,GFS對Record append的保證是defined but interspersed with inconsistent,注意以下幾點(diǎn):
- GFS的追加寫只保證“同一紀(jì)錄至少成功寫入一次”,有可能一些副本出現(xiàn)了多條記錄,而失敗的副本出現(xiàn)了“padding”記錄。所以上層應(yīng)用需要保證正確性,Bigtable通過事務(wù)日志和子表記錄sstable元數(shù)據(jù)的方式保證正確性
- 由于GFS支持并發(fā)追加,多個(gè)客戶端的順序是無法保證的,客戶端的連續(xù)追加記錄也有可能被其他客戶端打斷
data integrity
下線
GFS的chunk分配在哪個(gè)ChunkServer是由Master動態(tài)根據(jù)當(dāng)前整個(gè)系統(tǒng)的負(fù)載決定的。因此比ceph打的更散,根據(jù)Section 6.2.5的描述,kill掉兩個(gè)ChunkServer之后,就有266個(gè)chunk成為單點(diǎn)了。單點(diǎn)chunk在系統(tǒng)修復(fù)中擁有搞優(yōu)先級。
根據(jù)GFS的IO流程圖Figure 2,任何的副本寫入不成功,都會導(dǎo)致客戶端認(rèn)為當(dāng)前寫入操作失敗,并進(jìn)行重試,如果是因?yàn)槟撤N原因ChunkServer故障了,這這時(shí)其上的Chunk處于不可服務(wù)的狀態(tài)。6.2.2詳述了ChunkServer寫入失敗后恢復(fù)的速度。
to minimize the impact of failures on running applications, we boost the priority of any chunk that is blocking client progress.
故障ChunkServer中正在被Client訪問的chunk擁有高的修復(fù)優(yōu)先級。
mmap讀寫鎖
論文提到了,如果磁盤有page in操作,會持有讀鎖,這時(shí)mmap操作想要持有的寫鎖會被阻塞住。GFS的解決辦法是使用pread代替mmap,但是這樣會額外代理一次pread的拷貝開銷。
涉及到的名詞有
FAQ
- google后來也知道這東西不可靠,比如一個(gè)宕機(jī)了還要啟動另一個(gè)為主,還要換DNS,這里面有手動的成分
- 后來谷歌把master換成集群了
參考鏈接
總結(jié)
- 上一篇: DPDK精准测量时间
- 下一篇: Google Spanner 论文笔记