小議分布式文件系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
時(shí)間:2022-11-26 04:51:00
導(dǎo)語:小議分布式文件系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)一文來源于網(wǎng)友上傳,不代表本站觀點(diǎn),若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。
1、為了滿足文件存儲(chǔ)的新的要求(大容量、高可靠性、高可用性、高性能、動(dòng)態(tài)可擴(kuò)展性、易維護(hù)性),設(shè)計(jì)一種好的分布式文件系統(tǒng)越來越成為需要。分布式文件系統(tǒng)使得分布在多個(gè)節(jié)點(diǎn)上的文件如同位于網(wǎng)絡(luò)上的一個(gè)位置便于動(dòng)態(tài)擴(kuò)展和維護(hù)。
由于分布式文件系統(tǒng)中的數(shù)據(jù)可能來自很多不同的節(jié)點(diǎn),它所管理的數(shù)據(jù)也可能存儲(chǔ)在不同的節(jié)點(diǎn)上,這使得分布式文件系統(tǒng)中有很多設(shè)計(jì)和實(shí)現(xiàn)與本地文件系統(tǒng)存在巨大的差別。下面主要講述分布式文件系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)中所要面對和解決的主要問題[2]。
2軟件總體結(jié)構(gòu)
設(shè)計(jì)一個(gè)好的分布式文件系統(tǒng)是集群存儲(chǔ)的關(guān)鍵。我們設(shè)計(jì)的分布式文件系統(tǒng)通過統(tǒng)一名字空間管理使得分布在多個(gè)服務(wù)器上的文件如同位于網(wǎng)絡(luò)上的一個(gè)位置便于動(dòng)態(tài)擴(kuò)展和維護(hù)。
我們把整個(gè)系統(tǒng)主要?jiǎng)澐挚蛻舳伺c服務(wù)器端兩部分??蛻舳税∕VFS文件系統(tǒng),CC模塊(ClientCache),CNS模塊(ClientNameSpace),CN模塊(ClientNetwork)。服務(wù)器端包括SC模塊(ServerCache),SNS模塊(ServerNameSpace),SN模塊(ServerNetwork)。應(yīng)用程序的I/O請求首先送給MVFS文件系統(tǒng),MVFS文件系統(tǒng)根據(jù)文件句柄獲得本文件系統(tǒng)的全局文件名并把對文件的訪問轉(zhuǎn)換為對CC的訪問。CC收到請求之后,如果在Cache中沒有發(fā)現(xiàn)對應(yīng)的數(shù)據(jù),則將請求發(fā)給CNS層,CNS層根據(jù)全局文件名獲得該文件所在的服務(wù)器。最終通過CN層將命令發(fā)給服務(wù)器。服務(wù)器端SN層通過網(wǎng)絡(luò)接待命令后,將命令傳遞給SNS層負(fù)責(zé)將全局文件名轉(zhuǎn)化成本地的文件名,然后到SC層去查找,如果在Cache中找不到,最終會(huì)通過本地的文件系統(tǒng)完成對應(yīng)的I/O請求。整個(gè)系統(tǒng)的總體結(jié)構(gòu)如圖1所示。
在服務(wù)器端還有一個(gè)全局管理程序(心跳協(xié)議程序)。通過該心跳協(xié)議程序,所有的存儲(chǔ)節(jié)點(diǎn)的所共享出來的文件構(gòu)成了整個(gè)文件系統(tǒng)的單一的全局邏輯樹,從而可以讓客戶端見到唯一確定的全局邏輯樹。
圖1總體結(jié)構(gòu)圖
3關(guān)鍵技術(shù)
3.1統(tǒng)一名字空間的設(shè)計(jì)與實(shí)現(xiàn)
統(tǒng)一名字空間是指服務(wù)器上的每一個(gè)目錄和文件在我們的文件系統(tǒng)中都有一個(gè)統(tǒng)一的,唯一的名字。要實(shí)現(xiàn)統(tǒng)一名字空間就必須將服務(wù)器上的本地局部路徑與文件系統(tǒng)中的全局路徑一一對應(yīng),所以我們在每一個(gè)服務(wù)器上都存放了一個(gè)本地配置文件來記錄這個(gè)映射關(guān)系,每個(gè)服務(wù)器應(yīng)該根據(jù)所有服務(wù)器的本地配置文件而形成一個(gè)全局配置文件。本地配置文件的第一行主要記錄其版本號。后面的每一行是一條記錄,主要包括共享的全局路徑(客戶端看到的文件或目錄名)及物理路徑(服務(wù)器上存放的文件或目錄名)。
而全局配置文件的第一行主要記錄其版本號,服務(wù)器個(gè)數(shù)及每個(gè)服務(wù)器的IP,后面的每一行是一條記錄,與本地配置文件的記錄相識,只是多了一個(gè)服務(wù)器IP的信息
當(dāng)服務(wù)器啟動(dòng)后,首先根據(jù)自己的本地配置文件生成一個(gè)全局配置文件,然后廣播自己的本地配置文件。當(dāng)服務(wù)器接收到其他服務(wù)器的本地配置文件后,會(huì)根據(jù)這個(gè)本地配置文件修改全局配置文件。當(dāng)全局配置文件中不包括該服務(wù)器的信息即第一行沒有該服務(wù)器的IP,我們將全局配置文件的版本號改為兩個(gè)配置文件中版本號的稍大者,并修改服務(wù)器個(gè)數(shù),添加服務(wù)器的IP及對應(yīng)的記錄。如果全局配置文件中已包括該服務(wù)器的信息且全局配置文件的版本號大則不用修改,否則將全局配置文件的版本號修改成接收文件的版本號,并修改服務(wù)器個(gè)數(shù),添加服務(wù)器的IP及對應(yīng)的記錄。
當(dāng)修改了某個(gè)服務(wù)器的信息后,我們應(yīng)該將本地配置文件的版本號修改為全局配置文件的版本號加一,然后廣播自己的本地配置文件。
當(dāng)獲得一個(gè)全局配置文件后我們還應(yīng)將其轉(zhuǎn)化為一棵目錄文件樹使得在客戶端對一個(gè)文件或目錄的操作能夠轉(zhuǎn)換成對服務(wù)器上得操作。
為了方便查找,我們將全局配置文件轉(zhuǎn)化為一棵二叉樹,以全局配置文件中記錄的全局路徑來建樹。其中樹的根節(jié)點(diǎn)代表者全局路徑的根目錄。樹中節(jié)點(diǎn)的左兒子為其子目錄,右兒子與其在同一級目錄上。
3.2客戶端文件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
文件系統(tǒng)應(yīng)該提供一組服務(wù),使用戶能夠處理數(shù)據(jù),以執(zhí)行所需要的操作,包括創(chuàng)建文件、刪除文件、組織文件、讀/寫文件、控制文件的訪問權(quán)限等。
Linux通過VFS(虛擬文件系統(tǒng))為各種文件系統(tǒng)提供統(tǒng)一的接口。VFS是內(nèi)核中的一個(gè)軟件層次,負(fù)責(zé)處理所有與文件系統(tǒng)有關(guān)的系統(tǒng)調(diào)用。我們通過像VFS注冊了一種文件系統(tǒng)MVFS,使得用戶的請求可以由我們提供的函數(shù)來處理[3]。
MVFS文件系統(tǒng)中主要包括超級塊,目錄項(xiàng)和索引節(jié)點(diǎn)。MVFS文件系統(tǒng)的總體結(jié)構(gòu)如圖所示。
圖2MVFS文件系統(tǒng)的總體結(jié)構(gòu)
文件系統(tǒng)的超級塊主要記錄文件系統(tǒng)的數(shù)據(jù)塊大小,存放文件系統(tǒng)設(shè)備的設(shè)備號以及該文件系統(tǒng)根目錄的目錄項(xiàng)的指針,在MVFS文件系統(tǒng)中,我們在超級塊中還存放了要連接的服務(wù)器的IP和使用的用戶名和密碼。MVFS文件系統(tǒng)的目錄項(xiàng)描述文件系統(tǒng)中與某個(gè)文件索引節(jié)點(diǎn)相鏈接的一個(gè)目錄項(xiàng)(可以是文件,也可以是目錄),同時(shí)通過鏈表記錄了父目錄與它下面的子目錄和文件的關(guān)系。而索引節(jié)點(diǎn)記錄了關(guān)于這個(gè)目錄或文件的一些系統(tǒng)信息,比如文件的所有者,文件相關(guān)的一些權(quán)限記錄,關(guān)于文件的若干個(gè)時(shí)間戳。
要想訪問服務(wù)器上的目錄和文件,必須先掛載MVFS文件系統(tǒng)。當(dāng)掛載MVFS文件系統(tǒng)時(shí),我們的處理流程如圖3所示。
圖3MVFS掛載流程
在初始化超級塊,索引節(jié)點(diǎn)時(shí),需要將它們的成員函數(shù)賦值。MVFS文件系統(tǒng)主要通過將一些函數(shù)如對目錄的讀取以及對文件的創(chuàng)建和讀寫與它的索引節(jié)點(diǎn)關(guān)聯(lián),使得以后對該目錄或文件的操作都由這些函數(shù)來實(shí)現(xiàn)。
其中對目錄的讀取方法如圖所示:
圖3目錄的讀取流程
首先根據(jù)文件句柄獲得對應(yīng)的目錄項(xiàng)結(jié)構(gòu),而目錄項(xiàng)結(jié)構(gòu)存放了對應(yīng)的全局目錄名,因此可以得到對應(yīng)的全局目錄名。當(dāng)我們獲得了該目錄下的目錄名或文件名后,可以調(diào)用VFS提供的回調(diào)函數(shù)filldir。VFS會(huì)為這些目錄和文件分配目錄項(xiàng)結(jié)構(gòu),并將它們鏈接起來[4]。
對于文件的讀寫,首先根據(jù)文件句柄獲得對應(yīng)的目錄項(xiàng)結(jié)構(gòu),從目錄項(xiàng)結(jié)構(gòu)可以得到對應(yīng)的全局文件名。然后以全局文件名,緩沖區(qū),要讀的大小,文件偏移為參數(shù)向CC層發(fā)出讀或?qū)懳募?。?dāng)CC層的函數(shù)返回時(shí),要讀或?qū)懙臄?shù)據(jù)已在緩沖區(qū)里。
4性能測試
我們在相同環(huán)境下,客戶端和服務(wù)器均為P4PC平臺(tái),配置512MB的DDRRAM,通過千兆網(wǎng)連接,分布采用我們的分布式文件系統(tǒng)和網(wǎng)上鄰居,使用IOMETER對不同負(fù)載的讀請求進(jìn)行測試,具體的測試結(jié)果如圖4所示。從圖中可知,我們的分布式文件系統(tǒng)的讀性能要比網(wǎng)上鄰居好的多。
圖4網(wǎng)上鄰居和分布式文件系統(tǒng)的讀性能比較
5結(jié)束語
本文詳細(xì)介紹了分布式文件系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn),著重論述了實(shí)現(xiàn)過程中采用的關(guān)鍵技術(shù)。隨著對分布式文件系統(tǒng)的進(jìn)一步開發(fā),將會(huì)對系統(tǒng)的性能、擴(kuò)展性、可用性等方面進(jìn)行完善。