baiduspider無法訪問您的網(wǎng)站微信管理工具
讀寫操作
系統(tǒng)的工作負(fù)載主要兩種讀操作組成,一是大規(guī)模的流式讀取,二是小規(guī)模的隨機(jī)讀取。
大規(guī)模流式讀取通常是一次性讀取1MB以上的數(shù)據(jù)。
小規(guī)模的隨機(jī)讀取通常是讀幾個(gè)KB的數(shù)據(jù),為了提升性能,會(huì)把一系列的讀取操作排序后,按順序讀取,節(jié)省時(shí)間。
寫操作通常是以追加的形式出現(xiàn)。這個(gè)文件系統(tǒng)也可以支持小規(guī)模的隨機(jī)寫入,但效率低下。
通常會(huì)有數(shù)百個(gè)寫操作同時(shí)需要處理,這就需要使用最小的同步開銷,來實(shí)現(xiàn)原子的多路追加數(shù)據(jù)操作。
架構(gòu)
一個(gè)GFS集群包含一個(gè)單獨(dú)的Master節(jié)點(diǎn)和多臺(tái)Chunk服務(wù)器。
架構(gòu)中主要有三者,GFS master、GFS chunkserver、GFS client。
初始化:Master會(huì)給每個(gè)chunk分配一個(gè)唯一且不變的64位標(biāo)識(shí)。
讀取:客戶端將(文件名,字節(jié)偏移量,Chunk的大小)=> Chunk 索引(index)。將多個(gè)信息(文件名,Chunk索引)發(fā)給Master。Master把多個(gè)信息(Chunk標(biāo)識(shí),副本位置)發(fā)給客戶端??蛻舳擞?#xff08;文件名,Chunk索引)作為key,(Chunk標(biāo)識(shí),副本位置)作為value來做緩存處理。
客戶端發(fā)送請(qǐng)求(Chunk表示,字節(jié)范圍)至一個(gè)最近的副本處。
其中Chunk的大小選擇了64MB,優(yōu)點(diǎn)有二,一是減少通訊的需求和成本,二是減少M(fèi)aster節(jié)點(diǎn)需要保存的的元數(shù)據(jù)的數(shù)量。缺點(diǎn)是,對(duì)于只占一個(gè)Chunk的小文件,容易成為熱點(diǎn),可以通過更多得副本和錯(cuò)開批處理對(duì)鞋系統(tǒng)程序的啟動(dòng)時(shí)間來解決這個(gè)問題。
元數(shù)據(jù)
內(nèi)存
Master節(jié)點(diǎn)是邏輯層面上的,Master服務(wù)器是物理層面上的。
Master服務(wù)器存儲(chǔ)三種元數(shù)據(jù):命名空間(文件和Chunk的)、映射關(guān)系(文件和Chunk)、每個(gè)Chunk副本的存放位置。
元數(shù)據(jù)保存在Master服務(wù)器的內(nèi)存中,日志(記錄前兩種元數(shù)據(jù))保存在本地磁盤,并且會(huì)被拷貝到其他Master服務(wù)器上。保存變更日志→更新Master服務(wù)器狀態(tài)→防止Master服務(wù)器崩潰導(dǎo)致數(shù)據(jù)不一致。
Chunk信息
Master服務(wù)器啟動(dòng)時(shí)或Chunk服務(wù)器薪加入時(shí),Master向每個(gè)Chunk服務(wù)器輪詢它們所存儲(chǔ)的Chunk信息,結(jié)合“心跳”來維持信息最新,并不會(huì)去維護(hù)一個(gè)Chunk信息的全局視圖。
Master服務(wù)器周期性掃描自己保存的狀態(tài)信息,用于垃圾收集、失效Chunk的拷貝、通過Chunk的遷移實(shí)現(xiàn)跨Chunk服務(wù)器的負(fù)載均衡、磁盤狀況統(tǒng)計(jì)等。
操作日志
操作日志是元數(shù)據(jù)唯一的持久化存儲(chǔ)記錄,是判斷同步操作順序的邏輯時(shí)間基線,所以它極其重要。必須確保日志文件完整,所先拷貝日志,再相應(yīng)客戶端的操作請(qǐng)求。為了提高效率,Master服務(wù)器會(huì)收集多個(gè)日志后批量處理拷貝。
日志每增長(zhǎng)一定量,會(huì)做一次checkpoint(將狀態(tài)數(shù)據(jù)寫入一個(gè)checkpoint文件,以壓縮B-樹存儲(chǔ)),災(zāi)難恢復(fù)時(shí),讀取checkpoint然后重演checkpoint之后的有個(gè)日志文件來恢復(fù)系統(tǒng)。
在創(chuàng)建checkpoint時(shí),Master服務(wù)器使用獨(dú)立的線程切換到新的日志文件和創(chuàng)建新的checkpoint文件,新的checkpoint文件將包括切換前所有的修改。