分散式文件系統 系統是構建在普通的、廉價的機器上,因此故障是常態而不是意外 系統希望存儲的是大量的大型文件(單個文件size很大) 系統支持兩種類型讀操作:大量的順序讀取以及小規模的隨機讀取(large streaming reads and small random reads.) 系統的寫操作主 ...
分散式文件系統
-
系統是構建在普通的、廉價的機器上,因此故障是常態而不是意外
-
系統希望存儲的是大量的大型文件(單個文件size很大)
-
系統支持兩種類型讀操作:大量的順序讀取以及小規模的隨機讀取(large streaming reads and small random reads.)
-
系統的寫操作主要是順序的追加寫,而不是覆蓋寫
-
系統對於大量客戶端併發的追加寫有大量的優化,以保證寫入的高效性與一致性,主要歸功於原子操作record append
-
系統更看重的是持續穩定的帶寬而不是單次讀寫的延遲GFS架構
GFS架構:
由三部分組成:GFS master、GFS Client、GFS chunkserver。其中,GFS master任意時刻只有一個,而chunkserver和gfs client可能有多個。
一份文件被分為多個固定大小的chunk(預設64M),每個chunk有全局唯一的文件句柄 (一個64位的chunk ID),每一份chunk會被覆制到多個chunkserver(預設值是3),以此保證可用性與可靠性。chunkserver將chunk當做普通的Linux文件存儲在本地磁碟上。
GFS master是系統的元數據伺服器,維護的元數據包括:命令空間(GFS按層級目錄管理文件)、文件到chunk的映射,chunk的位置。其中,前兩者是會持久化的,而chunk的位置信息來自於Chunkserver的彙報。
GFS master還負責分散式系統的集中調度:chunk lease管理,垃圾回收,chunk遷移等重要的系統控制。master與chunkserver保持常規的心跳,以確定chunkserver的狀態。
GFS client是給應用使用的API。GFS Client會緩存從GFS master讀取的chunk信息(即元數據),儘量減少與GFS master的交互。
讀取數據的流程:
-
應用程式調用GFS client提供的介面,表明要讀取的文件名、偏移、長度。
-
GFS Client將偏移按照規則翻譯成chunk序號,發送給master
-
master將chunk id與chunk的副本位置告訴GFS client
-
GFS client向最近的持有副本的Chunkserver發出讀請求,請求中包含chunk id與範圍
-
ChunkServer讀取相應的文件,然後將文件內容發給GFS client。