本發(fā)明涉及分布式文件系統(tǒng)中的小文件存儲(chǔ)方法
技術(shù)領(lǐng)域:
,特別涉及一種性能優(yōu)化的小文件存儲(chǔ)訪問(wèn)的系統(tǒng)及方法。
背景技術(shù):
:隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,互聯(lián)網(wǎng)上充斥著各式各樣的服務(wù)和海量數(shù)據(jù)信息。為了能夠更好地組織和管理這些海量數(shù)據(jù),目前已提出了各種類型的分布式文件系統(tǒng)結(jié)構(gòu)。由于互聯(lián)網(wǎng)上的數(shù)據(jù)信息大多以高頻率的小文件形式表現(xiàn)出來(lái),而且在一般用戶的信息存儲(chǔ)訪問(wèn)中,對(duì)小文件的存儲(chǔ)訪問(wèn)較多,因此對(duì)互聯(lián)網(wǎng)上高頻率的小文件讀/寫性能的研究有重要的現(xiàn)實(shí)意義。在分布式文件系統(tǒng)中,對(duì)于大文件,往往采用條帶化技術(shù)對(duì)文件進(jìn)行切片,并分發(fā)在多個(gè)數(shù)據(jù)服務(wù)器上進(jìn)行存儲(chǔ),以此來(lái)提高用戶對(duì)文件訪問(wèn)的并發(fā)性,從而提高對(duì)大文件的訪問(wèn)性能。而對(duì)于小文件(≤64kb),由于其不利于條帶化,所以一般是采用將單個(gè)文件存儲(chǔ)在單個(gè)數(shù)據(jù)服務(wù)器上的策略。但是當(dāng)小文件的數(shù)量到達(dá)一定程度之后,對(duì)小文件的大量地重復(fù)訪問(wèn)將會(huì)給數(shù)據(jù)服務(wù)器帶來(lái)性能上的負(fù)擔(dān)及i/o瓶頸問(wèn)題。傳統(tǒng)的分布式文件系統(tǒng)在小文件管理上主要存在以下3個(gè)方面的問(wèn)題:1)由于小文件的訪問(wèn)頻率較高,需要多次訪問(wèn)磁盤,所以磁盤i/o的性能較低;2)因?yàn)槲募容^小,容易形成文件碎片而造成磁盤空間的浪費(fèi);3)為每個(gè)小文件請(qǐng)求建立一個(gè)連接時(shí)容易產(chǎn)生網(wǎng)絡(luò)時(shí)延。因此,優(yōu)化小文件的存儲(chǔ)訪問(wèn)性能至關(guān)重要。目前,小文件的優(yōu)化存儲(chǔ)訪問(wèn)研究主要是針對(duì)小文件訪問(wèn)i/o性能較低和容易形成文件碎片的問(wèn)題,但沒有考慮其他操作帶來(lái)的文件變動(dòng)問(wèn)題。其他相關(guān)的研究還包括對(duì)現(xiàn)有分布式文件系統(tǒng)的優(yōu)化研究和文件傳輸?shù)膬?yōu)化等。但該研究主要用于通用文件的傳輸,還不能最優(yōu)化小文件的傳輸性能。技術(shù)實(shí)現(xiàn)要素:為了解決現(xiàn)有技術(shù)的問(wèn)題,本發(fā)明提供了一種性能優(yōu)化的小文件存儲(chǔ)訪問(wèn)的系統(tǒng)及方法,其將邏輯上連續(xù)的數(shù)據(jù)盡可能存儲(chǔ)在物理磁盤的連續(xù)空間,使用cache充當(dāng)元數(shù)據(jù)服務(wù)器的角色并通過(guò)簡(jiǎn)化的文件信息節(jié)點(diǎn)提高cache利用率,提高了小文件訪問(wèn)性能;寫數(shù)據(jù)時(shí)聚合更新數(shù)據(jù)及其文件夾域中的相關(guān)數(shù)據(jù)為一次i/o請(qǐng)求寫入,減少了文件碎片數(shù)量,提高了存儲(chǔ)空間利用率;文件傳輸時(shí)利用局部性原理,提前發(fā)送批量的高訪問(wèn)率的小文件,降低了建立網(wǎng)絡(luò)連接開銷,提升了文件傳輸性能。本發(fā)明所采用的所述技術(shù)方案如下:一種性能優(yōu)化的小文件存儲(chǔ)訪問(wèn)的系統(tǒng),包括文件系統(tǒng)接口、文件夾域管理器、文件信息節(jié)點(diǎn)管理器、塊管理器和文件緩沖管理器五個(gè)模塊,所述的文件系統(tǒng)接口負(fù)責(zé)對(duì)其他模塊進(jìn)行封裝,向上層提供靈活統(tǒng)一的文件訪問(wèn)接口;所述的文件夾域管理器負(fù)責(zé)對(duì)文件夾域進(jìn)行管理,它負(fù)責(zé)管理同一個(gè)文件夾的各個(gè)文件信息節(jié)點(diǎn)和存儲(chǔ)在該文件夾中的所有文件數(shù)據(jù);所述的文件信息節(jié)點(diǎn)管理器負(fù)責(zé)對(duì)文件信息節(jié)點(diǎn)進(jìn)行理;所述的塊管理器負(fù)責(zé)對(duì)磁盤塊的空間管理,磁盤空間的開辟也是由此模塊負(fù)責(zé);所述的文件緩沖管理器負(fù)責(zé)對(duì)文件緩存的管理。在所述的文件信息節(jié)點(diǎn)管理器中,還設(shè)定了一個(gè)文件信息節(jié)點(diǎn)的緩存器,這個(gè)緩存器用于存放最近訪問(wèn)過(guò)的和高頻率訪問(wèn)的文件信息節(jié)點(diǎn)。一種性能優(yōu)化的小文件存儲(chǔ)訪問(wèn)的方法,包括:a、將磁盤空間劃分為多個(gè)塊,每個(gè)塊的大小為64kb,當(dāng)遇到的文件≤64kb時(shí),則所述的文件只能存放在單個(gè)塊中,不能跨越2個(gè)塊存放,每個(gè)文件數(shù)據(jù)都存放在連續(xù)的磁盤空間上;b、當(dāng)系統(tǒng)要讀取某一個(gè)文件時(shí),采用預(yù)讀的方式,將同一個(gè)塊中的文件一起讀取出來(lái);c、使用cache充當(dāng)元數(shù)據(jù)服務(wù)器的角色,在cache上保存文件信息節(jié)點(diǎn)的信息,并且通過(guò)簡(jiǎn)化的inode數(shù)據(jù)結(jié)構(gòu)使每個(gè)文件信息節(jié)點(diǎn)只保留文件的磁盤空間信息,所述的inode數(shù)據(jù)結(jié)構(gòu)如下表所示:file_idstartpositionlengthweightblock_idi_countlock其中,folder_id是文件標(biāo)識(shí)符;startpisition是文件在塊中的起始位置;length是文件的長(zhǎng)度;wright是文件權(quán)重;在本發(fā)明的系統(tǒng)中代表文件的訪問(wèn)頻率;block_id是文件所存放的塊的標(biāo)識(shí)符;i_clock是文件的訪問(wèn)計(jì)數(shù)器;lock是文件鎖;d、在寫操作時(shí)使用優(yōu)化方法來(lái)減少由于文件的刪除或者修改而導(dǎo)致的文件碎片;所述的優(yōu)化方法包括更新文件時(shí)的寫優(yōu)化方法和創(chuàng)建文件時(shí)的寫優(yōu)化方法;e、優(yōu)化文件傳輸?shù)姆椒?,具體是:對(duì)每個(gè)文件夾,根據(jù)文件夾里的每個(gè)文件的訪問(wèn)頻率形成一個(gè)排序列表;當(dāng)用戶訪問(wèn)該文件夾里的某個(gè)文件時(shí),系統(tǒng)會(huì)自動(dòng)地將這個(gè)排序列表里高訪問(wèn)頻率的文件一起發(fā)送過(guò)去。更新文件時(shí)的寫優(yōu)化方法具體包括:1)當(dāng)一個(gè)文件的數(shù)據(jù)發(fā)生更新時(shí),則從它開始,把存在于當(dāng)前塊中并處于它后面的文件,以及從那些零散塊取出文件,聚合在一起,作為單個(gè)i/o請(qǐng)求寫入磁盤,所述文件都是存放在cache中;2)如果在當(dāng)前塊中,存在沒有被放入cache中但是又處于被更新文件之后的文件,此時(shí),并不對(duì)其進(jìn)行聚合寫入;3)當(dāng)更新后的文件比較大,使得原來(lái)塊沒有足夠的空間存放更新后的文件時(shí),則系統(tǒng)會(huì)將此文件先讀出再選擇適合的塊進(jìn)行存放,系統(tǒng)找到一個(gè)合適的零散塊,并將更新文件同此零散塊中的文件一起聚合寫入,如果系統(tǒng)找不到合適的零散塊,則會(huì)從碎片中找到合適大小的空間進(jìn)行存放,再采用同樣的機(jī)制進(jìn)行聚合寫入。創(chuàng)建文件時(shí)的寫優(yōu)化方法具體包括:1)當(dāng)創(chuàng)建一個(gè)新的文件時(shí),首先在當(dāng)前文件夾域中尋找合適的零散塊,即剩余空間大小大于新文件大小的零散塊,并且此塊中的所有文件數(shù)據(jù)都在cache中;2)當(dāng)找不到合適的零散塊時(shí),系統(tǒng)將在此文件夾域中的碎片中尋找合適的碎片空間來(lái)寫入,在寫入之前,系統(tǒng)會(huì)同時(shí)將旁邊已經(jīng)緩存的文件一起聚合再寫入,如果還有足夠空間,還會(huì)從零散塊取出適當(dāng)?shù)奈募?lái)一起寫入;3)當(dāng)找不到合適的碎片來(lái)存放時(shí),則新建一個(gè)塊,再將新的文件數(shù)據(jù)寫入。方法e中,為了避免發(fā)送過(guò)多的文件,設(shè)定一個(gè)高訪問(wèn)頻率的閾值tf,并將所有訪問(wèn)頻率高于tf的文件順序分成多個(gè)組,每個(gè)組可能包含多個(gè)文件,組中所有文件大小之和不超過(guò)64kb,每當(dāng)用戶請(qǐng)求當(dāng)前文件夾中的一個(gè)文件時(shí),系統(tǒng)會(huì)按照順序?qū)⒁粋€(gè)組的文件一起發(fā)送過(guò)去,所述的tf的計(jì)算公式如下:tf=n×favg(n≥1);(1)fi為文件夾每個(gè)文件的訪問(wèn)頻率,m為當(dāng)前文件夾中的文件個(gè)數(shù),n由用戶自定義設(shè)置。針對(duì)當(dāng)前小文件存儲(chǔ)訪問(wèn)研究存在的局限性問(wèn)題,本發(fā)明從小文件存儲(chǔ)訪問(wèn)結(jié)構(gòu)和數(shù)據(jù)存儲(chǔ)布局出發(fā),提出了一種性能優(yōu)化的小文件存儲(chǔ)訪問(wèn)(smallfilestorageaccess,sfsa)策略.在sfsa系統(tǒng)設(shè)計(jì)中,首先提出了一種優(yōu)化的小文件存儲(chǔ)結(jié)構(gòu),將邏輯上連續(xù)的數(shù)據(jù)盡可能地存放在連續(xù)的磁盤空間上,從而提高預(yù)讀數(shù)據(jù)的命中率,減少磁盤尋道時(shí)間.其次,通過(guò)使用cache充當(dāng)元數(shù)據(jù)服務(wù)器的角色和簡(jiǎn)化文件信息節(jié)點(diǎn)的方式減少查找文件節(jié)點(diǎn)信息的開銷,從而提高i/o性能.另外,對(duì)寫操作進(jìn)行了優(yōu)化,減少了由于文件刪除或修改產(chǎn)生的文件碎片.最后采用局部性原理,提出了一種“提前發(fā)送批量高頻率訪問(wèn)”的文件傳輸策略來(lái)減少小文件的傳輸時(shí)延。本發(fā)明提供的技術(shù)方案帶來(lái)的有益效果是:本發(fā)明針對(duì)目前分布式系統(tǒng)在小文件管理上存在的問(wèn)題,提出了一種性能優(yōu)化的小文件存儲(chǔ)系統(tǒng)訪問(wèn)(sfsa)方法,sfsa系統(tǒng)既可提高小文件的訪問(wèn)性能,也可提高磁盤空間的利用率;另外,根據(jù)局部性原理,本發(fā)明采用了“提前發(fā)送批量高頻率訪問(wèn)文件”的方法,因此它也能夠優(yōu)化文件的傳輸性能。通過(guò)實(shí)驗(yàn)驗(yàn)證,本發(fā)明提出的方法能有效的優(yōu)化小文件的存儲(chǔ)訪問(wèn)性能。附圖說(shuō)明為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明的一種性能優(yōu)化的小文件存儲(chǔ)訪問(wèn)的系統(tǒng)結(jié)構(gòu)圖;圖2為本發(fā)明的一種性能優(yōu)化的小文件存儲(chǔ)訪問(wèn)的系統(tǒng)的小文件存儲(chǔ)示例圖;圖3為本發(fā)明的一種性能優(yōu)化的小文件存儲(chǔ)訪問(wèn)的系統(tǒng)的同文件夾中的文件存儲(chǔ)示例圖;圖4為本發(fā)明的一種性能優(yōu)化的小文件存儲(chǔ)訪問(wèn)的系統(tǒng)的文件夾域的數(shù)據(jù)結(jié)構(gòu)圖;圖5為本發(fā)明的一種性能優(yōu)化的小文件存儲(chǔ)訪問(wèn)的系統(tǒng)的簡(jiǎn)化后的inode數(shù)據(jù)結(jié)構(gòu)圖;圖6為本發(fā)明的一種性能優(yōu)化的小文件存儲(chǔ)訪問(wèn)的方法的更新文件時(shí)的寫優(yōu)化方法原理圖;圖7為本發(fā)明的一種性能優(yōu)化的小文件存儲(chǔ)訪問(wèn)的方法的更新文件時(shí)的寫優(yōu)化方法示例圖;圖8為本發(fā)明的一種性能優(yōu)化的小文件存儲(chǔ)訪問(wèn)的方法的創(chuàng)建文件時(shí)的寫優(yōu)化方法原理圖;圖9為磁盤i/o性能優(yōu)化前后服務(wù)器平均響應(yīng)時(shí)間的比較示意圖;圖10為寫優(yōu)化前后磁盤空間利用率的比較效果圖;圖11為文件傳輸優(yōu)化前后平均文件傳輸時(shí)延的比較效果圖。具體實(shí)施方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方式作進(jìn)一步地詳細(xì)描述。本實(shí)施例的一種性能優(yōu)化的小文件存儲(chǔ)訪問(wèn)的系統(tǒng)(sfsa系統(tǒng))的結(jié)構(gòu)如圖1所示。該系統(tǒng)主要包括文件系統(tǒng)接口(failsysteminterface,fsi)、文件夾域管理器(folderdomainmanager,fdm)、文件信息節(jié)點(diǎn)管理器(inodemanager,im)、塊管理器(blockmanager,bm)和文件緩沖管理器(filecachemanager,fcm)5個(gè)模塊。fsi負(fù)責(zé)對(duì)其他模塊進(jìn)行封裝,向上層提供靈活統(tǒng)一的文件訪問(wèn)接口。fdm負(fù)責(zé)對(duì)文件夾域(folderdomain,id)進(jìn)行管理。它負(fù)責(zé)管理同一個(gè)文件夾的各個(gè)文件信息節(jié)點(diǎn)和存儲(chǔ)在該文件夾中的所有文件數(shù)據(jù)的blockid等.im負(fù)責(zé)對(duì)文件信息節(jié)點(diǎn)進(jìn)行理。在這個(gè)管理器中,還設(shè)定了一個(gè)文件信息節(jié)點(diǎn)的緩存器。這個(gè)緩存器主要用于存放最近訪問(wèn)過(guò)的和高頻率訪問(wèn)的文件信息節(jié)點(diǎn)。bm負(fù)責(zé)對(duì)磁盤塊的空間管理,磁盤空間的開辟也是由此模塊負(fù)責(zé).fcm負(fù)責(zé)對(duì)文件緩存的管理。本實(shí)施例中,sfsa系統(tǒng)在存儲(chǔ)小文件時(shí)是通過(guò)采用開辟大塊的連續(xù)磁盤空間的方式來(lái)存儲(chǔ)大量的小文件。首先將磁盤空間劃分為多個(gè)塊(block),每個(gè)塊的大小為64kb,大文件的連續(xù)磁盤空間就由這一系列的塊所組成。當(dāng)遇到的文件比較小(定義:當(dāng)文件的大小≤64kb時(shí),稱為“小文件”)時(shí),則每個(gè)小文件只能存放在單個(gè)塊中,不能跨越2個(gè)塊存放,每個(gè)文件數(shù)據(jù)都存放在連續(xù)的磁盤空間上。如附圖2,是在一個(gè)塊中存放多個(gè)小文件的示例圖。圖2中,f1,f2,f3,f4和f5為5個(gè)文件,文件與文件之間連續(xù)存放,如f1與f2,f2與f3,f4與f5。黑色部分為此塊的碎片,當(dāng)出現(xiàn)文件的大小小于這些碎片的大小時(shí),應(yīng)優(yōu)先把文件存放在這些碎片中。為了提高“預(yù)讀”數(shù)據(jù)的命中率,sata系統(tǒng)將邏輯上連續(xù)的數(shù)據(jù)盡可能地存儲(chǔ)在物理磁盤的連續(xù)空間上。即將同一個(gè)文件的數(shù)據(jù)或?qū)⑼粋€(gè)文件夾下的文件數(shù)據(jù)盡可能地存儲(chǔ)在連續(xù)的磁盤空間塊上,每一個(gè)文件夾將擁有一個(gè)或多個(gè)塊,這些塊都只存放此文件夾的文件,如圖3所示。fd是sfsa系統(tǒng)中最為重要的數(shù)據(jù)結(jié)構(gòu),它的設(shè)計(jì)關(guān)系到下面的多個(gè)優(yōu)化策略的設(shè)計(jì)以及實(shí)現(xiàn).其數(shù)據(jù)結(jié)構(gòu)如圖4所示:其中,folder_id是文件夾的標(biāo)識(shí)符,系統(tǒng)會(huì)為每個(gè)文件夾或者文件分配一個(gè)獨(dú)立的標(biāo)識(shí)符來(lái)區(qū)分彼此。scatteredblockidlist和goodblockidlist分別是存放此文件夾中的文件數(shù)據(jù)的2個(gè)塊標(biāo)識(shí)符列表。其中scatteredblockidlist存放的是零散塊標(biāo)識(shí)符列表,goodblockidlist存放的是非零散塊標(biāo)識(shí)符列表。這兩個(gè)列表可用于磁盤空間碎片的整理。inodelist是對(duì)inode的一個(gè)排序鏈表,根據(jù)文件的訪問(wèn)頻率進(jìn)行排序。它是為了實(shí)現(xiàn)優(yōu)化文件傳輸而設(shè)計(jì)的。f_count是文件夾的訪問(wèn)計(jì)數(shù)器。rwlock是文件訪問(wèn)的讀寫鎖。通常情況下,分布式文件系統(tǒng)都是把文件的屬性信息(文件信息節(jié)點(diǎn))存放在元數(shù)據(jù)服務(wù)器上,在i/o服務(wù)器上,只需要知道文件的磁盤空間信息即可進(jìn)行訪問(wèn)。因此在i/o服務(wù)器上,只需要記錄文件的磁盤空間信息,而不需要記錄文件的其他屬性,如創(chuàng)建時(shí)間、最后訪問(wèn)時(shí)間和所屬用戶等。基于此,對(duì)inode的數(shù)據(jù)結(jié)構(gòu)進(jìn)行簡(jiǎn)化,只保留文件的磁盤空間信息以及屬于它的少量數(shù)據(jù)成員,簡(jiǎn)化后的inode的數(shù)據(jù)結(jié)構(gòu)如圖5所示。folder_id是文件標(biāo)識(shí)符。startpisition是文件在塊中的起始位置。length是文件的長(zhǎng)度。wright是文件權(quán)重。在sfsa系統(tǒng)中代表文件的訪問(wèn)頻率。block_id是文件所存放的塊的標(biāo)識(shí)符。i_clock是文件的訪問(wèn)計(jì)數(shù)器。lock是文件鎖。本實(shí)施例中,優(yōu)化磁盤i/o性能的方法如下:在現(xiàn)代磁盤設(shè)備中,讀寫少量數(shù)據(jù)的時(shí)延一般主要花在磁頭的尋道定位上。一旦定位好,讀取一個(gè)數(shù)據(jù)塊跟讀取連續(xù)幾個(gè)數(shù)據(jù)塊的時(shí)間相差不是很大。因此,結(jié)合上面提出的優(yōu)化的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),即把邏輯上連續(xù)的數(shù)據(jù)盡可能地存儲(chǔ)在物理磁盤的連續(xù)空間上。根據(jù)局部性原理,當(dāng)系統(tǒng)要讀取某一個(gè)文件時(shí),采用預(yù)讀的方式,將同一個(gè)塊中的文件一起讀取出來(lái),從而減少磁盤i/o的次數(shù)。下面給出一種預(yù)讀的調(diào)度算法:算法1.預(yù)讀調(diào)度算法readfiled(file_id)。①if(isccahe(file_id))returnfilebuffer(file_id);/*如果當(dāng)前文件存在cache中,則直接返回cache中的文件數(shù)據(jù)*/②block_id=getblockid(file_id);/*通過(guò)文件的標(biāo)識(shí)符得到存放當(dāng)前文件的塊的標(biāo)識(shí)符*/③outstream=readblockdata(block_id);/*讀取該塊的所有數(shù)據(jù)*/④cachefilesbufferfromblock(outstream,block_id);/*緩存此塊中所存儲(chǔ)的所有文件數(shù)據(jù)*/returnfilebuffer(file_id)./*此時(shí)文件數(shù)據(jù)已經(jīng)在cache中,直接返回cache中的文件數(shù)據(jù)*/在通常情況下,文件的屬性信息(文件信息節(jié)點(diǎn))存放在元數(shù)據(jù)服務(wù)器上。在i/o服務(wù)器上,只需要知道文件的磁盤空間信息即可進(jìn)行訪問(wèn)。然而這種情況下元數(shù)據(jù)服務(wù)器上的i/o開銷很大,因?yàn)樾枰l繁訪問(wèn)元數(shù)據(jù)服務(wù)器上的磁盤,所以整個(gè)系統(tǒng)的i/o性能較差。在sfsa系統(tǒng)結(jié)構(gòu)中,使用cache充當(dāng)元數(shù)據(jù)服務(wù)器的角色,在cache上保存文件信息節(jié)點(diǎn)的信息。并且通過(guò)簡(jiǎn)化的inode數(shù)據(jù)結(jié)構(gòu)使每個(gè)文件信息節(jié)點(diǎn)只保留文件的磁盤空間信息以及另外少量有用的信息,從而提高cache的利用率,使cache能夠保存大量的文件信息節(jié)點(diǎn)。通過(guò)這種方式,減少訪問(wèn)磁盤的次數(shù)和讀取文件信息節(jié)點(diǎn)的開銷。本實(shí)施例中,減少磁盤碎片空間浪費(fèi)的寫優(yōu)化方法如下:一般分布式文件系統(tǒng)經(jīng)過(guò)大量的刪除文件和修改文件請(qǐng)求之后,在小文件之間可能會(huì)產(chǎn)生大量的文件碎片,而這些碎片很難重新利用起來(lái),這同樣也會(huì)導(dǎo)致大量磁盤空間的浪費(fèi).針對(duì)上述問(wèn)題,在sfsa系統(tǒng)中對(duì)寫操作進(jìn)行優(yōu)化處理.即:在寫操作時(shí)使用優(yōu)化策略來(lái)減少由于文件的刪除或者修改而導(dǎo)致的文件碎片問(wèn)題。出現(xiàn)寫操作主要有2種情況,分別是更新文件和創(chuàng)建文件。1)更新文件時(shí)的寫優(yōu)化方法:如附圖6所示,為更新文件時(shí)的寫優(yōu)化整體思路:當(dāng)某個(gè)文件夾域中出現(xiàn)文件數(shù)據(jù),如圖6中f3,將聚合此文件夾域中的相關(guān)文件,并作為單獨(dú)的一次i/o請(qǐng)求寫入磁盤中,從而減少文件與文件之間的碎片。以下是更為具體的解決方案,如圖7所示。①當(dāng)一個(gè)文件的數(shù)據(jù)(f3)發(fā)生更新時(shí),則從它開始,把存在于當(dāng)前塊中并處于它后面的文件,以及從那些零散塊取出適合的文件,聚合在一起,作為單個(gè)i/o請(qǐng)求寫入磁盤,如圖7(a)所示。注意這些文件都是存放在cache中。②如果在當(dāng)前塊中,存在沒有被放入cache中但是又處于被更新文件之后的文件,如圖7(b)的f5。此時(shí),并不對(duì)f5進(jìn)行聚合寫入,所以能一次性寫入的文件長(zhǎng)度是從f3起始地址到f5起始地址。③在情況①②中,都是文件更新后在原來(lái)塊中有足夠的空間存放的情況,然而當(dāng)更新后的文件比較大,使得原來(lái)塊沒有足夠的空間存放更新后的文件時(shí),則系統(tǒng)會(huì)將此文件先讀出再選擇適合的塊進(jìn)行存放。如圖7所示。圖7(c)表示,系統(tǒng)找到一個(gè)合適的零散塊,并將更新文件同此零散塊中的文件一起聚合寫入。如果系統(tǒng)找不到合適的零散塊,則會(huì)從碎片中找到合適大小的空間進(jìn)行存放,再采用同樣的機(jī)制進(jìn)行聚合寫入。2)、創(chuàng)建文件時(shí)的寫優(yōu)化方法如下:如圖8所示:①當(dāng)創(chuàng)建一個(gè)新的文件時(shí),首先在當(dāng)前文件夾域中尋找合適的零散塊,即剩余空間大小大于新文件大小的零散塊,并且此塊中的所有文件數(shù)據(jù)都在cache中,如圖8(a)所示。③當(dāng)找不到合適的零散塊時(shí),系統(tǒng)將在此文件夾域中的碎片中尋找合適的碎片空間來(lái)寫入。在寫入之前,系統(tǒng)會(huì)同時(shí)將旁邊已經(jīng)緩存的文件一起聚合再寫入,如圖8(b)所示。如果還有足夠空間,還會(huì)從零散塊取出適當(dāng)?shù)奈募?lái)一起寫入,如圖8(c)所示。④當(dāng)找不到合適的碎片來(lái)存放時(shí),則新建一個(gè)塊,再將新的文件數(shù)據(jù)寫入。以上優(yōu)化方法采用的是類似dfs的碎片整理策略,這里所不同的是本文組織管理的基本單元是可變長(zhǎng)的整個(gè)文件,而不像dfs中是固定大小的文件塊。本實(shí)施例中,優(yōu)化文件傳輸?shù)姆椒ㄈ缦拢涸诜植际较到y(tǒng)中,小文件往往不利于條帶化,只能將整個(gè)文件存放在單個(gè)數(shù)據(jù)服務(wù)器上.當(dāng)用戶請(qǐng)求一個(gè)小文件時(shí),系統(tǒng)在用戶和對(duì)應(yīng)的數(shù)據(jù)服務(wù)器之間建立tcp連接,再向用戶傳輸文件數(shù)據(jù),最后關(guān)閉連接。由于建立tcp連接需要3次握手,從而增加了文件傳輸?shù)臅r(shí)延。目前一些分布式系統(tǒng)采用保持連接的方式。但在有大量用戶提出請(qǐng)求的情況下,為每個(gè)用戶都保持連接將給系統(tǒng)帶來(lái)資源上的負(fù)擔(dān)及浪費(fèi)。因此,對(duì)每個(gè)文件夾,根據(jù)文件夾里的每個(gè)文件的訪問(wèn)頻率形成一個(gè)排序列表。當(dāng)用戶訪問(wèn)該文件夾里的某個(gè)文件時(shí),系統(tǒng)會(huì)自動(dòng)地將這個(gè)列表里高訪問(wèn)頻率的文件一起發(fā)送過(guò)去。但為了避免發(fā)送過(guò)多的文件,設(shè)定一個(gè)高訪問(wèn)頻率的閾值tf,并將所有訪問(wèn)頻率高于tf的文件順序分成多個(gè)組,每個(gè)組可能包含多個(gè)文件,組中所有文件大小之和不超過(guò)64kb。每當(dāng)用戶請(qǐng)求當(dāng)前文件夾中的一個(gè)文件時(shí),系統(tǒng)會(huì)按照順序?qū)⒁粋€(gè)組的文件一起發(fā)送過(guò)去,從而降低文件傳輸時(shí)延.tf的計(jì)算公式如下:tf=n×favg(n≥1):(1)fi為文件夾每個(gè)文件的訪問(wèn)頻率,m為當(dāng)前文件夾中的文件個(gè)數(shù),n由用戶自定義設(shè)置。因此,根據(jù)局部性原理,本實(shí)施例提出一種“提前發(fā)送批量高頻率訪問(wèn)文件”的方法,其算法描述如下:sendfile(reqfileid).1.folder_id=getfolderid(reqfileid);/*通過(guò)請(qǐng)求文件的標(biāo)識(shí)符獲取其所在文件夾的標(biāo)識(shí)符*/2.reqfilebuffer=readfile(reqfileid);/*讀取請(qǐng)求文件數(shù)據(jù)*/3.batchfilesbuffer=gethighfreqbatchfilesbuffer(folder_id);/*獲取批量高頻率文件數(shù)據(jù)*/4.sendtoclient(reqfilebuffer+batchreqfilebuffer);/*把請(qǐng)求文件數(shù)據(jù)以及批量高頻率文件數(shù)據(jù)一起發(fā)送給用戶*/當(dāng)用戶請(qǐng)求一個(gè)文件夾中的一個(gè)文件時(shí),同時(shí)把此文件夾中的高訪問(wèn)頻率文件發(fā)送過(guò)去,每次只發(fā)送一部分文件,這部分文件的總字節(jié)數(shù)不能超過(guò)64kb.設(shè)置為64kb是考慮該傳輸大小給用戶帶來(lái)的傳輸延遲較小。為了檢驗(yàn)本實(shí)施例中sfsa系統(tǒng)的實(shí)際效果,在實(shí)驗(yàn)室環(huán)境下進(jìn)行了大量的仿真實(shí)驗(yàn)。實(shí)驗(yàn)主要驗(yàn)證和分析了3個(gè)優(yōu)化策略的效果。實(shí)驗(yàn)環(huán)境為:5臺(tái)pc機(jī)組成實(shí)驗(yàn)系統(tǒng)。pc機(jī)的配置為p42.6ghz的處理器,1gb的內(nèi)存,節(jié)點(diǎn)間以100mbps以太網(wǎng)相連。1、對(duì)于磁盤i/o性能優(yōu)化的測(cè)試:以2臺(tái)pc機(jī)作為2種形式的服務(wù)器,一臺(tái)沒有做i/o優(yōu)化處理,另外一臺(tái)進(jìn)行了i/o優(yōu)化處理.使用3臺(tái)pc機(jī)作為客戶端.客戶端不斷地向2臺(tái)服務(wù)器發(fā)送讀文件請(qǐng)求,服務(wù)器接收數(shù)據(jù)并處理請(qǐng)求,同時(shí)在服務(wù)器端采集相應(yīng)的實(shí)驗(yàn)數(shù)據(jù).在實(shí)驗(yàn)環(huán)境中,在服務(wù)器上放置大約20個(gè)文件夾,每個(gè)文件夾平均放置100個(gè)文件。圖9所示為磁盤i/o性能優(yōu)化前后服務(wù)器平均響應(yīng)時(shí)間的比較。從圖9可以看出,磁盤i/o優(yōu)化后,性能得到了明顯的提升,比優(yōu)化前提升了約34.7%。2、寫性能優(yōu)化的測(cè)試:在本實(shí)驗(yàn)中,設(shè)定系統(tǒng)中存放著200個(gè)文件,圖10是寫優(yōu)化前后磁盤空間利用率的比較效果。從圖10可以看出,初始化時(shí)系統(tǒng)的磁盤空間利用率最高,達(dá)到95.6%左右。但是系統(tǒng)經(jīng)過(guò)一段時(shí)間的運(yùn)行后,由于不斷有文件創(chuàng)建、刪除和更新等文件變動(dòng)操作,使磁盤空間的利用率有所下降,但是仍然保持在91%左右,相對(duì)于沒有優(yōu)化的83.4%,采用本發(fā)明的sfsa系統(tǒng)優(yōu)化方法具有更好的磁盤空間利用率。3、文件傳輸性能優(yōu)化的測(cè)試:在本實(shí)驗(yàn)中,根據(jù)一般情況,設(shè)置tf表達(dá)式中的n值為4。圖11所示為文件傳輸優(yōu)化前后平均文件傳輸時(shí)延的比較。從圖11可以看出,當(dāng)用戶請(qǐng)求同一個(gè)文件夾中的文件次數(shù)在10次左右之后,文件傳輸時(shí)延得到了較好的改善,跟優(yōu)化前相比,本發(fā)明的sfsa優(yōu)化方法能降低大約14%的網(wǎng)絡(luò)延遲。以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。當(dāng)前第1頁(yè)12