一種全分布式文件索引及協(xié)作編輯機制的實現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,尤其涉及一種全分布式文件索引及協(xié)作編輯機制的實現(xiàn)方法。
【背景技術(shù)】
[0002]在“云”的概念如此流行的今天,云計算、云存儲等應(yīng)用已經(jīng)較為成熟,為人們生活帶來便利。云存儲,即將數(shù)據(jù)通過上傳、下載或同步的方式托管至云端,以其跨平臺、限制弱、可靠性高的特征在網(wǎng)絡(luò)普及率較高的現(xiàn)今發(fā)揮著重要的作用,可免去用戶在不同設(shè)備間拷貝數(shù)據(jù)的麻煩,并可給用戶提供不會丟失、不會損壞的重要數(shù)據(jù)備份倉庫。在這樣的背景下,各大商業(yè)云存儲服務(wù)紛紛崛起,從Dropbox、Google Docs到國內(nèi)的百度網(wǎng)盤,但其依托的下層技術(shù)都是各自實現(xiàn)的分布式對象存儲系統(tǒng):如Dropbox的對象容器是Amazon S3。
[0003]由于商業(yè)云存儲技術(shù)細節(jié)均未知,故開源界也出現(xiàn)了海量的分布式文件系統(tǒng),如Hadoop框架下的HDFS,Ceph,以及Openstack項目的Swift。Swift號稱開源版的AmazonS3,提供任意大小的對象在任意集群上的存儲服務(wù)。其有以下幾個優(yōu)點:1、架構(gòu)高度分布式,其擔任任何角色的節(jié)點均可擴展,平等節(jié)點的功能高度對稱,不存在單點失敗(SingleNode Failure)。與之相比,HDFS的文件元數(shù)據(jù)與索引存儲于單臺機器;而Ceph在存儲訪問上有主從結(jié)構(gòu),這都限制了其在超大集群的可擴展性。2、支持吞吐量大,由于其采取最終一致(Eventually Consistent)的策略,無需收到其他節(jié)點的阻塞即可完成數(shù)據(jù)存取。
[0004]但是,相對其他云存儲項目,Swift仍存在如下不足:1、原子操作過少,Swift僅支持讀、寫(覆蓋)兩個原子操作,相較而言Ceph支持追加(Append)和縮減(Truncate)操作,結(jié)合其弱一致性,在Swift上存儲有修改需求的元數(shù)據(jù)文件較為困難。2、原生文件層次支持差,作為可用的文件系統(tǒng),文件夾支持是必不可少的。然而在Swift中,文件夾通過文件名前綴方式維護,導(dǎo)致對文件夾的批量操作沒有原子性,帶來較差的使用體驗。那么,在保留以O(shè)penstack為代表的算法全分布式、完全可擴展的特色上增加文件的原子性更改操作、優(yōu)化文件系統(tǒng)層次處理方式則成了尚未完全探索的問題。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的目的在于通過一種全分布式文件索引及協(xié)作編輯機制的實現(xiàn)方法,來解決以上【背景技術(shù)】部分提到的問題。
[0006]為達此目的,本發(fā)明采用以下技術(shù)方案:
[0007]—種全分布式文件索引及協(xié)作編輯機制的實現(xiàn)方法,其包括如下步驟:
[0008]S101、將文件夾信息采用Key-value字典文件形式存儲于Swift存儲介質(zhì)中,對文件夾的操作變?yōu)槲募A索引文件的修改操作;
[0009]S102、采用補丁提交方式進行文件更新;
[0010]S103、在使用者API和Swift間建立中間層,接收提交的補丁文件;
[0011]S104、中間層負責合并向該節(jié)點提交的補丁 ;
[0012]S105、所有的中間層節(jié)點協(xié)同在分布式線段樹上合并得到合并所有更改的補?。?br>[0013]S106、將原文件與該補丁合并作為原文件最終版本。
[0014]特別地,所述步驟S101還包括:目錄文件將轉(zhuǎn)化為由該目錄下文件/文件夾名(Key)指向?qū)?yīng)文件/文件夾索引在存儲介質(zhì)中的真實文件名(Value)的字典,并對Key排序后按一定的格式轉(zhuǎn)換為文件。
[0015]特別地,所述步驟S102中補丁文件在時間戳的配合下,與補丁合并運算滿足結(jié)合律、交換律,即組成阿貝爾半群;原文件和補丁文件合并后得到新版本的目標文件;一切滿足阿貝爾半群的補丁格式和合并運算均適用于步驟S102。
[0016]特別地,所述步驟S103中所述中間層部署于Openstack Swift的Proxy節(jié)點并承接原本應(yīng)該調(diào)用Swift API的HTTP請求,并根據(jù)對應(yīng)業(yè)務(wù)邏輯代為調(diào)用原Swift API并將調(diào)用結(jié)果返回給中間層訪問者;其業(yè)務(wù)邏輯包括但不限于:
[0017]—、讀取某個文件內(nèi)容的請求,中間層將向Swift發(fā)起讀取與總補丁合并后的文件的請求;若該文件不存在,則發(fā)起獲取原文件請求;最后返回請求結(jié)果以及文件;
[0018]二、修改/增加某文件內(nèi)容的請求,中間層將向Swift提交補丁文件,并著手合并以得到總補丁文件;
[0019]三、訪問某文件夾的文件的請求,中間層將向Swift提交查詢請求,讀取根目錄索引文件并從中獲取下一級目錄的文件名,而后讀取下一級目錄索引文件,依次遞推尋找到目標文件在存儲介質(zhì)中的文件名;
[0020]四、增加/刪除某文件夾的請求,中間層將向Swift提交修改索引文件的補丁。
[0021]特別地,所述步驟S104包括;某節(jié)點部署的中間層在提交補丁文件后,開始將針對該文件通過該節(jié)點提交的全部補丁文件進行合并,尚未合并的內(nèi)部補丁由單項鏈表組成,合并線程從鏈表上任意項著手,將其合并并將鏈表指針指向下一個文件;其中,鏈表指針信息由Swift的文件Metadata存儲。
[0022]特別地,所述步驟S105包括:維護一個分布式線段樹,樹上節(jié)點為其子樹樹根節(jié)點對應(yīng)的中間層提交補丁的總和;當中間層節(jié)點內(nèi)部補丁更新時,沿分布式線段樹自底向上更新。
[0023]特別地,所述步驟S105中分布式線段樹為一棵擁有特殊編號規(guī)則的二叉樹,樹中葉節(jié)點對應(yīng)著不同的中間層節(jié)點,非葉節(jié)點為虛擬節(jié)點,用于匯總其子節(jié)點的補丁信息;每一個非葉節(jié)點的匯總信息均為其左右子節(jié)點(若僅有一個子節(jié)點則只計入該節(jié)點)的補丁之和。
[0024]特別地,所述步驟S105中分布式線段樹的編號公式如下:
[0025]—、對于中間層節(jié)點n e Z彡0,對應(yīng)的樹上葉節(jié)點編號為i = (η << 1)+1 ;
[0026]二、對于非葉節(jié)點i,其左右子節(jié)點及父節(jié)點分別編號為
[0027]parent (i) = (i' (i&~i)) | ((i&~i) << 1)
[0028]left (i) = 1-((i&_i) >>1)
[0029]right (i) = i+((i&_i) > > 1
[0030]其中>>〈Γ&|分別代表邏輯右移、邏輯左移、按位異或、按位與、按位或。
[0031]特別地,所述步驟S106具體包括:將分布式線段樹樹根的總補丁與原文件進行合并,而后得到最新版文件存儲于Swift用于讀取。
[0032]本發(fā)明提出的全分布式文件索引及協(xié)作編輯機制的實現(xiàn)方法既提供了分布式、高度穩(wěn)定的文件索引系統(tǒng),又統(tǒng)一了文件操作與文件夾操作,提出了一套離線協(xié)作編輯機制,彌補了 Openstack Swift項目為追求完全分布式而犧牲的文件操作原子性以及不良的文件索引支持。
【附圖說明】
[0033]圖1為本發(fā)明實施例提供的全分布式文件索引及協(xié)作編輯機制的實現(xiàn)方法流程圖;
[0034]圖2為本發(fā)明實施例提供的文件目錄索引的文件結(jié)構(gòu)示意圖;
[0035]圖3為本發(fā)明實施例提供的中間層業(yè)務(wù)示意圖;
[0036]圖4為本發(fā)明實施例提供的分布式線段樹編號示意圖;
[0037]圖5為本發(fā)明實施例提供的從某中間層節(jié)點提交的補丁文件合并流程圖。
【具體實施方式】
[0038]為了便于理解本發(fā)明,下面將參照相關(guān)附圖對本發(fā)明進行更全面的描述。附圖中給出了本發(fā)明的較佳實施例。但是,本發(fā)明可以以許多不同的形式來實現(xiàn),并不限于本文所描述的實施例。相反地,提供這些實施例的目的是使對本發(fā)明的公開內(nèi)容理解的更加透徹全面。除非另有定義,本文所使用的所有的技術(shù)和科學術(shù)語與屬于本發(fā)明的技術(shù)領(lǐng)域的技術(shù)人員通常理解的含義相同。本文中在本發(fā)明的說明書中所使用的術(shù)語只是為了描述具體的實施例的目的,不是旨在于限制本發(fā)明。本文所使用的術(shù)語“及/或”包括一個或多個相關(guān)的所列項目的任意的和所有的組合。
[0039]請參照圖1所示,圖1為本發(fā)明實施例提供的全分布式文件索引及協(xié)作編輯機制的實現(xiàn)方法流程圖。
[0040]本實施例中全分布式文件索引及協(xié)作編輯機制的實現(xiàn)方法具體包括:
[0041]S101、將文件夾信息采用Key-value字典文件形式存儲于S