Google文件系統(tǒng)(Google File System,GFS)是一個(gè)大型的分布式文件系統(tǒng)。它為Google云計(jì)算提供海量存儲(chǔ),并且與Chubby、MapReduce以及Bigtable等技術(shù)結(jié)合十分緊密,處于所有核心技術(shù)的底層。由于GFS并不是一個(gè)開源的系統(tǒng),我們僅僅能從Google公布的技術(shù)文檔來獲得一點(diǎn)了解,而無法進(jìn)行深入的研究。
當(dāng)前主流分布式文件系統(tǒng)有RedHat的GFS[3](Global File System)、IBM的GPFS[4]、Sun的Lustre[5]等。這些系統(tǒng)通常用于高性能計(jì)算或大型數(shù)據(jù)中心,對硬件設(shè)施條件要求較高。以Lustre文件系統(tǒng)為例,它只對元數(shù)據(jù)管理器MDS提供容錯(cuò)解決方案,而對于具體的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)OST來說,則依賴其自身來解決容錯(cuò)的問題。例如,Lustre推薦OST節(jié)點(diǎn)采用RAID技術(shù)或SAN存儲(chǔ)區(qū)域網(wǎng)來容錯(cuò),但由于Lustre自身不能提供數(shù)據(jù)存儲(chǔ)的容錯(cuò),一旦OST發(fā)生故障就無法恢復(fù),因此對OST的穩(wěn)定性就提出了相當(dāng)高的要求,從而大大增加了存儲(chǔ)的成本,而且成本會(huì)隨著規(guī)模的擴(kuò)大線性增長。
正如李開復(fù)所說的那樣,創(chuàng)新固然重要,但有用的創(chuàng)新更重要。創(chuàng)新的價(jià)值,取決于一項(xiàng)創(chuàng)新在新穎、有用和可行性這三個(gè)方面的綜合表現(xiàn)。Google GFS的新穎之處并不在于它采用了多么令人驚訝的技術(shù),而在于它采用廉價(jià)的商用機(jī)器構(gòu)建分布式文件系統(tǒng),同時(shí)將GFS的設(shè)計(jì)與Google應(yīng)用的特點(diǎn)緊密結(jié)合,并簡化其實(shí)現(xiàn),使之可行,最終達(dá)到創(chuàng)意新穎、有用、可行的完美組合。GFS使用廉價(jià)的商用機(jī)器構(gòu)建分布式文件系統(tǒng),將容錯(cuò)的任務(wù)交由文件系統(tǒng)來完成,利用軟件的方法解決系統(tǒng)可靠性問題,這樣可以使得存儲(chǔ)的成本成倍下降。由于GFS中服務(wù)器數(shù)目眾多,在GFS中服務(wù)器死機(jī)是經(jīng)常發(fā)生的事情,甚至都不應(yīng)當(dāng)將其視為異?,F(xiàn)象,那么如何在頻繁的故障中確保數(shù)據(jù)存儲(chǔ)的安全、保證提供不間斷的數(shù)據(jù)存儲(chǔ)服務(wù)是GFS最核心的問題。GFS的精彩在于它采用了多種方法,從多個(gè)角度,使用不同的容錯(cuò)措施來確保整個(gè)系統(tǒng)的可靠性。
2.1.1 系統(tǒng)架構(gòu)
GFS的系統(tǒng)架構(gòu)如圖2-1[1]所示。GFS將整個(gè)系統(tǒng)的節(jié)點(diǎn)分為三類角色:Client(客戶端)、Master(主服務(wù)器)和Chunk Server(數(shù)據(jù)塊服務(wù)器)。Client是GFS提供給應(yīng)用程序的訪問接口,它是一組專用接口,不遵守POSIX規(guī)范,以庫文件的形式提供。應(yīng)用程序直接調(diào)用這些庫函數(shù),并與該庫鏈接在一起。Master是GFS的管理節(jié)點(diǎn),在邏輯上只有一個(gè),它保存系統(tǒng)的元數(shù)據(jù),負(fù)責(zé)整個(gè)文件系統(tǒng)的管理,是GFS文件系統(tǒng)中的“大腦”。Chunk Server負(fù)責(zé)具體的存儲(chǔ)工作。數(shù)據(jù)以文件的形式存儲(chǔ)在Chunk Server上,Chunk Server的個(gè)數(shù)可以有多個(gè),它的數(shù)目直接決定了GFS的規(guī)模。GFS將文件按照固定大小進(jìn)行分塊,默認(rèn)是64MB,每一塊稱為一個(gè)Chunk(數(shù)據(jù)塊),每個(gè)Chunk都有一個(gè)對應(yīng)的索引號(Index)。
圖2-1 GFS體系結(jié)構(gòu)
客戶端在訪問GFS時(shí),首先訪問Master節(jié)點(diǎn),獲取將要與之進(jìn)行交互的Chunk Server信息,然后直接訪問這些Chunk Server完成數(shù)據(jù)存取。GFS的這種設(shè)計(jì)方法實(shí)現(xiàn)了控制流和數(shù)據(jù)流的分離。Client與Master之間只有控制流,而無數(shù)據(jù)流,這樣就極大地降低了Master的負(fù)載,使之不成為系統(tǒng)性能的一個(gè)瓶頸。Client與Chunk Server之間直接傳輸數(shù)據(jù)流,同時(shí)由于文件被分成多個(gè)Chunk進(jìn)行分布式存儲(chǔ),Client可以同時(shí)訪問多個(gè)Chunk Server,從而使得整個(gè)系統(tǒng)的I/O高度并行,系統(tǒng)整體性能得到提高。