專(zhuān)利名稱(chēng)::分布式文件服務(wù)器基于緩沖區(qū)的文件傳輸方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及文件傳輸領(lǐng)域,主要是一種分布式文件服務(wù)器基于緩沖區(qū)的文件傳輸方法。
背景技術(shù):
:在世界范圍內(nèi)廣泛應(yīng)用的分布式文件系統(tǒng)有NFS,AFS和Coda,其突出特點(diǎn)是具有位置透明性和遷移透明性,分布式文件系統(tǒng)可以基本滿(mǎn)足了構(gòu)建大規(guī)模存儲(chǔ)系統(tǒng)的需要。分布式文件服務(wù)器具備了分布式系統(tǒng)的一些優(yōu)點(diǎn),具有很高的文件訪問(wèn)性能,通過(guò)冗余機(jī)制保證了系統(tǒng)可靠性,并且具有良好的可擴(kuò)展性,支持大容量的存儲(chǔ)。分布式文件服務(wù)器的結(jié)構(gòu)可以分為中心化結(jié)構(gòu)和分布式^寸等結(jié)構(gòu)。在中心化結(jié)構(gòu)的系統(tǒng)中,存在一個(gè)主服務(wù)器存儲(chǔ)全局的文件系統(tǒng)信息,向用戶(hù)提供文件服務(wù),系統(tǒng)中的其他節(jié)點(diǎn)都用來(lái)做存儲(chǔ)節(jié)點(diǎn),并受主服務(wù)器的控制。在分布式對(duì)等結(jié)構(gòu)中,系統(tǒng)中任何一個(gè)節(jié)點(diǎn)都高度自治,任何一個(gè)節(jié)點(diǎn)都可以對(duì)外提供全局的文件服務(wù)。分布式文件服務(wù)器作為一個(gè)存儲(chǔ)系統(tǒng),包含穩(wěn)定的文件源,并包含多份文件冗余,客戶(hù)端可以從多個(gè)服務(wù)器同時(shí)下載文件的部分內(nèi)容,如果從網(wǎng)絡(luò)中接收到數(shù)據(jù)就立刻寫(xiě)入磁盤(pán),傳輸過(guò)程將會(huì)產(chǎn)生多次的磁盤(pán)讀寫(xiě)操作,采用軟件緩沖區(qū)可以有效的減少對(duì)磁盤(pán)的操作,明顯提升大文件的傳輸速度。分布式文件服務(wù)器中的緩沖區(qū)是指內(nèi)存中的一塊區(qū)域,一個(gè)緩沖區(qū)包含若干數(shù)據(jù)塊,每個(gè)塊包含一個(gè)小塊文件數(shù)據(jù)以及它在文件中的起始位置和結(jié)束位置等信息,每個(gè)塊具有存在、空閑、填充中、充滿(mǎn)四種狀態(tài)。對(duì)緩沖區(qū)頻繁的讀寫(xiě),需要一個(gè)高效的管理方法,以減少內(nèi)存分配與釋放造成的碎片。
發(fā)明內(nèi)容本發(fā)明要解決上述技術(shù)所存在的缺陷,提供一種分布式文件服務(wù)器基于緩沖區(qū)的文件傳輸方法,通過(guò)配置和管理軟件緩沖區(qū),解決多線(xiàn)程文件傳輸帶來(lái)的磁盤(pán)讀寫(xiě)和內(nèi)存分配問(wèn)題。本發(fā)明解決其技術(shù)問(wèn)題所采用的技術(shù)方案這種分布式文件服務(wù)器基于緩沖區(qū)的文件傳輸方法,步驟如下1)、建立穩(wěn)定的傳輸模型,在這個(gè)分布式文件服務(wù)器中包含穩(wěn)定的文件源,每個(gè)文件具有兩個(gè)或者兩個(gè)以上的文件副本的存在,且這些副本保存在多個(gè)服務(wù)器上;系統(tǒng)為客戶(hù)端提供了幾個(gè)外部接口,只要連接到其中的一臺(tái)服務(wù)器,就能訪問(wèn)到系統(tǒng)中所有的文件資源,系統(tǒng)中的每一臺(tái)服務(wù)器,都具有資源定位的功能;2)、在這樣的文件存儲(chǔ)系統(tǒng)中,不存在主服務(wù)器和超級(jí)節(jié)點(diǎn),文件被保存在多個(gè)節(jié)點(diǎn)上,按照文件名的哈希值映射到一個(gè)節(jié)點(diǎn)ID,這個(gè)節(jié)點(diǎn)上的文件副本稱(chēng)為文件的主副本;文件主副本的服務(wù)器對(duì)多個(gè)文件副本進(jìn)行管理,當(dāng)有用戶(hù)下載該文件時(shí),記錄這個(gè)客戶(hù)端的信息,在用戶(hù)下載完成并未退出系統(tǒng)時(shí),這個(gè)客戶(hù)端上的文件作為一個(gè)文件副本源;3)、用戶(hù)請(qǐng)求對(duì)文件下載時(shí),系統(tǒng)將文件名哈希后得到一個(gè)標(biāo)識(shí)符,通過(guò)路由定位找到存儲(chǔ)這個(gè)文件的主服務(wù)器,主服務(wù)器上記錄文件副本服務(wù)器和下載完成用戶(hù)的地址,將這些地址信息返回給用戶(hù),用戶(hù)從這些地址上多源分塊下載文件;4)、為了提高文件存儲(chǔ)的效率,并不是接收到一個(gè)文件數(shù)據(jù)塊就寫(xiě)磁盤(pán),而是將文件數(shù)據(jù)塊緩存在緩沖區(qū)中,當(dāng)緩沖區(qū)中達(dá)到一定數(shù)量的塊時(shí),再由統(tǒng)一的一個(gè)線(xiàn)程將緩沖區(qū)中的數(shù)據(jù)寫(xiě)到磁盤(pán)中,寫(xiě)磁盤(pán)線(xiàn)程從緩沖區(qū)中提取塊時(shí),在已滿(mǎn)塊中選擇最佳的一塊,將其寫(xiě)入磁盤(pán)。動(dòng)態(tài)擴(kuò)展的緩沖區(qū)算法在傳輸任務(wù)開(kāi)始時(shí)默認(rèn)生成數(shù)據(jù)塊的大小和數(shù)量,這兩個(gè)值在文件傳輸?shù)倪^(guò)程中會(huì)根據(jù)網(wǎng)絡(luò)速度和磁盤(pán)讀寫(xiě)速度進(jìn)行動(dòng)態(tài)變化,每個(gè)數(shù)據(jù)塊在默認(rèn)生成時(shí)并不分配內(nèi)存,只有在某個(gè)線(xiàn)程需要寫(xiě)數(shù)據(jù)時(shí)才分配內(nèi)存。在沒(méi)有線(xiàn)程對(duì)這個(gè)塊讀寫(xiě)時(shí),這個(gè)數(shù)據(jù)塊可以作為一個(gè)新的數(shù)據(jù)塊掛載到緩沖區(qū)上,這樣減少了創(chuàng)建數(shù)據(jù)塊的內(nèi)存開(kāi)銷(xiāo),提高了內(nèi)存的使用率。對(duì)于讀寫(xiě)緩沖區(qū)的線(xiàn)程來(lái)說(shuō),理想的情況是讀寫(xiě)緩沖區(qū)的速度平衡,若寫(xiě)緩沖區(qū)的速度大于讀緩沖區(qū)的速度時(shí),需要增加新的數(shù)據(jù)塊防止寫(xiě)線(xiàn)程處于空閑等待狀態(tài)。若寫(xiě)緩沖區(qū)的速度小于讀緩沖區(qū)的速度時(shí),可以減少多余的數(shù)據(jù)塊,減少資源的消耗。本發(fā)明有益的效果是本發(fā)明解決了分布式文件服務(wù)器的高性能多源分塊傳輸問(wèn)題,采用動(dòng)態(tài)擴(kuò)展緩沖區(qū)的管理方法提高文件傳輸性能,降低服務(wù)器的資源消耗。由上述方法可以看出,本發(fā)明提供的緩沖區(qū)管理方法具有動(dòng)態(tài)可擴(kuò)展和自動(dòng)重構(gòu)的特性,緩沖區(qū)可以靈活的根據(jù)讀寫(xiě)速度決定數(shù)據(jù)塊的大小和數(shù)量,同時(shí)使用過(guò)的數(shù)據(jù)塊可以被重新利用,有效得減少了緩沖區(qū)空間的浪費(fèi),從而減少整個(gè)系統(tǒng)的資源消耗。圖l具有穩(wěn)定文件源的分布式存儲(chǔ)系統(tǒng)傳輸模型示意圖;圖2為動(dòng)態(tài)擴(kuò)展的緩沖區(qū)模型示意圖;圖3為動(dòng)態(tài)擴(kuò)展的緩沖區(qū)調(diào)整流程示意圖;具體實(shí)施例方式下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步介紹具有穩(wěn)定傳輸模型的分布式文件服務(wù)器中文件多源分塊下載如圖1,過(guò)程如下(1)客戶(hù)端嘗試著與每個(gè)服務(wù)器建立連接,連接建立成功后維護(hù)連接,等待數(shù)據(jù)的傳輸。(2)客戶(hù)端上生成文件傳輸?shù)臄帱c(diǎn)信息,根據(jù)斷點(diǎn)信息文件,向多個(gè)服務(wù)器請(qǐng)求不同位置的文件塊數(shù)據(jù)。(3)客戶(hù)端接收到數(shù)據(jù)后,先將數(shù)據(jù)寫(xiě)入內(nèi)存中的緩沖區(qū),再由緩沖區(qū)統(tǒng)一寫(xiě)入硬盤(pán)。在創(chuàng)建緩沖區(qū)時(shí),申明了緩沖區(qū)的塊數(shù)量和每個(gè)塊的大小,但并不實(shí)際給每個(gè)塊分配內(nèi)存空間,只有當(dāng)有線(xiàn)程想給緩沖區(qū)中寫(xiě)數(shù)據(jù)時(shí)才有可能創(chuàng)建一塊內(nèi)存空間,并將它作為新的塊掛載到緩沖區(qū)上去。在開(kāi)始傳數(shù)據(jù)前,緩沖區(qū)中的所有塊的狀態(tài)都被置成空閑,表明這些塊可以有來(lái)存儲(chǔ)新到來(lái)的數(shù)據(jù)。新的數(shù)據(jù)到來(lái)時(shí),從緩沖區(qū)里獲得一個(gè)空閑的塊,將該塊狀態(tài)置成填充中(表明有線(xiàn)程正在向這個(gè)塊中寫(xiě)數(shù)據(jù)),同時(shí)分配內(nèi)存空間給這個(gè)塊。當(dāng)線(xiàn)程完成對(duì)一個(gè)狀態(tài)為填充中的塊的寫(xiě)操作后,將該塊的狀態(tài)置成充滿(mǎn)。讀線(xiàn)程從緩沖區(qū)中選擇一個(gè)狀態(tài)為充滿(mǎn)的塊,將該塊中的數(shù)據(jù)寫(xiě)到磁盤(pán)后,把它的狀態(tài)置為存在,這是個(gè)特殊的狀態(tài),它同空閑一樣也表明該塊是可以被寫(xiě)數(shù)據(jù)庫(kù)空閑塊,最大的不同是這些塊都已經(jīng)分配了內(nèi)存空間,所以在選擇空閑塊時(shí),優(yōu)先考慮狀態(tài)為存在的緩沖塊,其次才考慮狀態(tài)為空閑的塊。下面用一個(gè)含10個(gè)塊的緩沖區(qū)來(lái)演示對(duì)緩沖區(qū)的操作,其中0表示存在狀態(tài),1表示空閑狀態(tài),2表示填充中,3表示充滿(mǎn)狀態(tài)。假設(shè)當(dāng)前3窆個(gè)緩沖區(qū)狀態(tài)如下-<table>tableseeoriginaldocumentpage5</column></row><table>一個(gè)線(xiàn)程請(qǐng)求一個(gè)空閑塊后:(2)<table>tableseeoriginaldocumentpage6</column></row><table>選擇一個(gè)狀態(tài)為充滿(mǎn)<table>tableseeoriginaldocumentpage6</column></row><table>的塊并將其中的數(shù)據(jù)寫(xiě)入磁盤(pán)后<table>tableseeoriginaldocumentpage6</column></row><table>寫(xiě)緩沖線(xiàn)程獲取空閑緩沖塊和讀緩沖線(xiàn)程獲取滿(mǎn)的緩沖塊都有各自的不同方法。對(duì)緩沖區(qū)數(shù)據(jù)塊的操作涉及到多線(xiàn)程的同步問(wèn)題,多個(gè)線(xiàn)程同時(shí)往緩沖區(qū)中寫(xiě)數(shù)據(jù)時(shí),需避免多個(gè)線(xiàn)程同時(shí)拿到同一個(gè)塊,對(duì)緩沖區(qū)的讀線(xiàn)程和寫(xiě)線(xiàn)程需保證同一時(shí)刻只有一個(gè)線(xiàn)程在操作同一塊。寫(xiě)緩沖線(xiàn)程獲取空閑塊時(shí),首先去査找狀態(tài)為存在的塊,若有則返回;如果不存在這樣的塊,則選擇狀態(tài)為空閑的塊,若有則返回;若沒(méi)有空閑的塊,則等待讀緩沖線(xiàn)程讀完數(shù)據(jù)后,再重新去緩沖區(qū)中拿空閑的塊。讀緩沖線(xiàn)程獲取滿(mǎn)的塊時(shí),總是取其中塊的開(kāi)始位置最小的那塊,這樣能保證盡可能連續(xù)向文件中寫(xiě)數(shù)據(jù)。為了實(shí)現(xiàn)這個(gè)功能,采用了數(shù)據(jù)結(jié)構(gòu)中的最小堆來(lái)維護(hù)當(dāng)前工作己經(jīng)滿(mǎn)的塊,這樣讀緩沖線(xiàn)程只要從這個(gè)堆中取一塊最小的即可。如圖2所示,對(duì)于讀寫(xiě)緩沖區(qū)線(xiàn)程來(lái)說(shuō),最理想的狀態(tài)是所有向緩沖區(qū)中寫(xiě)數(shù)據(jù)的寫(xiě)線(xiàn)程與讀緩沖區(qū)的線(xiàn)程速度平衡,不存在一方等待另一方的情況。寫(xiě)緩沖區(qū)線(xiàn)程每次向緩沖區(qū)中寫(xiě)入一個(gè)塊的數(shù)據(jù),包括文件內(nèi)容和該數(shù)據(jù)塊在文件中的起始位置、結(jié)束位置以及含有文件數(shù)據(jù)的大小等信息。當(dāng)緩沖區(qū)中沒(méi)有足夠的塊時(shí),增加新的塊給緩沖區(qū),以免寫(xiě)線(xiàn)程等待空閑塊。這種情況表明寫(xiě)線(xiàn)程的速度大于讀線(xiàn)程的速度,也就是讀線(xiàn)程無(wú)法及時(shí)處理狀態(tài)為充滿(mǎn)的塊,如果不創(chuàng)建新的塊會(huì)導(dǎo)致寫(xiě)線(xiàn)程處于空閑等待狀態(tài)。讀緩沖區(qū)線(xiàn)程每次從緩沖區(qū)中讀取一塊起始位置最小的文件塊,如果緩沖區(qū)中沒(méi)有狀態(tài)為充滿(mǎn)的塊,說(shuō)明寫(xiě)線(xiàn)程的速度小于讀線(xiàn)程的速度。這就需要減小緩沖區(qū)中每個(gè)塊的大小,讓寫(xiě)線(xiàn)程盡可能快地寫(xiě)滿(mǎn)一個(gè)塊,保證讀線(xiàn)程都可以得到狀態(tài)為充滿(mǎn)的塊。另外,這種情況也表明緩沖區(qū)中存在的多余的塊,可以將部分?jǐn)?shù)量的塊從緩沖區(qū)中去除,以減少緩沖區(qū)占用的內(nèi)存資源。如圖3所示,緩沖區(qū)動(dòng)態(tài)管理和重構(gòu)的具體流程如下(1)首先創(chuàng)建一個(gè)讀線(xiàn)程,并且將使該線(xiàn)程處于等待狀態(tài),一旦有緩沖區(qū)中的數(shù)據(jù)時(shí),喚醒該線(xiàn)程;創(chuàng)建寫(xiě)線(xiàn)程等待服務(wù)器傳輸數(shù)據(jù)給該線(xiàn)程。(2)有新的數(shù)據(jù)到達(dá)時(shí),從緩沖區(qū)中獲取一個(gè)空閑的塊,如果有狀態(tài)為存在的塊,則返回一個(gè)塊給寫(xiě)線(xiàn)程,否則創(chuàng)建一個(gè)新的、大小為原先塊大小的i倍(i需要根據(jù)第3步的情況來(lái)定,默認(rèn)值為I。)的塊給寫(xiě)線(xiàn)程。(3)讀線(xiàn)程從緩沖區(qū)中選擇一個(gè)狀態(tài)為充滿(mǎn)、起始位置最小的塊,并將它的數(shù)據(jù)寫(xiě)入磁盤(pán)文件,如果不存在這種狀態(tài)的塊,表明寫(xiě)磁盤(pán)的速度大于文件在網(wǎng)絡(luò)上的傳輸速度,這樣就沒(méi)有必要在創(chuàng)建新的塊時(shí)擴(kuò)大塊的大小,也就是將i設(shè)置為1/1。;(4)綜合3、4步驟確定塊的合適大小,具體大小應(yīng)該在當(dāng)前塊和先前創(chuàng)建的塊之間,可以在這兩個(gè)值之間選取一個(gè)平均值作為塊大小。這樣雖然不能立刻保證兩種線(xiàn)程之間的完全平衡,但隨著運(yùn)行時(shí)間的增加可以逐漸趨于平衡,(5)文件傳輸完畢后,釋放緩沖區(qū)空間。上述實(shí)施例用來(lái)解釋說(shuō)明本發(fā)明,而不是對(duì)本發(fā)明進(jìn)行限制,在本發(fā)明的精神和權(quán)利要求的保護(hù)范圍內(nèi),對(duì)本發(fā)明作出的任何修改和改變,都落入本發(fā)明的保護(hù)范圍。權(quán)利要求1、一種分布式文件服務(wù)器基于緩沖區(qū)的文件傳輸方法,其特征在于步驟如下1)、建立穩(wěn)定的傳輸模型,在這個(gè)分布式文件服務(wù)器中包含穩(wěn)定的文件源,每個(gè)文件具有兩個(gè)或者兩個(gè)以上的文件副本的存在,且這些副本保存在多個(gè)服務(wù)器上;系統(tǒng)為客戶(hù)端提供了幾個(gè)外部接口,只要連接到其中的一臺(tái)服務(wù)器,就能訪問(wèn)到系統(tǒng)中所有的文件資源;2)、文件被保存在多個(gè)節(jié)點(diǎn)上,按照文件名的哈希值映射到一個(gè)節(jié)點(diǎn)ID,這個(gè)節(jié)點(diǎn)上的文件副本稱(chēng)為文件的主副本;文件主副本的服務(wù)器對(duì)多個(gè)文件副本進(jìn)行管理,當(dāng)有用戶(hù)下載該文件時(shí),記錄這個(gè)客戶(hù)端的信息,在用戶(hù)下載完成并未退出系統(tǒng)時(shí),這個(gè)客戶(hù)端上的文件作為一個(gè)文件副本源;3)、用戶(hù)請(qǐng)求對(duì)文件下載時(shí),系統(tǒng)將文件名哈希后得到一個(gè)標(biāo)識(shí)符,通過(guò)路由定位找到存儲(chǔ)這個(gè)文件的主服務(wù)器,主服務(wù)器上記錄文件副本服務(wù)器和下載完成用戶(hù)的地址,將這些地址信息返回給用戶(hù),用戶(hù)從這些地址上多源分塊下載文件;4)、將文件數(shù)據(jù)塊緩存在緩沖區(qū)中,當(dāng)緩沖區(qū)中達(dá)到一定數(shù)量的塊時(shí),再由統(tǒng)一的一個(gè)線(xiàn)程將緩沖區(qū)中的數(shù)據(jù)寫(xiě)到磁盤(pán)中,寫(xiě)磁盤(pán)線(xiàn)程從緩沖區(qū)中提取塊時(shí),在已滿(mǎn)塊中選擇最佳的一塊,將其寫(xiě)入磁盤(pán)。2、根據(jù)權(quán)利要求1所述的分布式文件服務(wù)器基于緩沖區(qū)的文件傳輸方法,其特征在于系統(tǒng)中的每一臺(tái)服務(wù)器都采用具有資源定位的功能服務(wù)器。3、根據(jù)權(quán)利要求1所述的分布式文件服務(wù)器基于緩沖區(qū)的文件傳輸方法,其特征在于動(dòng)態(tài)擴(kuò)展的緩沖區(qū)算法在傳輸任務(wù)開(kāi)始時(shí)默認(rèn)生成數(shù)據(jù)塊的大小和數(shù)量,這兩個(gè)值在文件傳輸?shù)倪^(guò)程中會(huì)根據(jù)網(wǎng)絡(luò)速度和磁盤(pán)讀寫(xiě)速度進(jìn)行動(dòng)態(tài)變化,每個(gè)數(shù)據(jù)塊在默認(rèn)生成時(shí)并不分配內(nèi)存,只有在某個(gè)線(xiàn)程需要寫(xiě)數(shù)據(jù)時(shí)才分配內(nèi)存,在沒(méi)有線(xiàn)程對(duì)這個(gè)塊讀寫(xiě)時(shí),這個(gè)數(shù)據(jù)塊可以作為一個(gè)新的數(shù)據(jù)塊掛載到緩沖區(qū)上。全文摘要本發(fā)明涉及一種分布式文件服務(wù)器基于緩沖區(qū)的文件傳輸方法,步驟如下建立穩(wěn)定的傳輸模型,每個(gè)文件具有多個(gè)文件副本的存在,且這些副本保存在多個(gè)服務(wù)器上;文件被保存在多個(gè)節(jié)點(diǎn)上,按照文件名的哈希值映射到一個(gè)節(jié)點(diǎn)ID,這個(gè)節(jié)點(diǎn)上的文件副本稱(chēng)為文件的主副本,當(dāng)有用戶(hù)下載該文件時(shí),記錄這個(gè)客戶(hù)端的信息,在用戶(hù)下載完成并未退出系統(tǒng)時(shí),這個(gè)客戶(hù)端上的文件作為一個(gè)文件副本源;用戶(hù)請(qǐng)求對(duì)文件下載時(shí),主服務(wù)器上記錄文件副本服務(wù)器和下載完成用戶(hù)的地址,用戶(hù)從這些地址上多源分塊下載文件。本發(fā)明有益的效果是解決了分布式文件服務(wù)器的高性能多源分塊傳輸問(wèn)題,采用動(dòng)態(tài)擴(kuò)展緩沖區(qū)的管理方法提高文件傳輸性能,降低服務(wù)器的資源消耗。文檔編號(hào)H04L12/54GK101188544SQ200710157100公開(kāi)日2008年5月28日申請(qǐng)日期2007年12月4日優(yōu)先權(quán)日2007年12月4日發(fā)明者健吳,吳朝暉,鵬孫,尹建偉,瑩李,鄧水光申請(qǐng)人:浙江大學(xué)