Google File System架構
GFS是一個面向大規模數據密集型應用的,可伸縮的分布式文件系統。GFS可以運行在廉價的設備上,并且能夠提供具有容災、高性能的服務。
GFS架構:
一個GFS集群包括一個單點Master,多臺Chunk服務器 (ChunkServer,下面也稱塊服務器),并且能夠同時被多個客戶端訪問。如圖1所示。所有的這些機器可以使普通的運行用戶級線程的Linux機器。只要機器允許,我們完全可以將客戶端與Chunk服務器放在同一臺機器上。
GFS上存儲的文件被分割成固定大小的Chunk(塊)。Chunk服務器把 Chunk以Linux文件的形式保存在本地磁盤上行,并根據指定的Chunk標識和字節范圍來讀寫數據。處于可靠性的考慮,每個塊會復制到多個 chunk服務器上。默認情況下,GFS被將塊復制為3份,當然,用戶可以指定這個參數。
Master節點管理著所有的文件系統元數據,包括命名空間、訪問控制信息、文件和 Chunk之間的映射信息、以及當前chunk的位置信息。Master節點還管理著全系統范圍內的活動,如塊的租用管理、孤立塊的回收、以及塊在不同塊服務器間的移動。Master使用心跳信息周期性的和每個Chunk服務器通訊,并發送指令到各個塊服務器并接收各個塊服務器的狀態信息。
無論是客戶端還是塊服務器都無需對文件數據進行緩存。客戶端無需緩存的原因,因為大部分程序需要以流的方式讀取一個巨大的文件,再者,工作集可能會很大以至于無法進行緩存。塊服務器無需緩存數據的原因,塊一本地的方式保存,Linux文件系統緩存會把經常訪問的數據緩存在內存中。
下面簡單解釋下在單點Master下一次簡單的讀取過程:
(1)客戶端向Master發送請求,請求信息為(文件名,塊索引)
(2)Master使用心跳信息監控塊服務器的狀態,并向其發送指令。
(3)塊服務器需要周期性的返回自己的狀態給Master,以確保能夠接收Master的請求。
(4)Master將(塊句柄,塊位置)這一信息返回給客戶端
(5)客戶端使用文件名和塊索引作為Key進行緩存信息。然后,客戶端發送請求到其中的一個副本中(通常為最近的),該請求包括(塊句柄,字節范圍)。對這個塊的后續操作,客戶端無需再和Master進行通信,除非緩存信息過期或者文件被重新打開。
(6)塊服務器將所需的塊數據發送給客戶端。
整個流程如下圖所示: