本申請涉及網(wǎng)絡(luò)技術(shù)領(lǐng)域,特別是涉及一種分布式文件系統(tǒng)的文件操作方法及裝置。
背景技術(shù):分布式文件系統(tǒng)是指文件系統(tǒng)管理的物理存儲資源不一定直接連接在本地節(jié)點上,而是通過計算機網(wǎng)絡(luò)與其他節(jié)點相連。分布式文件系統(tǒng)的設(shè)計基于客戶機/服務(wù)器模式,一個典型的網(wǎng)絡(luò)可能包括多個供用戶訪問的服務(wù)器。在分布式文件系統(tǒng)中,文件(和目錄)的數(shù)量極其龐大,尤其是對于海量小文件的分布式文件系統(tǒng),文件和目錄的數(shù)量更為巨大。以TFS(TaobaoFileSystem,淘寶文件系統(tǒng))為例,TFS用于存儲淘寶網(wǎng)主站的數(shù)據(jù),例如商品圖片、商品描述、交易快照、社區(qū)圖片等等,這些數(shù)據(jù)的一個突出特點是單個文件尺寸較小,通常不大于1MB,但是數(shù)量巨大。對于當前的這些分布式文件系統(tǒng),一般都要在一個集群內(nèi)支撐眾多的業(yè)務(wù),而每個業(yè)務(wù)又要服務(wù)上億的客戶,因而使得系統(tǒng)內(nèi)的文件(和目錄)的數(shù)目極其龐大,必須采用分布式集群來提供對元數(shù)據(jù)的存儲以及查詢和修改等操作。但是,當元數(shù)據(jù)放入集群后,對文件的操作,如把一個目錄(或文件)移動到另一個目錄的操作,可能要在兩臺服務(wù)器上才能完成。然而,元數(shù)據(jù)的特性要求高可靠性、高可用性、高一致性,這種跨服務(wù)器的一致性和原子性給元數(shù)據(jù)集群的設(shè)計帶來極大挑戰(zhàn)?,F(xiàn)有的可以支持海量文件的元數(shù)據(jù)集群,為了能夠做到高可靠性、高可用性、高一致性,要么采用價格高昂的大內(nèi)存、大處理能力的服務(wù)器,要么采用復(fù)雜的分布式協(xié)議,或者干脆在一定程度上犧牲掉一致性,但即使這樣,元數(shù)據(jù)集群的設(shè)計也十分復(fù)雜,開發(fā)維護成本極高??傊?,需要本領(lǐng)域技術(shù)人員迫切解決的一個技術(shù)問題就是:如何能夠在滿足業(yè)務(wù)需求的情況下,降低元數(shù)據(jù)集群的設(shè)計復(fù)雜度和實現(xiàn)成本。
技術(shù)實現(xiàn)要素:本申請所要解決的技術(shù)問題是提供一種分布式文件系統(tǒng)的文件操作方法及裝置,能夠在滿足業(yè)務(wù)需求的情況下,降低元數(shù)據(jù)集群的設(shè)計復(fù)雜度和實現(xiàn)成本。為了解決上述問題,本申請公開了一種文件操作方法,包括:獲取分布式文件系統(tǒng)的文件操作指令,所述分布式文件系統(tǒng)中至少一個服務(wù)器的根目錄下設(shè)置有至少兩級子目錄,其中,第一級子目錄包括至少一個業(yè)務(wù)子目錄,第二級子目錄包括至少一個用戶根目錄,一個所述業(yè)務(wù)子目錄對應(yīng)于一個業(yè)務(wù),一個所述用戶根目錄對應(yīng)于一個用戶,一個所述業(yè)務(wù)子目錄和一個所述用戶根目錄在其所在的服務(wù)器上的名稱和級別固定,并且,一個所述用戶根目錄的數(shù)據(jù)完整地設(shè)置于一個服務(wù)器上;根據(jù)所述文件操作指令,使用所述業(yè)務(wù)子目錄的名稱和所述用戶根目錄的名稱查找目標文件夾;對查找到的所述目標文件夾下的文件執(zhí)行所述文件操作指令指定的文件操作。優(yōu)選地,所述文件操作指令中包括所述業(yè)務(wù)子目錄的名稱和所述用戶根目錄的名稱。優(yōu)選地,所述文件操作指令通過以下方式獲?。焊鶕?jù)所述文件操作指令中的所述業(yè)務(wù)子目錄的名稱和所述用戶根目錄的名稱,使用一致性哈希算法,確定所述業(yè)務(wù)子目錄的名稱和所述用戶根目錄的名稱所在的服務(wù)器,并將所述文件操作指令發(fā)送給所述服務(wù)器;所述服務(wù)器接收并獲取所述文件操作指令。優(yōu)選地,當所述文件操作指令指定對文件進行移動時,該文件在其所在的用戶根目錄范圍內(nèi)移動。優(yōu)選地,當所述文件操作指令指定對文件進行修改時,該文件所在的服務(wù)器先對存儲器中的該文件進行修改,然后在緩存中對該文件進行相同的修改,或者刪除該文件在所述緩存中的數(shù)據(jù)。為了解決上述問題,本申請還公開了一種文件操作裝置,包括:獲取模塊,用于獲取分布式文件系統(tǒng)的文件操作指令,所述分布式文件系統(tǒng)中至少一個服務(wù)器的根目錄下設(shè)置有至少兩級子目錄,其中,第一級子目錄包括至少一個業(yè)務(wù)子目錄,第二級子目錄包括至少一個用戶根目錄,一個所述業(yè)務(wù)子目錄對應(yīng)于一個業(yè)務(wù),一個所述用戶根目錄對應(yīng)于一個用戶,一個所述業(yè)務(wù)子目錄和一個所述用戶根目錄在其所在的服務(wù)器上的名稱和級別固定,并且,一個所述用戶根目錄的數(shù)據(jù)完整地設(shè)置于一個服務(wù)器上;查找模塊,用于根據(jù)所述文件操作指令,使用所述業(yè)務(wù)子目錄的名稱和所述用戶根目錄的名稱查找目標文件夾;操作模塊,用于對查找到的所述目標文件夾下的文件執(zhí)行所述文件操作指令指定的文件操作。優(yōu)選地,所述文件操作指令中包括所述業(yè)務(wù)子目錄的名稱和所述用戶根目錄的名稱。優(yōu)選地,所述獲取模塊通過以下方式獲取文件操作指令:客戶端或所述分布式文件系統(tǒng)根據(jù)所述文件操作指令中的所述業(yè)務(wù)子目錄的名稱和所述用戶根目錄的名稱,使用一致性哈希算法,確定所述業(yè)務(wù)子目錄的名稱和所述用戶根目錄的名稱所在的服務(wù)器,并將所述文件操作指令發(fā)送給所述服務(wù)器;所述服務(wù)器的所述獲取模塊接收并獲取所述文件操作指令。優(yōu)選地,當所述文件操作指令指定對文件進行移動時,該文件在其所在的用戶根目錄范圍內(nèi)移動。優(yōu)選地,當所述文件操作指令指定對文件進行修改時,該文件所在的服務(wù)器的所述操作模塊先對所述服務(wù)器的存儲器中的該文件進行修改,然后在所述服務(wù)器的緩存中對該文件進行相同的修改,或者刪除該文件在所述緩存中的數(shù)據(jù)。與現(xiàn)有技術(shù)相比,本申請具有以下優(yōu)點:本申請在對業(yè)務(wù)行為進行了充分分析的基礎(chǔ)上,在分布式文件系統(tǒng),尤其是在海量小文件的分布式文件系統(tǒng)的服務(wù)器中建立固定的兩級目錄,且使每一個用戶根目錄的數(shù)據(jù)都完整地設(shè)置于一個服務(wù)器上,實現(xiàn)了采用固定目錄前輟對分布式文件系統(tǒng)的文件操作,這種只在一定范圍內(nèi)的分布式文件系統(tǒng)的文件操作有效滿足了元數(shù)據(jù)的原子性和一致性需求,使得分布式文件系統(tǒng)既能最大限度的滿足業(yè)務(wù)需求,又簡化了元數(shù)據(jù)集群設(shè)計,且實現(xiàn)簡單,有效降低了元數(shù)據(jù)集群設(shè)計的實現(xiàn)成本。附圖說明圖1是根據(jù)本申請實施例一的一種文件操作方法的步驟流程圖;圖2是根據(jù)本申請實施例二的一種文件操作方法的步驟流程圖;圖3是圖2所示實施例中的一種文件系統(tǒng)目錄的示意圖;圖4是根據(jù)本申請實施例三的一種文件操作方法的步驟流程圖;圖5是根據(jù)本申請實施例四的一種文件操作裝置的結(jié)構(gòu)框圖。具體實施方式為使本申請的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附圖和具體實施方式對本申請作進一步詳細的說明。實施例一參照圖1,其示出了根據(jù)本申請實施例一的一種文件操作方法的步驟流程圖。本實施例的文件操作方法包括以下步驟:步驟S102:獲取分布式文件系統(tǒng)的文件操作指令。其中,該分布式文件系統(tǒng)中至少一個服務(wù)器的根目錄下設(shè)置有至少兩級子目錄,第一級子目錄包括至少一個業(yè)務(wù)子目錄,第二級子目錄包括至少一個用戶根目錄,一個業(yè)務(wù)子目錄對應(yīng)于一個業(yè)務(wù),一個用戶根目錄對應(yīng)于一個用戶,一個業(yè)務(wù)子目錄和一個用戶根目錄在其所在的服務(wù)器上的名稱和級別固定,并且,一個用戶根目錄的數(shù)據(jù)完整地設(shè)置于一個服務(wù)器上。也即,在本申請中,至少有一個分布式文件系統(tǒng)中的服務(wù)器上設(shè)置有固定的兩級子目錄。第一級子目錄直接設(shè)置于服務(wù)器的根目錄下,為業(yè)務(wù)目錄,其對應(yīng)于一個業(yè)務(wù)。第二級子目錄設(shè)置于第一級子目錄下,為一個用戶名目錄,其對應(yīng)于一個用戶。本申請中,用戶使用廣義的概念,其有可能是一個實際的用戶,如淘寶網(wǎng)上的賣家A,也有可能是一個非實際用戶,如根據(jù)設(shè)定規(guī)則拆分出來的業(yè)務(wù)等等。此外,本申請中,一個用戶的所有數(shù)據(jù)(包括下級子目錄和文件)完整地設(shè)置于一個服務(wù)器上,以避免跨服務(wù)器操作和查找。本實施例中,獲取分布式文件系統(tǒng)的文件操作指令的服務(wù)器具有上述設(shè)置。步驟S104:根據(jù)文件操作指令,使用業(yè)務(wù)子目錄的名稱和用戶根目錄的名稱查找目標文件夾。步驟S106:對查找到的目標文件夾下的文件執(zhí)行文件操作指令指定的文件操作。其中,文件操作為本領(lǐng)域技術(shù)人員的常規(guī)操作,如改名、增加、刪除等等。通過本實施例,在對業(yè)務(wù)行為進行了充分分析的基礎(chǔ)上,在分布式文件系統(tǒng),尤其是海量小文件的分布式文件系統(tǒng)的服務(wù)器中建立固定的兩級目錄,且使每一個用戶根目錄的數(shù)據(jù)都完整地設(shè)置于一個服務(wù)器上,實現(xiàn)了采用固定目錄前輟對分布式文件系統(tǒng)的文件操作,這種只在一定范圍內(nèi)的分布式文件系統(tǒng)的文件操作,有效滿足了元數(shù)據(jù)的原子性和一致性需求,使得分布式文件系統(tǒng)既能最大限度的滿足業(yè)務(wù)需求,又簡化了元數(shù)據(jù)集群設(shè)計,且實現(xiàn)簡單,有效降低了元數(shù)據(jù)集群設(shè)計的實現(xiàn)成本。實施例二參照圖2,其示出了根據(jù)本申請實施例二的一種文件操作方法的步驟流程圖。本實施例的文件操作方法包括以下步驟:步驟S202:獲得文件操作指令,根據(jù)該文件操作指令中的業(yè)務(wù)子目錄的名稱和用戶根目錄的名稱,確定文件操作指令的目標服務(wù)器。其中,該文件操作指令中攜帶有業(yè)務(wù)子目錄的名稱和用戶根目錄的名稱。通過在文件操作指令中攜帶有業(yè)務(wù)子目錄的名稱和用戶根目錄的名稱,可以快速、方便地確定該文件操作指令的目標服務(wù)器。確定目標服務(wù)器的操作可以在客戶端完成,也可以由分布式文件系統(tǒng)完成,當然,不限于此,本領(lǐng)域技術(shù)人員還可以根據(jù)實際需要靈活設(shè)置。當確定目標服務(wù)器的操作由分布式文件系統(tǒng)完成時,文件操作指令由客戶端發(fā)出,可以由分布式文件系統(tǒng)中的任意服務(wù)器接收并處理客戶端發(fā)出的文件操作指令,也可以由分布式文件系統(tǒng)中設(shè)置的專用于接收并處理客戶端發(fā)送的文件操作指令的設(shè)備或模塊來完成。文件操作指令的目標服務(wù)器也即業(yè)務(wù)子目錄的名稱和用戶根目錄的名稱所在的服務(wù)器。確定目標服務(wù)器的方法可以由本領(lǐng)域技術(shù)人員根據(jù)實際情況靈活設(shè)置。優(yōu)選地,使用哈希算法。更優(yōu)選地,使用一致性哈希算法。通過采用一致性哈希算法,可以容易地實現(xiàn)分布式文件系統(tǒng)的擴容。步驟S204:將該文件操作指令發(fā)送給該目標服務(wù)器。步驟S206:目標服務(wù)器接收文件操作指令,獲取其中的業(yè)務(wù)子目錄的名稱和用戶根目錄的名稱。本實施例中,目標服務(wù)器上設(shè)置有固定的兩級目錄,根目錄下設(shè)置有第一級子目錄,即業(yè)務(wù)目錄,第一級子目錄下設(shè)置有第二級子目錄,即用戶根目錄,用戶根目錄下為該用戶的所有數(shù)據(jù)(包括其子目錄和文件)。圖3示出了本實施例的一種文件系統(tǒng)目錄的示意圖。如圖3所示,系統(tǒng)的根為0級目錄,業(yè)務(wù)層為1級目錄,包括業(yè)務(wù)1、業(yè)務(wù)2、業(yè)務(wù)3......業(yè)務(wù)N,到具體的用戶是2級目錄,包括用戶1根目錄、用戶2根目錄、用戶3根目錄、......、用戶N根目錄。每一個用戶根目錄下為該用戶的數(shù)據(jù),如用戶1根目錄下為用戶1建立的子目錄和文件(如圖片、訂單等等)。任意一個一級目錄即業(yè)務(wù)層目錄或二級目錄即用戶目錄,在其所在的服務(wù)器上的名稱和級別都是固定的。步驟S208:目標服務(wù)器根據(jù)業(yè)務(wù)子目錄的名稱和用戶根目錄的名稱查找確定目標文件夾。以業(yè)務(wù)子目錄的名稱為“業(yè)務(wù)2”,用戶根目錄的名稱為“用戶1根目錄”為例,則本步驟中,目標服務(wù)器能夠根據(jù)業(yè)務(wù)子目錄的名稱和用戶根目錄的名稱快速查找并確定本次文件操作的目標文件夾的位置。步驟S210:目標服務(wù)器對確定的目標文件夾下的文件執(zhí)行文件操作指令指定的文件操作。本實施例中,文件操作指令指定的操作為本領(lǐng)域技術(shù)人員的常規(guī)文件操作,如增加、刪除、修改、移動等等。需要說明的是,本申請中,如無特殊說明,文件即可指具體文件,也可以是文件目錄。優(yōu)選地,當文件操作指令指定對文件進行移動時,該文件在其所在的用戶根目錄范圍內(nèi)移動。這樣,文件或者目錄的移動操作是不可以跨2級目錄的。通過這種設(shè)置,可以方便地把一個2級目錄的所有信息放到一臺服務(wù)器上處理(雖然用戶數(shù)量是億級別的,但是一個用戶所擁有的文件則比較有限),從而達到了更新的一致性。優(yōu)選地,當文件操作指令指定對文件進行修改時,該文件所在的服務(wù)器先對其存儲器中的該文件進行修改,然后再在其緩存中對該文件進行相同的修改,或者刪除該文件在其緩存中的數(shù)據(jù)。通過先修改存儲器中數(shù)據(jù),再修改緩存中數(shù)據(jù),實現(xiàn)了數(shù)據(jù)更新的一致性,避免了臟數(shù)據(jù)的產(chǎn)生。本實施例通過對業(yè)務(wù)的分析,發(fā)現(xiàn)其實對于一個海量小文件的分布式系統(tǒng),不需要在全局范圍內(nèi)支持目錄和文件的操作,如移動和改名操作等。也就是說,可以只在一定范圍內(nèi)實現(xiàn)文件操作的原子性和一致性,就能滿足系統(tǒng)和用戶的需求。由此解決了分布式文件系統(tǒng)在滿足業(yè)務(wù)需求的情況下,降低元數(shù)據(jù)集群的設(shè)計復(fù)雜度和實現(xiàn)成本的問題,使得分布式文件系統(tǒng)既能最大限度的滿足業(yè)務(wù)需求,又簡化了元數(shù)據(jù)集群設(shè)計,且實現(xiàn)簡單,有效降低了元數(shù)據(jù)集群設(shè)計的實現(xiàn)成本。同時,還可以采用一致性哈希的算法解決處理能力的擴容問題。實施例三參照圖4,其示出了根據(jù)本申請實施例三的一種文件操作方法的步驟流程圖。本實施例中,分布式文件系統(tǒng)通過元數(shù)據(jù)集群(Metacluster)實現(xiàn)。元數(shù)據(jù)集群(Metacluster)的設(shè)計分為兩個部分,一個是提供目錄解析邏輯的元數(shù)據(jù)服務(wù)器(metaserver),一個是提供存儲的元數(shù)據(jù)存儲器(metastore),也可以為元數(shù)據(jù)存儲服務(wù)器。元數(shù)據(jù)服務(wù)器(metaserver)把元數(shù)據(jù)存儲器(metastore)的細節(jié)屏蔽掉,客戶端(client)只與元數(shù)據(jù)服務(wù)器(metaserver)交互。另外,本實施例的元數(shù)據(jù)服務(wù)器(metaserver)采用圖3所示的文件系統(tǒng)目錄。本實施例的文件操作方法包括以下步驟:步驟S302:客戶端(client)根據(jù)文件操作指令中的業(yè)務(wù)名(業(yè)務(wù)子目錄的名稱),用戶名(用戶根目錄的名稱),采用哈希算法得到一個哈希值。步驟S304:然后,客戶端采用一致性哈希的方式,通過查表找到處理該服務(wù)的元數(shù)據(jù)服務(wù)器(metaserver),將文件操作指令發(fā)給這個元數(shù)據(jù)服務(wù)器(metaserver)。步驟S306:元數(shù)據(jù)服務(wù)器(metaserver)先嘗試在自己的緩存里完成對指令的解析,如果緩存沒有命中,則向后端的存儲器請求數(shù)據(jù),并放入自己的緩存。步驟S308:元數(shù)據(jù)服務(wù)器(metaserver)執(zhí)行文件操作指令指定的文件操作,然后應(yīng)答客戶端。對于修改操作,元數(shù)據(jù)服務(wù)器(metaserver)先修改后端的存儲器,然后修改自己的緩存信息(或者直接失效掉相關(guān)信息),最后應(yīng)答客戶端。本實施例中,元數(shù)據(jù)存儲器(metastore)可以采用成熟的數(shù)據(jù)庫來簡化設(shè)計,在此不再贅述。通過本實施例,一個業(yè)務(wù)下一個用戶的所有元數(shù)據(jù)信息一定是在同一臺元數(shù)據(jù)服務(wù)器(metaserver)上進行處理的,這樣在進行操作時,這臺元數(shù)據(jù)服務(wù)器(metaserver)就可以通過鎖機制等來保證原子性和一致性。并且,元數(shù)據(jù)服務(wù)器(metaserver)緩存了元數(shù)據(jù)信息,可以大大提升訪問速度。此外,采用一致性哈希算法,系統(tǒng)可以很容易地擴容。實施例四參照圖5,其示出了根據(jù)本申請實施例四的一種文件操作裝置的結(jié)構(gòu)框圖。本實施例的文件操作裝置包括:獲取模塊402,用于獲取分布式文件系統(tǒng)的文件操作指令,該分布式文件系統(tǒng)中至少一個服務(wù)器的根目錄下設(shè)置有至少兩級子目錄,其中,第一級子目錄包括至少一個業(yè)務(wù)子目錄,第二級子目錄包括至少一個用戶根目錄,一個業(yè)務(wù)子目錄對應(yīng)于一個業(yè)務(wù),一個用戶根目錄對應(yīng)于一個用戶,一個業(yè)務(wù)子目錄和一個用戶根目錄在其所在的服務(wù)器上的名稱和級別固定,并且,一個用戶根目錄的數(shù)據(jù)完整地設(shè)置于一個服務(wù)器上;查找模塊404,用于根據(jù)文件操作指令,使用業(yè)務(wù)子目錄的名稱和用戶根目錄的名稱查找目標文件夾;操作模塊406,用于對查找到的目標文件夾下的文件執(zhí)行文件操作指令指定的文件操作。優(yōu)選地,文件操作指令中包括業(yè)務(wù)子目錄的名稱和用戶根目錄的名稱。優(yōu)選地,獲取模塊402通過以下方式獲取文件操作指令:客戶端或分布式文件系統(tǒng)根據(jù)文件操作指令中的業(yè)務(wù)子目錄的名稱和用戶根目錄的名稱,使用一致性哈希算法,確定業(yè)務(wù)子目錄的名稱和用戶根目錄的名稱所在的服務(wù)器,并將文件操作指令發(fā)送給該服務(wù)器;該服務(wù)器的獲取模塊402接收并獲取文件操作指令。優(yōu)選地,當文件操作指令指定對文件進行移動時,該文件在其所在的用戶根目錄范圍內(nèi)移動。優(yōu)選地,當文件操作指令指定對文件進行修改時,該文件所在的服務(wù)器的操作模塊先對該服務(wù)器的存儲器中的該文件進行修改,然后在該服務(wù)器的緩存中對該文件進行相同的修改,或者刪除該文件在該服務(wù)器的緩存中的數(shù)據(jù)。本實施例的文件操作裝置用于實現(xiàn)前述方法實施例中相應(yīng)的文件操作方法,并具有相應(yīng)的方法實施例的有益效果,在此不再贅述。本申請中,通過業(yè)務(wù)分析發(fā)現(xiàn),在一個分布式系統(tǒng)承載著多項應(yīng)用,每項應(yīng)用要服務(wù)于上億用戶的場景下,只要支持在一個特定應(yīng)用下一個特定用戶的名字空間內(nèi)的文件操作,如rename(改名)和mv(移動)等,并保證這種操作的原子性和一致性就可以滿足業(yè)務(wù)的需求。因此,本申請設(shè)置固定兩級目錄結(jié)構(gòu),采用固定目錄前綴的方式,也就是前兩級目錄分別是業(yè)務(wù)名和用戶名,對于每個業(yè)務(wù)用某種邏輯產(chǎn)生的用戶,每次對文件的訪問必須指定業(yè)務(wù)名和用戶名,mv操作不能跨用戶的方式,實現(xiàn)分布式系統(tǒng)的文件操作。由此,本申請的技術(shù)方案針對海量小文件的分布式文件系統(tǒng),在一個特定范圍內(nèi)對目錄和文件的操作提供了原子性和一致性,能很好的滿足業(yè)務(wù)需求,同時大大簡化了設(shè)計和實現(xiàn)。并且,本申請的技術(shù)方案還通過一致性哈希算法解決分布式文件系統(tǒng)的擴容問題。本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。對于裝置實施例而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實施例的部分說明即可。以上對本申請所提供的一種分布式文件系統(tǒng)的文件操作方法和裝置進行了詳細介紹,本文中應(yīng)用了具體個例對本申請的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本申請的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請的思想,在具體實施方式及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本申請的限制。