1 簡介
GFS特點:首先,組件失效被認爲是常態事件;其次,文件巨大;第三,文件修改多是尾部追回數據;第四,應用程序和文件系統API協同提高靈活性。
2 設計概述
2.1 設計預期
大量廉價組成,數量巨大的文件,大規模流式讀取和小規模隨機讀取,高效的、行爲定義明確的實現多客戶端並行追回數據到一個文件裏。
2.2 接口
類似傳統文件系統的API,另外提供了快照和記錄追加操作。
2.3 架構
一個集羣包括一個單獨的Master節點,多臺Chunk服務器,同時被多個客戶羰訪問。Master節點管理所有的文件系統元數據和系統範圍內的活動;
2.4 單一Master節點
2.5 Chunk尺寸
64MB,遠大於傳統文件,優點:減少客戶羰和Master節點通訊的需求,顯著降低我們的工作負載來說效果;其次減少網絡負載;第三減少Master節點要保存的元數據量 。惰性空間分配策略避免內部碎片。
2.6 元數據
文件和Chunk的命名空間、文件和Chunk的對應關係、Chunk副本的存放地點。
元數據保存在內存中
操作日誌到一定量時會對系統狀態做一次Checkpoint,創建新的Checkpoint文件,包括舊的日誌文件,舊的Checkpoint文件可以被刪除。
2.7 一致性模型
寬鬆的一致性模型
所有客戶端,無論哪個副本讀取,內容都是一樣,則認爲文件region是一致的;
如修改之後,region是一致的且客戶端能夠看到寫入操作全部的內容,則這個region是已定義的;
並行修改操作成功完成後,region處於一致的、未定義的狀態。(所有客戶端看到同樣的數據,但無法讀到任何一次寫入操作的數據)
數據操作:寫入、追加兩種。
寫入:把數據寫在應用程序指定的文件偏移位置上。
追加:
3 系統交互
3.1 租約和變更順序
Master節點爲Chunk的一個副本建立一個租約,這個副本叫主Chunk,主Chunk對Chunk的所有更改操作進行序列化。
3.2 數據流
數據流和控制流分開。基於TCPl連接的,管理式數據推送方式來最小化延遲。
3.3 原子的記錄追加
3.4 快照
4 Master節點的操作
Master 節點執行所有的名稱空間操作。此外,它還管理着整個系統裏所有 Chunk 的副本:它決定 Chunk 的存儲位置,創建新 Chunk 和它的副本,協調各種各樣的系統活動以保證 Chunk 被完全複製,在所有的 Chunk 服務器之間的進行負載均衡,回收不再使用的存儲空間。本節我們討論上述的主題。
4.1 名稱空間管理和鎖
4.2 副本的位置
原則:最大化數據可靠性和可用性,最大化網絡帶寬利用率。
4.3 創建 重新複製 重新負載均衡
創建時選擇副本的位置,選擇副本:低於平均硬盤使用率、限制每個Chunk服務器上最近的Chunk的創建操作的次數、分佈在多個機架之間。
Master選擇優先級最高的Chunk,然後命某個Chunk服務器從可用的副本拷貝出一個副本。
Master服務器週期性地對副本進行重新負載均衡:它檢查當前的副本分佈情況,然後移動副本以便更好的利用硬盤空間、更有效的進行負載均衡
4.4 垃圾回收
採用惰性的策略,只在文件和Chunk級的常規垃圾收集時進行。
4.5 過期失效的副本檢測
Chunk服務器重新啓動,並且向Master節點報告它擁有的Chunk的集合以及相應的版本號的時候,就會檢測出它包含過期的Chunk,在例行的垃圾回收過程中移除所有的過期失效副本。
5 容錯和診斷
5.1 高可用性
快速恢復和複製。
Chunk複製到不同機架上,通過Chksum檢驗檢查已損壞的數據,Master節通過克隆已的副本保證。
5.2 數據的完整性
5.3 診斷工具
6 度量
6.1 小規模基準測試
6.2 實際應用中的集羣
6.3 工作負荷分析
7 經驗
8 相關工作
9 結束語
10 致謝
11 參考