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