摘 要: 在對(duì)分布式文件系統(tǒng)可靠性、可用性以及可伸縮性進(jìn)行深入研究后,設(shè)計(jì)并實(shí)現(xiàn)了一套可伸縮的分布式文件系統(tǒng),針對(duì)當(dāng)前互聯(lián)網(wǎng)應(yīng)用中大部分圖片資源大小不超過(guò)100 KB的具體應(yīng)用場(chǎng)景,進(jìn)一步對(duì)設(shè)計(jì)的文件系統(tǒng)做出改進(jìn),確保文件系統(tǒng)在應(yīng)對(duì)海量小文件存儲(chǔ)、頻繁讀寫時(shí)具有良好的性能。
關(guān)鍵詞: 可伸縮性; 分布式系統(tǒng); 文件系統(tǒng); 小文件
中圖分類號(hào): TN911?34; TM417 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2016)19?0116?04
Abstract: The reliability, availability and scalability of the distributed file system are studied deeply. A set scalable distri?buted file system was designed and implemented. Since the size of most image resources in current Internet application is less than 100 KB, the designed file system was improved to ensure the file system performance while frequently storing, reading and writing the massive small files.
Keywords: scalability; distributed system; file system; small file
0 引 言
隨著互聯(lián)網(wǎng)的普及,數(shù)據(jù)資源中有很大一部分是以小文件形式存在的,海量小文件的存儲(chǔ)方式和備份方式顯得越來(lái)越重要。面對(duì)規(guī)模龐大,數(shù)目眾多的應(yīng)用文件,傳統(tǒng)的單臺(tái)文件服務(wù)器顯然已經(jīng)難以滿足用戶需求。單純的依靠增加硬盤個(gè)數(shù)來(lái)擴(kuò)展一個(gè)文件系統(tǒng)容量大小的方式,在這種應(yīng)用背景下變得無(wú)能為力[1]。將存儲(chǔ)和網(wǎng)絡(luò)結(jié)合起來(lái)成為一個(gè)必然的發(fā)展方向,新一代的基于網(wǎng)絡(luò)的分布式文件系統(tǒng)應(yīng)運(yùn)而生[2]。
1 系統(tǒng)的可伸縮架構(gòu)設(shè)計(jì)
1.1 系統(tǒng)設(shè)計(jì)目標(biāo)
本系統(tǒng)的設(shè)計(jì)目標(biāo)重點(diǎn)圍繞高可伸縮性,高可伸縮性代表的是一種彈性,當(dāng)文件系統(tǒng)的容量不足,系統(tǒng)需要擴(kuò)展時(shí),軟件系統(tǒng)能夠通過(guò)較少的改動(dòng),甚至僅僅通過(guò)添加硬件設(shè)備,就能夠?qū)崿F(xiàn)整個(gè)軟件系統(tǒng)處理能力的線性增長(zhǎng)。
1.2 系統(tǒng)概述
根據(jù)微軟提出的系統(tǒng)優(yōu)化金字塔,設(shè)計(jì)優(yōu)化、代碼優(yōu)化、產(chǎn)品優(yōu)化、硬件優(yōu)化對(duì)整個(gè)系統(tǒng)的優(yōu)化影響依次遞減。由此可見(jiàn),位于金字塔底部的設(shè)計(jì)優(yōu)化對(duì)系統(tǒng)各種性能的影響最大。鑒于系統(tǒng)的設(shè)計(jì)目標(biāo),本文分布式文件系統(tǒng)將構(gòu)筑在高速局域網(wǎng)連接的普通服務(wù)器集群上,以期達(dá)到利用廉價(jià)的服務(wù)器集群實(shí)現(xiàn)高可伸縮的軟件系統(tǒng)的目的。本系統(tǒng)采用主從架構(gòu),系統(tǒng)內(nèi)節(jié)點(diǎn)分為NameNode和DataNode。對(duì)于元數(shù)據(jù)管理采用集中式管理方法,將元數(shù)據(jù)集中于NameNode中進(jìn)行管理,DataNode為文件的實(shí)際存儲(chǔ)節(jié)點(diǎn)[3]。
1.3 可伸縮系統(tǒng)架構(gòu)
1.3.1 系統(tǒng)整體架構(gòu)
為了避免由于元數(shù)據(jù)的集中管理而造成單點(diǎn)故障隱患,NameNode采用主從熱備的方式。系統(tǒng)對(duì)外提供命名服務(wù)的默認(rèn)節(jié)點(diǎn)為主命名節(jié)點(diǎn),另一臺(tái)為備命名節(jié)點(diǎn),兩個(gè)節(jié)點(diǎn)之間互相進(jìn)行熱備,并向系統(tǒng)監(jiān)控服務(wù)器定時(shí)發(fā)送心跳。當(dāng)監(jiān)控服務(wù)器超時(shí)沒(méi)有接收到任意一臺(tái)NameNode的心跳信息時(shí),即表示該節(jié)點(diǎn)失效,發(fā)出報(bào)警。如果失效的節(jié)點(diǎn)為主命名節(jié)點(diǎn),則將對(duì)外服務(wù)切換到備命名節(jié)點(diǎn)上。待原主命名節(jié)點(diǎn)恢復(fù)后,為了讓系統(tǒng)實(shí)現(xiàn)穩(wěn)定的服務(wù),系統(tǒng)不再對(duì)外服務(wù)切換回原主命名節(jié)點(diǎn),即主備角色發(fā)生互換。
當(dāng)系統(tǒng)經(jīng)過(guò)長(zhǎng)期運(yùn)行發(fā)生容量不足需要擴(kuò)容時(shí),由于DataNode和NameNode之間使用心跳機(jī)制進(jìn)行通信,當(dāng)系統(tǒng)擴(kuò)容時(shí),將新加入的DataNode部署完應(yīng)用程序并啟動(dòng)后,新加入的DataNode便會(huì)開(kāi)始向NameNode發(fā)送心跳信息匯報(bào)自己的工作狀態(tài),NameNode接收到心跳后,將新加入的DataNode并入當(dāng)前運(yùn)行的系統(tǒng),并根據(jù)系統(tǒng)的負(fù)載均衡策略將部分寫文件請(qǐng)求分發(fā)到新的存儲(chǔ)節(jié)點(diǎn)上。通過(guò)上述方法,系統(tǒng)完成了平滑擴(kuò)容,擴(kuò)容過(guò)程中系統(tǒng)不需要停機(jī),不會(huì)對(duì)外終止服務(wù),系統(tǒng)擁有較好的可伸縮性。
1.3.2 DataNode節(jié)點(diǎn)內(nèi)部結(jié)構(gòu)
DataNode為系統(tǒng)中文件數(shù)據(jù)實(shí)際的存儲(chǔ)節(jié)點(diǎn),負(fù)責(zé)實(shí)際數(shù)據(jù)的存儲(chǔ)和讀寫。本文設(shè)計(jì)在存儲(chǔ)節(jié)點(diǎn)的機(jī)器上,針對(duì)每塊磁盤創(chuàng)建一個(gè)DataNode實(shí)例,單獨(dú)管理此塊磁盤,不僅能使單塊磁盤的讀寫性能達(dá)到最優(yōu),同時(shí)也能極大地降低單塊磁盤故障對(duì)系統(tǒng)帶來(lái)的影響[4]。
DataNode將預(yù)先在物理磁盤上創(chuàng)建的文件塊分成主塊(MainBlock)和擴(kuò)展塊(ExtendBlock)兩類。系統(tǒng)在實(shí)際讀寫文件時(shí)以邏輯塊(LogicBlock)為單位。根據(jù)不同的系統(tǒng)需求,可以配置不同的主塊和擴(kuò)展塊大小,主塊和擴(kuò)展塊的比例也可以進(jìn)行配置。在DataNode中,所有的塊操作和文件讀寫都以邏輯塊為單位,一個(gè)邏輯塊包含一個(gè)主塊和若干個(gè)擴(kuò)展塊,并且會(huì)對(duì)應(yīng)一個(gè)塊內(nèi)索引文件,用來(lái)存儲(chǔ)邏輯塊的元數(shù)據(jù),包括塊中包含的文件數(shù)量,全部文件的索引ID以及其在塊內(nèi)的起始偏移量、文件長(zhǎng)度等[5]。由于硬盤的讀寫速度遠(yuǎn)不及內(nèi)存的讀寫速度,DataNode在啟動(dòng)時(shí)會(huì)將所有的索引文件導(dǎo)入到內(nèi)存中,在運(yùn)行過(guò)程中系統(tǒng)也會(huì)將索引文件的修改定期的持久化到磁盤上,以減少DataNode短時(shí)間失效對(duì)該節(jié)點(diǎn)數(shù)據(jù)安全帶來(lái)的影響。
1.3.3 NameNode節(jié)點(diǎn)內(nèi)部結(jié)構(gòu)
NameNode主要負(fù)責(zé)管理和維護(hù)元數(shù)據(jù),即邏輯塊的相關(guān)信息,包括邏輯塊的創(chuàng)建、備份、負(fù)載均衡、刪除等。同時(shí),NameNode還負(fù)責(zé)接收DataNode的心跳包,并根據(jù)心跳維護(hù)系統(tǒng)內(nèi)DataNode的加入和退出[6]。
將NameNode對(duì)邏輯塊的管理設(shè)計(jì)成邏輯塊組的形式。NameNode會(huì)為每一個(gè)邏輯塊組進(jìn)行編號(hào),即邏輯塊組ID。這個(gè)編號(hào)由NameNode負(fù)責(zé)分配和存儲(chǔ)。每一個(gè)邏輯塊都?xì)w屬于一個(gè)邏輯塊組,每一個(gè)邏輯塊組都會(huì)有一個(gè)全局惟一的邏輯塊組ID,并對(duì)應(yīng)多個(gè)實(shí)際DataNode中的邏輯塊。寫文件時(shí),系統(tǒng)會(huì)通過(guò)異步的方式將待寫入文件寫入某個(gè)邏輯塊組ID所對(duì)應(yīng)的全部邏輯塊后才會(huì)被系統(tǒng)認(rèn)為寫入成功。而在讀取文件時(shí),邏輯塊組ID對(duì)應(yīng)的全部DataNode上的邏輯塊可以提供并發(fā)讀操作,因而提高了讀性能。在對(duì)邏輯塊加鎖方面,系統(tǒng)會(huì)將鎖分為讀、寫鎖兩種:寫鎖只允許有一個(gè)線程進(jìn)行寫操作;而讀鎖則允許有多個(gè)線程進(jìn)行讀操作。因此在邏輯塊的大小配置方面可能會(huì)影響到系統(tǒng)性能。邏輯塊越大,則邏輯塊的總數(shù)越小,當(dāng)寫操作較多時(shí),會(huì)出現(xiàn)較多的邏輯塊被加寫鎖,導(dǎo)致可寫塊不足,影響系統(tǒng)的讀文件性能。邏輯塊越小,則邏輯塊的總數(shù)越大,導(dǎo)致邏輯塊的元數(shù)據(jù)增加,增加NameNode的管理壓力。
1.3.4 平滑擴(kuò)容方法
系統(tǒng)是否能夠在運(yùn)行中實(shí)現(xiàn)系統(tǒng)的平滑擴(kuò)容是衡量系統(tǒng)是否具有良好可伸縮性的一個(gè)重要指標(biāo)。系統(tǒng)在擴(kuò)容時(shí),首先將待加入的DataNode節(jié)點(diǎn)磁盤創(chuàng)建文件塊,然后在進(jìn)行相應(yīng)配置的部署后啟動(dòng),新節(jié)點(diǎn)開(kāi)始定時(shí)向NameNode發(fā)送心跳匯報(bào),NameNode在接到心跳匯報(bào)后將新節(jié)點(diǎn)創(chuàng)建的邏輯塊加入元數(shù)據(jù)管理中,即完成了在不停服務(wù)的條件下的整個(gè)平滑擴(kuò)容過(guò)程[7]。
2 海量小文件的存儲(chǔ)與讀寫方法設(shè)計(jì)
2.1 元數(shù)據(jù)管理方法
DataNode預(yù)先將實(shí)際用于存儲(chǔ)的磁盤空間創(chuàng)建成一系列大小相等的空文件,稱為文件塊(Block),實(shí)際文件存儲(chǔ)于這些預(yù)先創(chuàng)建的文件中,這樣不僅能夠減少操作系統(tǒng)的文件系統(tǒng)在讀寫過(guò)程中造成的數(shù)據(jù)碎片帶來(lái)的性能損失,而且能夠極大地減少元數(shù)據(jù)。NameNode存儲(chǔ)的元數(shù)據(jù)不再為實(shí)際存儲(chǔ)文件的元數(shù)據(jù),而是DataNode預(yù)先建立的文件,如此能夠極大地降低所需存儲(chǔ)的元數(shù)據(jù)總大小[8]。預(yù)先創(chuàng)建的文件塊大小默認(rèn)設(shè)置為64 MB,當(dāng)一個(gè)文件元數(shù)據(jù)大小同樣為150 B時(shí),1 PB磁盤所需存儲(chǔ)元數(shù)據(jù)總大小不到3 GB,極大地降低了元數(shù)據(jù)存儲(chǔ)對(duì)NameNode的內(nèi)存壓力,提升了系統(tǒng)存儲(chǔ)海量小文件的能力。
2.2 模型理論基礎(chǔ)及假設(shè)
NameNode并沒(méi)有保存存儲(chǔ)文件的元數(shù)據(jù),而僅保存了邏輯塊的元數(shù)據(jù)。同時(shí),實(shí)現(xiàn)的分布式文件系統(tǒng)應(yīng)用場(chǎng)景對(duì)文件名并不敏感。因此,將存儲(chǔ)文件的元數(shù)據(jù)通過(guò)編碼的方式表示在文件名主名部分,擴(kuò)展名不變,如圖1所示。
存儲(chǔ)文件的元數(shù)據(jù)主要包括該文件存儲(chǔ)的邏輯塊組ID以及該文件在塊內(nèi)索引的File ID。由于邏輯塊的大小的限制,F(xiàn)ile ID的范圍是有限的??梢源致怨浪悖現(xiàn)ile ID是不會(huì)超過(guò)230的。因此,F(xiàn)ile ID可以用30位二進(jìn)制數(shù)進(jìn)行表示。將這30位二進(jìn)制數(shù)拆分成6組長(zhǎng)度為5的二進(jìn)制數(shù),然后轉(zhuǎn)換成6個(gè)十進(jìn)制數(shù),并根據(jù)Base32的對(duì)應(yīng)關(guān)系,將其轉(zhuǎn)換成長(zhǎng)度為6的Base32編碼。同理,可以將邏輯塊組ID轉(zhuǎn)化成Base32編碼方式。但由于邏輯塊組ID沒(méi)有范圍,因此邏輯塊組ID編碼后的結(jié)果長(zhǎng)度并不固定。通過(guò)計(jì)算可以得知,當(dāng)塊大小為64 MB時(shí),1 PB的磁盤大約會(huì)分割為16M(16×1 024×1 024)個(gè)文件塊,即224個(gè)。此時(shí)邏輯塊組ID的編碼長(zhǎng)度不超過(guò)5,即當(dāng)系統(tǒng)容量達(dá)到1 PB時(shí),文件名主名長(zhǎng)度部分不超過(guò)9。
2.3 文件寫入方法
(1) 寫入新文件方法
系統(tǒng)的寫入新文件方法如圖2所示。用戶向系統(tǒng)發(fā)起寫入請(qǐng)求時(shí),NameNode會(huì)返回給用戶一個(gè)可寫塊,并對(duì)該可寫塊加寫鎖,其余用戶不能對(duì)該塊進(jìn)行讀寫訪問(wèn)。待文件寫入完成后,NameNode會(huì)將該塊的寫鎖取消,其余用戶才能訪問(wèn)該塊。
(2) 更新文件方法
更新必須在原塊上進(jìn)行,但是如果更新后的文件大于更新前的文件,且原來(lái)的塊空間又已經(jīng)不足時(shí),系統(tǒng)將會(huì)發(fā)生錯(cuò)誤。通過(guò)擴(kuò)展塊解決此問(wèn)題。當(dāng)更新后的文件數(shù)據(jù)大小小于更新前時(shí),直接對(duì)文件進(jìn)行覆蓋。而當(dāng)更新后的文件數(shù)據(jù)大小大于更新前時(shí),DataNode會(huì)先在原塊上更新,然后將多余部分寫入到擴(kuò)展塊中。
(3) 數(shù)據(jù)一致性
系統(tǒng)使用讀寫鎖控制邏輯塊的讀寫。當(dāng)邏輯塊被加讀鎖時(shí),其余用戶仍然可以對(duì)其發(fā)生讀訪問(wèn),但如果邏輯塊被加寫鎖,說(shuō)明該塊可能正在發(fā)生修改,其余用戶無(wú)法對(duì)其發(fā)起任何訪問(wèn)請(qǐng)求。同時(shí),在設(shè)計(jì)邏輯塊的元數(shù)據(jù)時(shí),設(shè)置了一個(gè)字段為該邏輯塊的版本號(hào),并結(jié)合該塊的鎖信息,對(duì)版本號(hào)設(shè)置了一個(gè)有效期。在NameNode返回用戶可寫塊ID時(shí),會(huì)同時(shí)返回用戶該塊的版本號(hào)以及當(dāng)前版本號(hào)的有效期。在用戶寫入數(shù)據(jù)前,DataNode會(huì)先驗(yàn)證版本號(hào)是否正確,以及是否過(guò)期,只有當(dāng)版本號(hào)合法時(shí),DataNode才會(huì)將文件數(shù)據(jù)寫入到該塊中。寫入完成之后,版本號(hào)會(huì)進(jìn)行遞增,并隨寫入狀態(tài)一起匯報(bào)。只有當(dāng)NameNode收到的各DataNode版本號(hào)均沒(méi)有過(guò)期失效,且一致符合預(yù)期時(shí),文件才會(huì)被認(rèn)為寫入成功。
2.4 文件讀取方法
在讀取文件時(shí),系統(tǒng)會(huì)對(duì)相應(yīng)的邏輯塊加讀鎖,其余用戶能夠?qū)υ搲K發(fā)起讀訪問(wèn),但不能向其發(fā)起寫訪問(wèn)。文件讀取方法如圖3所示。
2.5 文件備份方法
存儲(chǔ)節(jié)點(diǎn)對(duì)邏輯塊的管理方法類似RAID10機(jī)制,但與之不同的是,單位存儲(chǔ)單元不是一整塊磁盤,而是一個(gè)邏輯塊。這樣的設(shè)計(jì)能夠極大地提高系統(tǒng)的可伸縮性[9]。因?yàn)闊o(wú)論加入或退出的節(jié)點(diǎn)磁盤空間多大,都是以邏輯塊為單位對(duì)存儲(chǔ)數(shù)據(jù)資源進(jìn)行組織,只是邏輯塊的多少不同。在系統(tǒng)擴(kuò)展過(guò)程中,容量擴(kuò)充的本質(zhì)是邏輯塊的擴(kuò)充,而與擴(kuò)充的硬件設(shè)備的物理屬性無(wú)關(guān),系統(tǒng)在可伸縮性方面性能較好。
2.6 文件刪除方法
當(dāng)用戶刪除文件時(shí),系統(tǒng)并不會(huì)立即刪除該文件對(duì)應(yīng)的塊內(nèi)實(shí)際數(shù)據(jù)并整理塊內(nèi)數(shù)據(jù)和塊內(nèi)索引,而是在元數(shù)據(jù)中對(duì)該文件設(shè)置一個(gè)標(biāo)志位,標(biāo)識(shí)該文件的刪除狀態(tài)。雖然通過(guò)設(shè)置刪除狀態(tài)的方法會(huì)產(chǎn)生塊內(nèi)碎片,但由于分布式文件系統(tǒng)的容量較大,且在本文所設(shè)計(jì)系統(tǒng)的應(yīng)用背景中刪除行為較少,因此每天產(chǎn)生的碎片并不會(huì)過(guò)多,對(duì)系統(tǒng)不會(huì)造成較大的影響。對(duì)于刪除行為所產(chǎn)生的碎片,系統(tǒng)可以定時(shí)對(duì)碎片占其所在文件塊的比例超過(guò)一定閾值的塊進(jìn)行整理,并且可以將定時(shí)設(shè)置在午夜,即用戶訪問(wèn)流量最小時(shí),使整理塊內(nèi)碎片對(duì)系統(tǒng)的影響降到最低。
3 系統(tǒng)應(yīng)用與測(cè)試
3.1 系統(tǒng)應(yīng)用介紹
分布式文件系統(tǒng)將應(yīng)用于某社交網(wǎng)絡(luò)產(chǎn)品,該產(chǎn)品一項(xiàng)重要的功能是分享美圖。因此,該產(chǎn)品的服務(wù)器端將存儲(chǔ)大量用戶上傳的圖片數(shù)據(jù),并且這些圖片數(shù)據(jù)大部分都是一次寫入,少量刪除,多次讀取。為了節(jié)約服務(wù)器帶寬和用戶流量,在該產(chǎn)品內(nèi),用戶上傳的圖片大多不超過(guò)100 KB,但數(shù)量龐大,并且隨著時(shí)間的發(fā)展,用戶的增長(zhǎng),未來(lái)服務(wù)器端將會(huì)積攢出大量的小文件。為了解決這些文件在服務(wù)器端的存儲(chǔ)問(wèn)題,本文所設(shè)計(jì)和實(shí)現(xiàn)的分布式文件系統(tǒng)作為一個(gè)服務(wù)端組件為服務(wù)端提供實(shí)時(shí)的、透明的文件讀寫服務(wù)。
3.2 讀寫性能測(cè)試
(1) 面對(duì)不同尺寸文件的讀寫性能
使用程序生成了大量?jī)?nèi)容不同尺寸不同的文件。由于在正常情況下,互聯(lián)網(wǎng)中的圖片大小都不超過(guò)10 MB,因此生成文件大小分別為1 KB,10 KB,100 KB,1 MB,10 MB,50 MB,每種大小的文件各生成1 000個(gè)。使用這些文件對(duì)系統(tǒng)進(jìn)行了讀寫性能測(cè)試,統(tǒng)計(jì)計(jì)算系統(tǒng)的讀寫平均響應(yīng)時(shí)間,結(jié)果見(jiàn)表1。
表1統(tǒng)計(jì)了大小為1 KB~50 MB的文件在系統(tǒng)上的讀寫性能。平均讀寫響應(yīng)時(shí)間基本成線性增長(zhǎng),但在文件較小時(shí)平均讀寫響應(yīng)時(shí)間相差不多。經(jīng)過(guò)分析,說(shuō)明在文件較小時(shí),系統(tǒng)花費(fèi)時(shí)間主要在磁盤讀寫上,在硬件方面可以通過(guò)更換SSD磁盤在一定程度上提高系統(tǒng)的性能。而在文件較大時(shí),系統(tǒng)花費(fèi)時(shí)間主要在網(wǎng)絡(luò)I/O上,在硬件方面可以通過(guò)將網(wǎng)卡或交換機(jī)更換至千兆或萬(wàn)兆帶寬提高系統(tǒng)性能。
(2) 使用不同副本數(shù)量策略的文件讀寫性能
系統(tǒng)為每個(gè)文件創(chuàng)建副本能夠有效地提高數(shù)據(jù)的安全性,由于創(chuàng)建副本會(huì)增加系統(tǒng)資源消耗,因此使用會(huì)對(duì)系統(tǒng)性能產(chǎn)生一定影響。使用程序生成了大量?jī)?nèi)容不同的小文件,平均大小為100 KB。使用這些文件分別對(duì)系統(tǒng)針對(duì)副本數(shù)量為1~3的情況進(jìn)行讀寫測(cè)試,分別執(zhí)行寫操作和讀操作10 000次,統(tǒng)計(jì)計(jì)算系統(tǒng)的讀寫平均響應(yīng)時(shí)間,結(jié)果見(jiàn)表2。
表2統(tǒng)計(jì)對(duì)比了系統(tǒng)使用不同副本數(shù)時(shí)在文件讀寫性能上的測(cè)試結(jié)果。通過(guò)對(duì)比可以發(fā)現(xiàn),如果系統(tǒng)使用副本策略,在文件讀取方面,平均響應(yīng)時(shí)間基本相同。而在文件寫入方面,如果系統(tǒng)使用副本策略,平均響應(yīng)時(shí)間要大于不使用副本策略的情況。經(jīng)過(guò)分析,在使用副本策略情況下時(shí),增加的延遲主要為寫入副本過(guò)程花費(fèi)的時(shí)間,其中包括網(wǎng)絡(luò)I/O,磁盤I/O,以及校驗(yàn)過(guò)程。但由于推送寫入副本過(guò)程是異步的,因此副本數(shù)為2和副本數(shù)為3,對(duì)系統(tǒng)的寫入平均響應(yīng)時(shí)間影響較小。
(3) 面向海量小文件的讀寫性能測(cè)試
使用程序生成了大量?jī)?nèi)容不同的小文件,平均大小為100 KB,系統(tǒng)保存副本數(shù)為3。使用這些文件分別對(duì)系統(tǒng)和HDFS進(jìn)行讀寫性能測(cè)試,其中讀寫操作比例為5[∶]1,共測(cè)試12萬(wàn)次,統(tǒng)計(jì)計(jì)算讀寫平均響應(yīng)時(shí)間。通過(guò)表3中的對(duì)比數(shù)據(jù)可以看出,本文實(shí)現(xiàn)系統(tǒng)在小文件的讀寫上相較于HDFS具有更好的性能,平均響應(yīng)時(shí)間小于HDFS響應(yīng)時(shí)間的20%。
4 結(jié) 論
本文在深入研究分布式文件系統(tǒng)的可伸縮性相關(guān)理論后,設(shè)計(jì)并實(shí)現(xiàn)了一套可伸縮的分布式海量文件存儲(chǔ)系統(tǒng)。針對(duì)當(dāng)前互聯(lián)網(wǎng)中大部分資源文件尺寸小、規(guī)模大的特點(diǎn),進(jìn)一步優(yōu)化了分布式文件系統(tǒng),確保了在實(shí)際應(yīng)用中的可伸縮性與小文件的存儲(chǔ)能力和讀寫效率。
根據(jù)本文系統(tǒng)可伸縮架構(gòu)設(shè)計(jì)和海量小文件的存儲(chǔ)與讀寫方法,本文設(shè)計(jì)完成了一套分布式文件存儲(chǔ)系統(tǒng)。從理論上完成了可伸縮文件系統(tǒng)的設(shè)計(jì);在實(shí)踐中實(shí)現(xiàn)并驗(yàn)證了該文件系統(tǒng)的有效性。并針對(duì)海量小文件存儲(chǔ)和讀寫的特定應(yīng)用場(chǎng)景進(jìn)行了相應(yīng)的性能優(yōu)化。
參考文獻(xiàn)
[1] 周大水,馬紹漢.RAID1的實(shí)現(xiàn)策略及性能研究[J].計(jì)算機(jī)研究與發(fā)展,1997,34(2):137?142.
[2] 楊華南,金海.RAID10:高I/O性能和高可靠性的完美結(jié)合[J].小型微型計(jì)算機(jī)系統(tǒng),1998,19(8):63?66.
[3] 周江,王偉平,孟丹,等.面向大數(shù)據(jù)分析的分布式文件系統(tǒng)關(guān)鍵技術(shù)[J].計(jì)算機(jī)研究與發(fā)展,2014,51(2):382?394.
[4] 尹向東,楊杰,屈長(zhǎng)青.云計(jì)算環(huán)境下分布式文件系統(tǒng)的負(fù)載平衡研究[J].計(jì)算機(jī)科學(xué),2014(3):141?144.
[5] 程付超,苗放,陳墾.自適應(yīng)的分布式文件系統(tǒng)元數(shù)據(jù)管理模型[J].計(jì)算機(jī)工程與設(shè)計(jì),2014,35(3):867?874.
[6] 趙鐵柱,袁華強(qiáng).分布式文件系統(tǒng)性能研究[J].東莞理工學(xué)院學(xué)報(bào),2014,21(1):20?24.
[7] 羅天鑫,陳長(zhǎng)慶,蔣帥.RAID5磁盤陣列數(shù)據(jù)安全對(duì)策分析[J].青春歲月,2012(20):423.
[8] 王赟.磁盤陣列的數(shù)據(jù)安全與數(shù)據(jù)修復(fù)分析[J].數(shù)字技術(shù)與應(yīng)用,2012(1):186.
[9] 謝斌,高揚(yáng).Linux高可用集群心跳機(jī)制研究[J].計(jì)算機(jī)工程與應(yīng)用,2004,40(1):65?67.