前言
這是看GFS的論文的研讀筆記。
GFS設計目的
- 滿足日益增長的數據處理需求
GFS設計的目標
高性能,可伸縮,高可靠,高可用
- 高性能:一般是指時間復雜度小,空間復雜度小,CPU占用時間少等
- 可伸縮:指程序性能硬件資源的增加和減少而增強或減弱的能力,可伸縮有很多種,線性伸縮(世界人民的目標),超線性伸縮,負伸縮等,但是隨著程序規模的增大,伸展性會越來越差
- 可靠性:指程序在規定條件下,在規定時間內完成規定任務的能力
- 可用性:就是一個系統處在可工作狀態的時間的比例
GFS設計假設
- 組件失效被認為是常態事件,而不是意外事件。(容錯能力)
- 系統存儲一定數量的大文件。(大數據)
- 系統的工作負載主要由兩種讀操作組成:大規模的流式讀取和小規模的隨機讀取。(讀寫模型)
- 系統的工作負載還包括許多大規模的、順序的、數據追加方式的寫操作。(讀寫模型)
- 系統必須高效的、行為定義明確的實現多客戶端并行追加數據到同一個文件里的語意。
- 高性能的穩定網絡帶寬遠比低延遲重要。
GFS設計架構
GFS架構圖.png
注解:
- 元數據:命名空間、訪問控制信息、文件和Chunk的映射信息、以及當前Chunk的位置信息
- 心跳:master以心跳周期來和chunk通信,給chunk指示以及收集他們當前狀態
GFS系統設計的優點
- 容錯性:每個塊都會復制到多個塊服務器上。缺省情況下,我們使用3個存儲復制節點,不過用戶可以為不同的文件命名空間設定不同的復制級別。
- 單一的Master節點:單一的Master簡化了設計,使架構能變得簡單。Master一般會返回離Client最近的文件副本(減少網絡IO)
- Client采用庫形式:GFS客戶端代碼以庫的形式被鏈接到客戶程序里??蛻舳舜a實現了GFS文件系統的API接口函數、應用程序與Master節點和Chunk服務器通訊、以及對數據進行讀寫操作
- Chunk的大小選擇:默認為64MB, 較大Chunk尺寸減少Client和Master通訊,減少Master存儲元數據的大小,Client對一個Chunk能進行多次操作,減少網絡IO。
GFS系統的缺點
- 單一的Master節點:有可能成為系統瓶頸,需要減少對Master的讀寫較大
- Chunk尺寸的缺點:小文件會存儲為一個Chunk,多個Client同時對單個小文件多次操作時,存放這個Chunk的Server會成為熱點
系統缺點的解決:
- 單一的Master節點:Client只詢問Master相關文件的元數據信息,Client對元數據信息做適當緩存,后面的具體讀寫操作均在Chunk上
GFS交互流程
GFS數據交換操作圖.png