一種支持多用戶同時讀寫的網盤系統構建方法
【專利摘要】本發明公開了一種支持多用戶同時讀寫的網盤系統構建方法。網盤系統包括網盤服務器裝置、網盤客戶端裝置及網絡裝置;網盤系統中文件的文件數據塊可分散存儲在網盤服務器和多個用戶終端中;網盤服務器中記錄每個文件的最新元信息及每個數據塊的物理位置,并通過事件訂閱機制通知已訂閱該文件數據塊變更事件且在線的用戶終端。用戶終端訪問某文件的指定文件數據塊時,若該文件數據塊不在網盤服務器中,只需將該文件數據塊而不是該文件的全部數據塊從其所在的用戶終端傳遞到網盤服務器中然后再傳遞到待訪問該文件的用戶終端設備上。本發明有效地提高多用戶同時讀寫網盤系統的效率,尤其是多個用戶多個終端設備對網盤系統中同一文件的并發訪問。
【專利說明】
一種支持多用戶同時讀寫的網盤系統構建方法
技術領域
[0001]本發明屬于計算機領域,主要關注提高多用戶、多終端設備下訪問網盤系統中文件的響應速度,降低對網盤系統中文件訪問的延遲。
【背景技術】
[0002]目前各類網盤系統提高網盤客戶端的文件訪問速度主要采用針對整個文件或者文件數據塊計算MD5或者SHA數字摘要值,若對應的整個文件或者文件數據塊的數字摘要值與已存在的某個文件或者文件數據塊的數字摘要值相同,則網盤客戶端無須再與網盤服務器針對該文件或者文件數據塊進行數據傳輸。但是對于其它網盤客戶端而言,仍需要將整個文件全部更新到網盤服務器然后再將整個文件全部更新到其它網盤客戶端后,該網盤客戶端才能訪問該文件,因此網盤系統中文件訪問延遲很大。
【發明內容】
[0003]本發明目的是為了提高多用戶、多終端下高效訪問網盤系統中文件,尤其是多個用戶、多個終端對網盤系統中同一文件的并發訪問。本發明給出一種支持多用戶同時讀寫的網盤系統以及網盤系統文件訪問方法。
[0004]本發明公開了一種支持多用戶同時讀寫的網盤系統,所述系統包括網盤服務器裝置、網盤客戶端裝置及網絡裝置;網盤系統中文件的文件數據塊可分散存儲在網盤服務器和多個用戶終端中;網盤服務器中記錄每個文件的最新元信息及每個數據塊的物理位置,并通過事件訂閱機制通知已訂閱該文件數據塊變更事件且在線的用戶終端。本發明公開了一種支持多用戶同時讀寫的網盤系統的文件訪問方法,所述方法包括讀文件方法和寫文件方法。用戶終端訪問某文件的指定文件數據塊時,若該文件數據塊不在網盤服務器中,只需將該文件數據塊而不是該文件的全部數據塊從其所在的用戶終端傳遞到網盤服務器中然后再傳遞到待訪問該文件的用戶終端設備上。
[0005]本發明技術方案
[0006]1.—種支持多用戶多終端同時讀寫的網盤系統,所述網盤系統包括網盤服務器裝置、網盤客戶端裝置以及網絡裝置;網盤服務器裝置,主要用于網盤系統存儲和管理所有文件的元信息和文件數據塊,存儲、管理和認證所有用戶元信息,存儲、管理和認證所有用戶終端設備元信息,并為網盤客戶端裝置提供文件、文件數據塊檢索、訪問和變更服務;網盤客戶端裝置,主要用于網盤客戶端存儲所訪問文件的全部或者部分元數據、全部或者部分文件數據塊,與網盤服務器裝置進行文件數據同步,并為網盤客戶端中應用程序提供文件訪問服務;網絡裝置負責為網盤服務器裝置和網盤客戶端裝置之間的數據通信提供服務;
[0007]其中,
[0008]網盤服務器裝置包括網絡服務模塊、事件服務模塊、終端服務模塊、用戶服務模塊、目錄服務模塊、文件服務模塊、文件數據塊服務模塊、基礎數據塊服務模塊、全局參數服務模塊和存儲區;存儲區模塊負責網盤服務器裝置內數據的持久存儲,基礎數據塊服務模塊直接與存儲區連接從而實現對網盤服務器裝置內數據塊的管理;事件服務模塊、終端服務模塊、用戶服務模塊、目錄服務模塊、文件服務模塊、文件數據塊服務模塊和全局參數服務模塊分別與基礎數據塊服務模塊連接并通過基礎數據塊服務模塊來獲得各自元信息和數據塊的存儲;網絡服務模塊提供網絡通信服務,事件服務模塊直接與網絡服務模塊連接從而獲得網絡通信服務;終端服務模塊、用戶服務模塊、目錄服務模塊、文件服務模塊和文件數據塊服務模塊分別與事件服務模塊連接并通過事件服務模塊為網盤客戶端裝置提供服務,事件服務模塊與基礎數據塊服務模塊連接從而實現事件數據的存儲;終端服務模塊負責存儲、管理和認證所有用戶終端設備元信息,終端服務模塊與事件服務模塊連接從而對外提供終端服務,終端服務模塊與基礎數據塊服務模塊連接從而實現元信息的存儲;用戶服務模塊負責存儲、管理和認證所有用戶元信息,用戶服務模塊與事件服務模塊連接從而對外提供用戶服務,用戶服務模塊與基礎數據塊服務模塊連接從而實現元信息的存儲;目錄服務模塊負責網盤系統中目錄信息的管理,目錄服務模塊與文件服務模塊連接而實現對指定目錄內的文件服務,目錄服務模塊與事件服務模塊連接從而對外提供目錄服務,目錄服務模塊與基礎數據塊服務模塊連接從而實現元信息的存儲;文件服務模塊負責網盤系統中文件信息的管理,文件服務模塊與目錄服務模塊連接并向目錄服務模塊提供文件服務,文件服務模塊與文件數據塊服務模塊連接而實現對指定文件的文件數據塊服務,文件服務模塊與事件服務模塊連接從而對外提供文件服務,文件服務模塊與基礎數據塊服務模塊連接從而實現元信息的存儲;文件數據塊服務模塊負責網盤系統中文件的數據塊信息的管理,文件數據塊服務模塊與文件服務模塊連接并向文件服務模塊提供文件數據塊服務,文件數據塊服務模塊與事件服務模塊連接從而對外提供文件數據塊服務,文件數據塊服務模塊與基礎數據塊服務模塊連接從而實現元信息和文件數據塊存儲;全局參數服務模塊負責網盤系統中網盤服務器裝置內全局參數的管理,全局參數服務模塊與基礎數據塊服務模塊連接從而實現全局參數存儲,網盤服務器裝置內全局參數包括數據塊大小、數據塊總數、起始數據塊ID、截止數據塊ID、空閑數據塊池、空閑元數據塊池、空閑文件數據塊池、用戶元信息池、終端元信息池、文件元信息池、文件數據塊元信息池和根目錄文件ID;
[0009]網盤客戶端裝置包括應用程序、文件系統接口層模塊、網絡服務模塊、事件服務模塊、目錄服務模塊、文件服務模塊、文件數據塊服務模塊、基礎數據塊服務模塊、全局參數服務模塊和存儲區;應用程序為網盤客戶端裝置上運行的第三方應用程序,應用程序與文件系統接口層模塊連接從而獲得文件系統訪問服務;文件系統接口層模塊分別與應用程序、目錄服務模塊和文件服務模塊連接,文件系統接口層模塊通過調用目錄服務模塊和文件服務模塊為上層的應用程序提供網盤系統的文件訪問服務;存儲區模塊負責網盤客戶端裝置內數據的持久存儲,基礎數據塊服務模塊直接與存儲區連接從而實現對網盤客戶端裝置內數據塊的管理;事件服務模塊、目錄服務模塊、文件服務模塊、文件數據塊服務模塊和全局參數服務模塊分別與基礎數據塊服務模塊連接并通過基礎數據塊服務模塊來獲得各自元信息和數據塊的存儲;網絡服務模塊提供網絡通信服務,事件服務模塊直接與網絡服務模塊連接從而獲得網絡通信服務;目錄服務模塊、文件服務模塊和文件數據塊服務模塊分別與事件服務模塊連接并通過事件服務模塊來訪問網盤服務器裝置和其它網盤客戶端裝置,事件服務模塊與基礎數據塊服務模塊連接從而實現事件數據的存儲;目錄服務模塊負責網盤系統中網盤客戶端裝置內目錄信息的管理,目錄服務模塊與文件服務模塊連接而實現對指定目錄內的文件服務,目錄服務模塊與事件服務模塊連接從而與網盤服務器裝置和其它網盤客戶端裝置進行數據同步,目錄服務模塊與基礎數據塊服務模塊連接從而實現元信息的存儲;文件服務模塊負責網盤系統中網盤客戶端裝置內文件信息的管理,文件服務模塊與目錄服務模塊連接并向目錄服務模塊提供文件服務,文件服務模塊與文件數據塊服務模塊連接而實現對指定文件的文件數據塊服務,文件服務模塊與事件服務模塊連接從而與網盤服務器裝置和其它網盤客戶端裝置進行數據同步,文件服務模塊與基礎數據塊服務模塊連接從而實現元信息的存儲;文件數據塊服務模塊負責網盤系統中網盤客戶端裝置內文件的數據塊信息的管理,文件數據塊服務模塊與文件服務模塊連接并向文件服務模塊提供文件數據塊服務,文件數據塊服務模塊與事件服務模塊連接從而與網盤服務器裝置和其它網盤客戶端裝置進行數據同步,文件數據塊服務模塊與基礎數據塊服務模塊連接從而實現元信息和文件數據塊存儲;全局參數服務模塊負責網盤系統中網盤客戶端裝置內全局參數的管理,全局參數服務模塊與基礎數據塊服務模塊連接從而實現全局參數存儲,網盤客戶端裝置內全局參數包括數據塊大小、數據塊總數、起始數據塊ID、截止數據塊ID、空閑數據塊池、空閑元數據塊池、空閑文件數據塊池、文件元信息池、文件數據塊元信息池、網盤服務器設備元信息、本地終端設備元信息、用戶元信息和根目錄文件ID,其中網盤服務器設備元信息和本地終端設備元信息的數據結構相同;
[0010]網盤服務器裝置和網盤客戶端裝置中關于終端設備的核心數據結構為終端設備元信息,終端設備元信息包括設備ID、設備元信息頭、網絡地址和網絡端口,其中設備ID為該終端設備的唯一標識符,設備元信息頭包括信息版本標記、設備名稱、設備物理類型、設備網絡協議和狀態;
[0011]網盤服務器裝置和網盤客戶端裝置中關于用戶的核心數據結構為用戶元信息,用戶元信息包括用戶ID、用戶元信息頭和用戶根目錄文件ID,其中用戶ID為該用戶的唯一標識符,用戶元信息頭包括信息版本標記、用戶名、用戶認證信息、狀態;
[0012]網盤服務器裝置和網盤客戶端裝置中關于目錄和文件的核心數據結構包括文件元信息、目錄元信息、普通文件元信息和本地文件數據塊元信息;文件元信息是目錄和普通文件共同的元信息,文件元信息包括文件ID、副本ID、文件公共元信息和擴展元信息,其中文件ID和副本ID共同決定文件的唯一標識;文件公共元信息包括元信息版本標記、文件類型、權限信息、創建修改時間、主控設備ID和狀態,其中文件類型用來區分該文件是否為目錄文件,主控設備ID代表該文件當前最新全局版本的文件數據塊所在的終端設備;目錄元信息包括目錄元信息頭和目錄文件項池,其中目錄元信息頭包括數據塊總數、目錄文件項總數、目錄文件項摘要和狀態,目錄文件項池存儲該目錄下所有目錄文件項,目錄文件項包括文件ID和文件名;普通文件元信息包括普通文件元信息頭和全局文件數據塊元信息序列池,其中普通文件元信息頭包括數據塊總數、文件大小、文件體摘要和狀態,全局文件數據塊元信息序列池存儲該文件所有文件數據塊對應的全局文件數據塊元信息的有序集合;全局文件數據塊元信息包括全局文件數據塊ID、本地文件數據塊ID、全局版本標記、本地版本標記、狀態和網絡存儲的設備ID的池,其中網絡存儲的設備ID的池存儲該文件數據塊的最新數據的終端設備ID;本地文件數據塊元信息包括數據塊摘要、數據塊ID、引用數和狀態,其中引用數表明該本地文件數據塊屬于不同文件的數目,只有當該引用數為零時方回收該本地文件數據塊元為空閑文件數據塊。
[0013]所述系統中,網盤系統中每個文件以數據塊為單位存儲,文件的所有數據塊分散存儲在網盤服務器裝置和網盤客戶端裝置中;針對網盤系統中的每一個文件,網盤服務器裝置中存儲該文件相關的各種元信息,網盤服務器裝置無需存儲該文件的所有文件數據塊的數據;網盤服務器裝置中該文件的全局文件數據塊元信息序列池包含了該文件的所有本地文件數據塊ID號和網絡存儲的設備ID,其中,本地文件數據塊ID號為該文件數據塊在網盤服務器裝置中的位置信息,網絡存儲的設備ID為該文件數據塊在其它網盤客戶端裝置的位置信息;針對某個網盤客戶端裝置,該網盤客戶端裝置只需存儲該網盤客戶端裝置的上層應用程序所要訪問網盤系統中文件的相關各種元信息和該文件中所要訪問的部分文件數據塊,網盤客戶端裝置中該文件的全局文件數據塊元信息序列池包含了該文件的所有全局文件數據塊ID號、所有本地文件數據塊ID號和網絡存儲的設備ID,其中,本地文件數據塊ID號為該文件數據塊網盤客戶端裝置中的位置信息,網絡存儲的設備ID為該文件數據塊在其它網盤客戶端裝置或者網盤服務器裝置的位置信息,全局文件數據塊ID號為該文件數據塊在網盤服務器裝置的位置信息。
[0014]所述系統中,網盤系統中文件只能有一個全局文件版本,全局文件版本的副本ID為空;網盤系統中文件可以有零個或者多個文件副本,同一個文件的文件副本各自擁有不同的非空副本ID;全局文件版本和文件副本擁有相同的文件ID,每個網盤客戶端裝置只能看到網盤系統中該文件的全局文件版本和該終端設備上該文件的文件副本。
[0015]所述系統中,當網盤客戶端裝置修改某文件時,若該文件在該網盤客戶端裝置沒有文件副本則該網盤客戶端裝置首先建立該文件的文件副本,然后針對該文件副本進行修改,對該文件副本修改后該網盤客戶端裝置可隨時向網盤服務器裝置申請成為該文件的全局文件版本;當網盤客戶端裝置將某文件的本地文件副本的文件元信息提交到網盤服務器裝置并且被網盤服務器裝置接受為該文件的全局文件版本時,該網盤客戶端裝置將刪除該文件在本地的全局文件版本,并且該網盤客戶端裝置將該文件的本地文件副本轉為在本地的全局文件版本;當網盤客戶端裝置將某文件的本地文件副本的文件元信息提交到網盤服務器裝置并且不被網盤服務器裝置接受為該文件的全局文件版本時,該網盤客戶端裝置可以將該文件的本地文件副本通過改變文件名字從而成為一個新文件的文件副本,該網盤客戶端裝置對該新文件的文件副本可隨時向網盤服務器裝置申請成為該新文件的全局文件版本。
[0016]所述系統中,網盤客戶端裝置和網盤服務器裝置之間文件訪問和同步服務采用事件訂閱機制,事件接收和處理統一由各自的事件服務模塊來完成;所有事件采用統一的事件信息結構體,事件信息結構體包括事件ID、事件來源類型、事件業務類型、事件源終端ID、事件源執行體ID、事件目的終端ID、事件時間標記、事件回執通知標記、事件內容體長度、事件內容體摘要、事件頭摘要和事件內容體,其中事件ID為事件的唯一標識;事件來源類型包括網盤服務器發送給網盤客戶端的事件類型、網盤客戶端發送給網盤服務器的事件類型、網盤服務器發送給本地的事件類型和網盤客戶端發送給本地的事件類型;事件業務類型包括文件的元信息及文件塊的創建、修改、刪除、下載和上傳的業務,也包括目錄元信息的創建、修改、刪除、下載和上傳的業務,也包括用戶注冊、注銷、更新、認證和查詢的業務,也包括終端設備的登記、更新和查詢的業務,事件服務模塊根據不同的事件業務類型來訪問對應業務服務模塊來執行事件相關業務。
[0017]所述系統中,網盤客戶端裝置和網盤服務器裝置中事件服務模塊的處理流程如下:
[0018]第I步、接收事件請求;
[0019]第2步、分析事件類型,如果事件為本地執行事件,則執行第5步,否則執行第3步;
[0020]第3步、事件不是遠程執行事件,則執行第10步,否則執行第4步;
[0021]第4步、該事件通過網絡發送到指定網絡設備,并執行第6步;
[0022 ]第5步、在本地調用相關模塊執行該事件;
[0023]第6步、是否通知事件源,如果無需通知事件源則執行第10步,否則執行第7步;
[0024]第7步、事件源是否為遠程,如果事件源是遠程則執行9步,否則執行第8步;
[0025]第8步、將該事件回執通知給本地事件源執行體,并執行第10步;
[0026]第9步、將該事件回執通知通過網絡發送到指定網絡設備,并執行第10步;
[0027]第10步、事件處理完畢返回。
[0028]所述系統中,用戶從網盤客戶端裝置登錄到網盤服務器裝置時需要通過網盤服務器裝置的認證,當用戶及網盤客戶端裝置通過網盤服務器裝置認證后,網盤服務器將用戶及網盤客戶端裝置的登錄信息記下來并跟蹤用戶退出事件,該登錄信息可記錄在“用戶登錄表”中,用戶登錄表中包括用戶ID、終端ID、網絡物理地址、登錄時間、退出時間和狀態;當網盤系統中網盤服務器裝置內某個文件信息被修改,則網盤服務器裝置向擁有該文件的所有在線網盤客戶端裝置發送“文件更新事件”,從而使得相關在線網盤客戶端裝置可以及時更新該文件元信息和文件數據塊。
[0029]2.—種支持多用戶多終端同時讀寫的網盤系統的讀文件方法,網盤客戶端裝置中“應用程序”讀取網盤系統中指定文件的指定文件數據到指定內存空間的方法包括具體步驟如下:
[0030]第I步、網盤客戶端裝置中“文件系統接口層”接收來自上層“應用程序”的讀取網盤系統中指定文件的指定偏移量位置及長度的文件數據到指定內存空間的請求,并將該讀請求轉化為讀取網盤系統中指定文件的指定第i塊文件數據塊內容到指定內存空間的讀請求;
[0031 ]第2步、網盤客戶端裝置的“文件服務”模塊讀取該文件的“文件元信息”,進一步獲取該指定第i塊文件數據塊的“全局文件數據塊ID號”和“本地文件數據塊ID號”;
[0032]第3步、根據第2步中文件數據塊的“本地文件數據塊ID號”,判斷該文件數據塊的內容是否在本地網盤客戶端裝置中存在,若存在則執行第4步,否則執行第5步;
[0033]第4步、根據第2步中文件數據塊的“本地文件數據塊ID號”讀取該數據塊的“本地文件數據塊元信息”,進一步判斷該“本地文件數據塊”的狀態是否有效,若該“本地文件數據塊”的狀態為有效,則執行第7步,否則執行第5步;
[0034]第5步、針對第2步中指定文件的該指定文件數據塊的“全局文件數據塊ID號”,向本地“事件服務模塊”發送“下載文件數據塊”事件,并在指定時間內等待該事件完成;
[0035]第6步、判斷第5步中“下載文件數據塊”事件是否完成,如完成則執行第7步,否則執行第9步;
[0036]第7步、重新讀取該文件的“文件元信息”,并獲得該文件數據塊的“全局文件數據塊ID號”和“本地文件數據塊ID號”;
[0037]第8步、根據該文件數據塊的“本地文件數據塊ID號”讀取對應的“本地文件數據塊元信息”從而獲得“本地數據塊ID”,讀取該本地數據塊到指定內存,并設置讀取指定文件的指定文件數據塊內容到指定內存空間的訪問請求成功信息,并進一步執行第10步;
[0038]第9步、設置讀取指定文件的指定文件數據塊內容到指定內存空間的訪問請求失敗信息,進一步執行第10步;
[0039]第10步、讀請求操作結束。
[0040]3.—種支持多用戶多終端同時讀寫的網盤系統的寫文件方法,網盤客戶端裝置中“應用程序”將新數據寫到網盤系統中指定文件的指定偏移量位置的方法包括具體步驟如下:
[0041]第I步、網盤客戶端裝置中“文件系統接口層”接收來自上層“應用程序”將新數據寫到網盤系統中指定文件的指定偏移量位置的請求,并將該寫請求轉化為將新數據寫到網盤系統中指定文件的指定第i塊文件數據塊的請求;
[0042]第2步、網盤客戶端裝置的“文件服務”模塊讀取該文件的“文件元信息”,進一步獲取該指定第i塊文件數據塊的“全局文件數據塊ID號”和“本地文件數據塊ID號”;
[0043]第3步、判斷第2步中該指定文件數據塊是否為新增數據塊,如果該指定文件數據塊是新增數據塊,則執行第9步,否則執行第4步;
[0044]第4步、判斷第2步中該指定文件數據塊是否將被完全寫覆蓋,如果該指定文件數據塊將被完全寫覆蓋,則執行第9步,否則執行第5步;
[0045]第5步、判斷第2步中該指定文件數據塊是否已在本地,如果該指定文件數據塊尚未在本地存儲中,則執行第7步,否則執行第6步;
[0046]第6步、判斷第2步中該指定文件數據塊的本地數據塊是否有效,如果該指定文件數據塊的本地數據塊有效,則執行第8步,否則執行第7步;
[0047]第7步、向網盤服務器裝置發送獲取第2步中該指定文件數據塊的事件、并等待第2步中該指定文件數據塊的數據被下載到本地,如果第2步中該指定文件數據塊的數據未能被下載到本地,則執行第12步,否則執行第8步;
[0048]第8步、獲取本地一個空閑數據塊作為新數據塊,并將第2步中該指定文件數據塊的原數據塊內容復制到該新數據塊,并進一步執行第1步;
[0049]第9步、獲取本地一個空閑數據塊作為新數據塊,并進一步執行第10步;
[0050]第10步、將第I步中新數據寫入新數據塊中,并更新新數據塊的元信息,設置寫數據塊成功;
[0051]第11步、向網盤服務器裝置發送“文件數據塊修改”事件,并進一步執行第13步;
[0052]第12步、設置寫數據塊失敗,并進一步執行第13步;
[0053]第13步、寫請求操作結束。
[0054]本發明的優點和積極效果:
[0055]本發明給出了一種支持多用戶同時讀寫的網盤系統以及構建方法。現有的網盤系統中,用戶在網盤客戶端系統中欲打開某個網盤系統中的文件時,必須首先將該文件的所有數據從網盤服務器端系統中全部下載下來才能打開,這種方式使用戶等待時間長;另外當用戶在網盤客戶端對某個網盤系統中的文件進行修改時,只能有一個網盤客戶端對同一個文件進行修改。上述問題導致在多個用戶、多終端情況下對同一個文件進行修改的用戶體驗非常不好。而本發明通過無需將文件的所有文件數據塊一次性上傳到網盤服務器的情況下可以對外提供文件的最新全局文件版本的訪問服務,因此可以有效地提高網盤系統中文件訪問的效率;以及本發明通過多文件副本機制,有效地支持多個用戶、多終端情況下對同一個文件的并行修改以及全局文件版本的轉化。
【附圖說明】
[0056]圖1是網盤系統的邏輯功能架構示意圖。
[0057]圖2是網盤系統中終端設備元信息數據結構示意圖。
[0058]圖3是網盤系統中用戶元信息數據結構示意圖。
[0059]圖4是網盤系統中用戶登錄數據結構示意圖。
[0060]圖5是網盤系統中文件及目錄核心元信息數據結構示意圖。
[0061 ]圖6是網盤系統中事件服務模塊事件處理過程示意圖。
[0062]圖7是網盤客戶端裝置上文件數據塊讀訪問流程圖。
[0063]圖8是網盤客戶端裝置上文件數據塊寫訪問流程圖。
【具體實施方式】
[0064]本發明提供了一種支持多用戶同時讀寫的網盤系統以及構建方法。為能進一步了解本發明的技術內容、特點及功效,茲列舉以下應用實例,并配合附圖詳細說明如下:
[0065]實施例1、一種支持多用戶同時讀寫的網盤系統
[0066]本發明提供了一種支持多用戶同時讀寫的網盤系統,具體包括如下:
[0067]網盤服務器裝置200、網盤客戶端裝置100以及網絡裝置300;網盤服務器裝置200,主要用于網盤系統存儲和管理所有文件的元信息和文件數據塊,存儲、管理和認證所有用戶元信息,存儲、管理和認證所有用戶終端設備元信息,并為網盤客戶端裝置提供文件、文件數據塊檢索、訪問和變更服務;網盤客戶端裝置100,主要用于網盤客戶端存儲所訪問文件的全部或者部分元數據、全部或者部分文件數據塊,與網盤服務器裝置進行文件數據同步,并為網盤客戶端中應用程序提供文件訪問服務;網絡裝置300負責為網盤服務器裝置200和網盤客戶端裝置100之間的數據通信提供服務;
[0068]其中,
[0069]網盤服務器裝置200包括網絡服務模塊210、事件服務模塊211、終端服務模塊230、用戶服務模塊240、目錄服務模塊250、文件服務模塊260、文件數據塊服務模塊270、基礎數據塊服務模塊280、全局參數服務模塊212和存儲區290;存儲區模塊290負責網盤服務器裝置200內數據的持久存儲,基礎數據塊服務模塊280直接與存儲區290連接從而實現對網盤服務器裝置200內數據塊的管理;事件服務模塊211、終端服務模塊230、用戶服務模塊240、目錄服務模塊250、文件服務模塊260、文件數據塊服務模塊270和全局參數服務模塊212分別與基礎數據塊服務模塊280連接并通過基礎數據塊服務模塊280來獲得各自元信息和數據塊的存儲;網絡服務模塊210提供網絡通信服務,事件服務模塊211直接與網絡服務模塊210連接從而獲得網絡通信服務;終端服務模塊230、用戶服務模塊240、目錄服務模塊250、文件服務模塊260和文件數據塊服務模塊270分別與事件服務模塊211連接并通過事件服務模塊211為網盤客戶端裝置100提供服務,事件服務模塊211與基礎數據塊服務模塊280連接從而實現事件數據的存儲;終端服務模塊230負責存儲、管理和認證所有用戶終端設備元信息,終端服務模塊230與事件服務模塊211連接從而對外提供終端服務,終端服務模塊230與基礎數據塊服務模塊280連接從而實現元信息的存儲;用戶服務模塊240負責存儲、管理和認證所有用戶元信息,用戶服務模塊240與事件服務模塊211連接從而對外提供用戶服務,用戶服務模塊240與基礎數據塊服務模塊280連接從而實現元信息的存儲;目錄服務模塊250負責網盤系統中目錄信息的管理,目錄服務模塊250與文件服務模塊260連接而實現對指定目錄內的文件服務,目錄服務模塊250與事件服務模塊211連接從而對外提供目錄服務,目錄服務模塊250與基礎數據塊服務模塊280連接從而實現元信息的存儲;文件服務模塊260負責網盤系統中文件信息的管理,文件服務模塊260與目錄服務模塊250連接并向目錄服務模塊250提供文件服務,文件服務模塊260與文件數據塊服務模塊270連接而實現對指定文件的文件數據塊服務,文件服務模塊260與事件服務模塊211連接從而對外提供文件服務,文件服務模塊260與基礎數據塊服務模塊280連接從而實現元信息的存儲;文件數據塊服務模塊270負責網盤系統中文件的數據塊信息的管理,文件數據塊服務模塊270與文件服務模塊260連接并向文件服務模塊260提供文件數據塊服務,文件數據塊服務模塊270與事件服務模塊211連接從而對外提供文件數據塊服務,文件數據塊服務模塊270與基礎數據塊服務模塊280連接從而實現元信息和文件數據塊存儲;全局參數服務模塊212負責網盤系統中網盤服務器裝置200內全局參數的管理,全局參數服務模塊212與基礎數據塊服務模塊280連接從而實現全局參數存儲,網盤服務器裝置內全局參數包括數據塊大小、數據塊總數、起始數據塊ID、截止數據塊ID、空閑數據塊池、空閑元數據塊池、空閑文件數據塊池、用戶元信息池、終端元信息池、文件元信息池、文件數據塊元信息池和根目錄文件ID;
[0070]網盤客戶端裝置100包括應用程序130、文件系統接口層模塊140、網絡服務模塊110、事件服務模塊111、目錄服務模塊150、文件服務模塊160、文件數據塊服務模塊170、基礎數據塊服務模塊180、全局參數服務模塊112和存儲區190;應用程序130為網盤客戶端裝置100上運行的第三方應用程序,應用程序130與文件系統接口層模塊140連接從而獲得文件系統訪問服務;文件系統接口層模塊140分別與應用程序130、目錄服務模塊150和文件服務模塊連接160,文件系統接口層模塊140通過調用目錄服務模塊150和文件服務模塊160為上層的應用程序130提供網盤系統的文件訪問服務;存儲區模塊190負責網盤客戶端裝置100內數據的持久存儲,基礎數據塊服務模塊180直接與存儲區190連接從而實現對網盤客戶端裝置100內數據塊的管理;事件服務模塊111、目錄服務模塊150、文件服務模塊160、文件數據塊服務模塊170和全局參數服務模塊112分別與基礎數據塊服務模塊180連接并通過基礎數據塊服務模塊180來獲得各自元信息和數據塊的存儲;網絡服務模塊110提供網絡通信服務,事件服務模塊111直接與網絡服務模塊110連接從而獲得網絡通信服務;目錄服務模塊150、文件服務模塊160和文件數據塊服務模塊170分別與事件服務模塊111連接并通過事件服務模塊111來訪問網盤服務器裝置200和其它網盤客戶端裝置100,事件服務模塊111與基礎數據塊服務模塊180連接從而實現事件數據的存儲;目錄服務模塊150負責網盤系統中網盤客戶端裝置內目錄信息的管理,目錄服務模塊150與文件服務模塊160連接而實現對指定目錄內的文件服務,目錄服務模塊150與事件服務模塊111連接從而與網盤服務器裝置200和其它網盤客戶端裝置100進行數據同步,目錄服務模塊150與基礎數據塊服務模塊180連接從而實現元信息的存儲;文件服務模塊160負責網盤系統中網盤客戶端裝置內文件信息的管理,文件服務模塊160與目錄服務模塊150連接并向目錄服務模塊150提供文件服務,文件服務模塊160與文件數據塊服務模塊170連接而實現對指定文件的文件數據塊服務,文件服務模塊160與事件服務模塊111連接從而與網盤服務器裝置200和其它網盤客戶端裝置100進行數據同步,文件服務模塊160與基礎數據塊服務模塊180連接從而實現元信息的存儲;文件數據塊服務模塊170負責網盤系統中網盤客戶端裝置內文件的數據塊信息的管理,文件數據塊服務模塊170與文件服務模塊160連接并向文件服務模塊提供文件數據塊服務,文件數據塊服務模塊170與事件服務模塊111連接從而與網盤服務器裝置200和其它網盤客戶端裝置100進行數據同步,文件數據塊服務模塊170與基礎數據塊服務模塊180連接從而實現元信息和文件數據塊存儲;全局參數服務模塊112負責網盤系統中網盤客戶端裝置內全局參數的管理,全局參數服務模塊112與基礎數據塊服務模塊180連接從而實現全局參數存儲,網盤客戶端裝置內全局參數包括數據塊大小、數據塊總數、起始數據塊ID、截止數據塊ID、空閑數據塊池、空閑元數據塊池、空閑文件數據塊池、文件元信息池、文件數據塊元信息池、網盤服務器設備元信息、本地終端設備元信息、用戶元信息和根目錄文件ID,其中網盤服務器設備元信息和本地終端設備元信息的數據結構相同;
[0071]網盤服務器裝置200和網盤客戶端裝置100中關于終端設備的核心數據結構為終端設備元信息,終端設備元信息包括設備ID、設備元信息頭、網絡地址和網絡端口,其中設備ID為該終端設備的唯一標識符,設備元信息頭包括信息版本標記、設備名稱、設備物理類型、設備網絡協議和狀態;
[0072]例如,終端設備元信息實例1:{設備ID: 1001,設備元信息頭{信息版本標記:1.0,設備名稱:iphoneuserl,設備物理類型:iphone6,設備網絡協議:tcp/ipV4,狀態:在線},網絡地址:202.116.16.10和網絡端口:2001 }。
[0073]網盤服務器裝置200和網盤客戶端裝置100中關于用戶的核心數據結構為用戶元信息,用戶元信息包括用戶ID、用戶元信息頭和用戶根目錄文件ID,其中用戶ID為該用戶的唯一標識符,用戶元信息頭包括信息版本標記、用戶名、用戶認證信息、狀態;
[0074]例如,用戶元信息實例2:{用戶10:3001,用戶元信息頭{信息版本標記:1.1,用戶名:Tom,用戶認證信息:tompwd,狀態:有效},用戶根目錄文件ID:40010}。
[0075]網盤服務器裝置和網盤客戶端裝置中關于目錄和文件的核心數據結構包括文件元信息、目錄元信息、普通文件元信息和本地文件數據塊元信息;文件元信息是目錄和普通文件共同的元信息,文件元信息包括文件ID、副本ID、文件公共元信息和擴展元信息,其中文件ID和副本ID共同決定文件的唯一標識;文件公共元信息包括元信息版本標記、文件類型、權限信息、創建修改時間、主控設備ID和狀態,其中文件類型用來區分該文件是否為目錄文件,主控設備ID代表該文件當前最新全局版本的文件數據塊所在的終端設備;目錄元信息包括目錄元信息頭和目錄文件項池,其中目錄元信息頭包括數據塊總數、目錄文件項總數、目錄文件項摘要和狀態,目錄文件項池存儲該目錄下所有目錄文件項,目錄文件項包括文件ID和文件名;普通文件元信息包括普通文件元信息頭和全局文件數據塊元信息序列池,其中普通文件元信息頭包括數據塊總數、文件大小、文件體摘要和狀態,全局文件數據塊元信息序列池存儲該文件所有文件數據塊對應的全局文件數據塊元信息的有序集合;全局文件數據塊元信息包括全局文件數據塊ID、本地文件數據塊ID、全局版本標記、本地版本標記、狀態和網絡存儲的設備ID的池,其中網絡存儲的設備ID的池存儲該文件數據塊的最新數據的終端設備ID;本地文件數據塊元信息包括數據塊摘要、數據塊ID、引用數和狀態,其中引用數表明該本地文件數據塊屬于不同文件的數目,只有當該引用數為零時方回收該本地文件數據塊元為空閑文件數據塊。
[0076]目錄也是一種文件,目錄文件中的數據內容就是文件ID和文件名字的集合,因此目錄和普通文件都共用同一個“文件元信息”,通過“文件元信息”中“文件公共元信息”的“文件類型”來區分是目錄文件、還是普通文件、或者其它類型文件。
[0077]目錄元信息中的目錄文件項池為目錄文件項在本地存儲中的起始數據塊編號,目錄元信息中的目錄元信息頭中標明了數據塊總數、也標明了實際的目錄文件項總數。
[0078]全局文件數據塊元信息中的全局文件數據塊ID是在網盤服務器裝置和網盤客戶端裝置都唯一標識某個文件數據塊;全局文件數據塊元信息中的本地文件數據塊ID則只在網盤客戶端裝置內部唯一標識某個文件數據塊;當某個網盤客戶端裝置修改某文件并提交轉變為該文件的全局版本時,該文件相關修改過的最新文件數據塊同時擁有全局文件數據塊ID編號。
[0079 ]本地文件數據塊元信息中的數據塊ID為在本地存儲區中數據塊的編號,根據該數據塊ID可以訪問到該文件數據塊的實際數據內容。
[0080]—個本地文件數據塊可以被多個文件所共用,只有該本地文件數據塊的引用數為零時方可將該本地文件數據塊回收為空閑文件數據塊,這樣可以大大減少本地存儲空間的利用效率。
[0081]所述系統中,網盤系統中每個文件以數據塊為單位存儲,文件的所有數據塊分散存儲在網盤服務器裝置和網盤客戶端裝置中;針對網盤系統中的每一個文件,網盤服務器裝置中存儲該文件相關的各種元信息,網盤服務器裝置無需存儲該文件的所有文件數據塊的數據;網盤服務器裝置中該文件的全局文件數據塊元信息序列池包含了該文件的所有本地文件數據塊ID號和網絡存儲的設備ID,其中,本地文件數據塊ID號為該文件數據塊在網盤服務器裝置中的位置信息,網絡存儲的設備ID為該文件數據塊在其它網盤客戶端裝置的位置信息;針對某個網盤客戶端裝置,該網盤客戶端裝置只需存儲該網盤客戶端裝置的上層應用程序所要訪問網盤系統中文件的相關各種元信息和該文件中所要訪問的部分文件數據塊,網盤客戶端裝置中該文件的全局文件數據塊元信息序列池包含了該文件的所有全局文件數據塊ID號、所有本地文件數據塊ID號和網絡存儲的設備ID,其中,本地文件數據塊ID號為該文件數據塊網盤客戶端裝置中的位置信息,網絡存儲的設備ID為該文件數據塊在其它網盤客戶端裝置或者網盤服務器裝置的位置信息,全局文件數據塊ID號為該文件數據塊在網盤服務器裝置的位置信息。
[0082]—個文件的全部文件數據塊無需全部存放到網盤服務器裝置,但一個文件的全局版本文件的元信息必須上傳到網盤服務器裝置,這樣當另外一個網盤客戶端裝置打算訪問某個文件時,即使該文件的全部文件數據塊尚未更新到網盤服務器裝置時也可以直接訪問。
[0083]所述系統中,網盤系統中文件只能有一個全局文件版本,全局文件版本的副本ID為空;網盤系統中文件可以有零個或者多個文件副本,同一個文件的文件副本各自擁有不同的非空副本ID;全局文件版本和文件副本擁有相同的文件ID,每個網盤客戶端裝置只能看到網盤系統中該文件的全局文件版本和該終端設備上該文件的文件副本。
[0084]本方法引入文件副本使得多個用戶同時寫同一個文件成為可能。
[0085]所述系統中,當網盤客戶端裝置修改某文件時,若該文件在該網盤客戶端裝置沒有文件副本則該網盤客戶端裝置首先建立該文件的文件副本,然后針對該文件副本進行修改,對該文件副本修改后該網盤客戶端裝置可隨時向網盤服務器裝置申請成為該文件的全局文件版本;當網盤客戶端裝置將某文件的本地文件副本的文件元信息提交到網盤服務器裝置并且被網盤服務器裝置接受為該文件的全局文件版本時,該網盤客戶端裝置將刪除該文件在本地的全局文件版本,并且該網盤客戶端裝置將該文件的本地文件副本轉為在本地的全局文件版本;當網盤客戶端裝置將某文件的本地文件副本的文件元信息提交到網盤服務器裝置并且不被網盤服務器裝置接受為該文件的全局文件版本時,該網盤客戶端裝置可以將該文件的本地文件副本通過改變文件名字從而成為一個新文件的文件副本,該網盤客戶端裝置對該新文件的文件副本可隨時向網盤服務器裝置申請成為該新文件的全局文件版本。
[0086]每個網盤客戶端裝置只能看到網盤系統中該文件的全局文件版本和該終端設備上該文件的文件副本。只有當某個網盤客戶端裝置將其上的某文件的文件副本申請成為全局文件版本,其它網盤客戶端裝置才能看到該文件的最新版本。
[0087]所述系統中,網盤客戶端裝置和網盤服務器裝置之間文件訪問和同步服務采用事件訂閱機制,事件接收和處理統一由各自的事件服務模塊來完成;所有事件采用統一的事件信息結構體,事件信息結構體包括事件ID、事件來源類型、事件業務類型、事件源終端ID、事件源執行體ID、事件目的終端ID、事件時間標記、事件回執通知標記、事件內容體長度、事件內容體摘要、事件頭摘要和事件內容體,其中事件ID為事件的唯一標識;事件來源類型包括網盤服務器發送給網盤客戶端的事件類型、網盤客戶端發送給網盤服務器的事件類型、網盤服務器發送給本地的事件類型和網盤客戶端發送給本地的事件類型;事件業務類型包括文件的元信息及文件塊的創建、修改、刪除、下載和上傳的業務,也包括目錄元信息的創建、修改、刪除、下載和上傳的業務,也包括用戶注冊、注銷、更新、認證和查詢的業務,也包括終端設備的登記、更新和查詢的業務,事件服務模塊根據不同的事件業務類型來訪問對應業務服務模塊來執行事件相關業務。
[0088]本方法中文件的元信息及文件塊的創建、修改、刪除、下載和上傳等具體業務事實上是由本地的事件服務模塊通過網絡服務模塊來具體實現的,而其它業務模塊是通過向事件服務模塊發送不同類型的事件來獲得上述具體業務的執行結果。
[0089]所述系統中,網盤客戶端裝置和網盤服務器裝置中事件服務模塊的處理流程如下,如圖6所示:
[0090]第I步、接收事件請求;
[0091 ]第2步、分析事件類型,如果事件為本地執行事件,則執行第5步,否則執行第3步;
[0092]第3步、事件不是遠程執行事件,則執行第10步,否則執行第4步;
[0093]第4步、該事件通過網絡發送到指定網絡設備,并執行第6步;
[0094]第5步、在本地調用相關模塊執行該事件;
[0095]第6步、是否通知事件源,如果無需通知事件源則執行第10步,否則執行第7步;
[0096]第7步、事件源是否為遠程,如果事件源是遠程則執行9步,否則執行第8步;
[0097]第8步、將該事件回執通知給本地事件源執行體,并執行第10步;
[0098]第9步、將該事件回執通知通過網絡發送到指定網絡設備,并執行第10步;
[0099]第10步、事件處理完畢返回。
[0100]本方法中第5步在本地調用相關模塊執行該事件:即當該事件為本地執行事件,事件服務模塊將在本地調用相關模塊執行該事件。其中相關模塊包括文件的元信息及文件塊的創建、修改、刪除、下載和上傳的具體業務模塊,不同事件類型對應不同的具體業務模塊,這些具體業務模塊既可以采用動態注冊到事件服務模塊中、也可以靜態綁定在事件服務模塊中。
[0101]所述系統中,用戶從網盤客戶端裝置登錄到網盤服務器裝置時需要通過網盤服務器裝置的認證,當用戶及網盤客戶端裝置通過網盤服務器裝置認證后,網盤服務器將用戶及網盤客戶端裝置的登錄信息記下來并跟蹤用戶退出事件,該登錄信息可記錄在“用戶登錄表”中,用戶登錄表中包括用戶ID、終端ID、網絡物理地址、登錄時間、退出時間和狀態;當網盤系統中網盤服務器裝置內某個文件信息被修改,則網盤服務器裝置向擁有該文件的所有在線網盤客戶端裝置發送“文件更新事件”,從而使得相關在線網盤客戶端裝置可以及時更新該文件元信息和文件數據塊。
[0102]當網盤系統中網盤服務器裝置內某個文件信息被修改,根據在線網盤客戶端裝置上用戶的根目錄來判斷該文件是否屬于該用戶所能訪問的文件,如果此文件是該用戶所能訪問的文件,則向該網盤客戶端裝置發送“文件更新事件”。
[0103]實施例2、一種支持多用戶多終端同時讀寫的網盤系統的讀文件方法
[0104]本發明提供了一種支持多用戶多終端同時讀寫的網盤系統的讀文件方法,網盤客戶端裝置中“應用程序”讀取網盤系統中指定文件的指定文件數據到指定內存空間的方法包括具體步驟如下:
[0105]第I步、網盤客戶端裝置中“文件系統接口層”接收來自上層“應用程序”的讀取網盤系統中指定文件的指定偏移量位置及長度的文件數據到指定內存空間的請求,并將該讀請求轉化為讀取網盤系統中指定文件的指定第i塊文件數據塊內容到指定內存空間的讀請求;
[0106]例如:
[0107]“文件系統接口層”提供的讀函數:ssize_t read(struct file*f ile,char*buf,size_t count,loff_t*pos)
[0108]“文件系統接口層”接收來自上層“應用程序”的讀取網盤系統中指定文件的請求后,根據全局參數服務中數據塊的大小可以計算出讀取網盤系統中指定文件的指定第i塊文件數據塊,即可以計算出i的值。
[0109]第2步、網盤客戶端裝置的“文件服務”模塊讀取該文件的“文件元信息”,進一步獲取該指定第i塊文件數據塊的“全局文件數據塊ID號”和“本地文件數據塊ID號”;
[0110]例:該文件的“文件元信息”一定可讀,因為在打開該文件即open()操作時就已經裝載了該文件的“文件元信息”。
[0111]第3步、根據第2步中文件數據塊的“本地文件數據塊ID號”,判斷該文件數據塊的內容是否在本地網盤客戶端裝置中存在,若存在則執行第4步,否則執行第5步;
[0112]例:文件數據塊的“本地文件數據塊ID號”才是標明該文件數據塊是否在本地存儲區的依據。
[0113]第4步、根據第2步中文件數據塊的“本地文件數據塊ID號”讀取該數據塊的“本地文件數據塊元信息”,進一步判斷該“本地文件數據塊”的狀態是否有效,若該“本地文件數據塊”的狀態為有效,則執行第7步,否則執行第5步;
[0114]例:如果該“本地文件數據塊”的狀態為無效,那么意味著該文件數據塊尚不在本地存儲區。本發明支持對一個文件下載到本地存儲時只需部分文件數據塊的下載。
[0115]第5步、針對第2步中指定文件的該指定文件數據塊的“全局文件數據塊ID號”,向本地“事件服務模塊”發送“下載文件數據塊”事件,并在指定時間內等待該事件完成;
[0116]例:事件服務模塊承擔了下載某個文件數據塊的具體任務。
[0117]第6步、判斷第5步中“下載文件數據塊”事件是否完成,如完成則執行第7步,否則執行第9步;
[0118]例:如果網絡下載超時或者其它原因,則意味著下載文件數據塊失敗,則文件讀操作失敗。
[0119]第7步、重新讀取該文件的“文件元信息”,并獲得該文件數據塊的“全局文件數據塊ID號”和“本地文件數據塊ID號”;
[0120]例:根據“本地文件數據塊ID號”,可以由全局文件數據塊元信息可以找到本地文件數據塊元信息。
[0121]第8步、根據該文件數據塊的“本地文件數據塊ID號”讀取對應的“本地文件數據塊元信息”從而獲得“本地數據塊ID”,讀取該本地數據塊到指定內存,并設置讀取指定文件的指定文件數據塊內容到指定內存空間的訪問請求成功信息,并進一步執行第10步;
[0122]例:根據本地文件數據塊元信息可以找到本地數據塊的ID編號,因此可以訪問到該文件數據塊的具體內容。
[0123]第9步、設置讀取指定文件的指定文件數據塊內容到指定內存空間的訪問請求失敗信息,進一步執行第10步;
[0124]第10步、讀請求操作結束。
[0125]實施例3、一種支持多用戶多終端同時讀寫的網盤系統的寫文件方法
[0126]—種支持多用戶多終端同時讀寫的網盤系統的寫文件方法,網盤客戶端裝置中“應用程序”將新數據寫到網盤系統中指定文件的指定偏移量位置的方法包括具體步驟如下:
[0127]第I步、網盤客戶端裝置中“文件系統接口層”接收來自上層“應用程序”將新數據寫到網盤系統中指定文件的指定偏移量位置的請求,并將該寫請求轉化為將新數據寫到網盤系統中指定文件的指定第i塊文件數據塊的請求;
[0128]例如:
[0129]“文件系統接口層”提供寫函數:ssize_t write(struct file*file,const char*buf,size_t count,loff_t*pos)
[0130]“文件系統接口層”根據全局參數服務中數據塊的大小可以計算出寫網盤系統中指定文件的指定第i塊文件數據塊,即可以計算出i的值。
[0131]第2步、網盤客戶端裝置的“文件服務”模塊讀取該文件的“文件元信息”,進一步獲取該指定第i塊文件數據塊的“全局文件數據塊ID號”和“本地文件數據塊ID號”;
[0132]第3步、判斷第2步中該指定文件數據塊是否為新增數據塊,如果該指定文件數據塊是新增數據塊,則執行第9步,否則執行第4步;
[0133]例:如果是在已有文件的尾部添加新的數據,即新增數據塊,則無需先獲取該文件的其它文件數據塊,可直接在本地新申請一個數據塊并寫入新數據即可。
[0134]第4步、判斷第2步中該指定文件數據塊是否將被完全寫覆蓋,如果該指定文件數據塊將被完全寫覆蓋,則執行第9步,否則執行第5步;
[0135]例:如果該指定文件數據塊將被完全寫覆蓋,則無需先獲取該文件數據塊已有內容,只需直接在本地新申請一個數據塊并寫入新數據即可。
[0136]第5步、判斷第2步中該指定文件數據塊是否已在本地,如果該指定文件數據塊尚未在本地存儲中,則執行第7步,否則執行第6步;
[0137]例:如果該指定文件數據塊不能被完全寫覆蓋,則必須先先獲取該文件數據塊已有內容,如果該文件數據塊不在本地存儲中,需要先從網絡中下載該文件數據塊到本地存儲。
[0138]第6步、判斷第2步中該指定文件數據塊的本地數據塊是否有效,如果該指定文件數據塊的本地數據塊有效,則執行第8步,否則執行第7步;
[0139]例:該指定文件數據塊即使在本地存儲,還要判斷該本地數據塊狀態是否有效,因此很有可能其它網盤客戶端裝置修改了該文件并申請提交了文件的全局版本,那么網盤服務器裝置將會通知當前網盤客戶端裝置該文件的本地數據塊為無效的事件,而當前網盤客戶端裝置中的事件服務模塊會異步地修改該本地數據塊的狀態為無效。
[0140]第7步、向網盤服務器裝置發送獲取第2步中該指定文件數據塊的事件、并等待第2步中該指定文件數據塊的數據被下載到本地,如果第2步中該指定文件數據塊的數據未能被下載到本地,則執行第12步,否則執行第8步;
[0141]第8步、獲取本地一個空閑數據塊作為新數據塊,并將第2步中該指定文件數據塊的原數據塊內容復制到該新數據塊,并進一步執行第1步;
[0142]第9步、獲取本地一個空閑數據塊作為新數據塊,并進一步執行第10步;
[0143]例:本方法采用修改時的文件副本機制,因此修改過程中不會直接覆蓋已有文件數據塊,必須申請一個新的數據塊,然后對該新數據塊進行覆蓋和修改操作。
[0144]第10步、將第I步中新數據寫入新數據塊中,并更新新數據塊的元信息,設置寫數據塊成功;
[0145]例:文件數據的修改后,還要更新文件相關的元信息。
[0146]第11步、向網盤服務器裝置發送“文件數據塊修改”事件,并進一步執行第13步;
[0147]第12步、設置寫數據塊失敗,并進一步執行第13步;
[0148]第13步、寫請求操作結束。
[0149]考慮到在此公開的對本發明的描述和特例的實施例,本發明的其他實施例對于本領域的技術人員來說是顯而意見的。這些說明和實施例僅作為例子來考慮,凡在本發明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發明的保護范圍之內。
【主權項】
1.一種支持多用戶多終端同時讀寫的網盤系統,其特征在于,該網盤系統包括網盤服務器裝置、網盤客戶端裝置以及網絡裝置;網盤服務器裝置,主要用于網盤系統存儲和管理所有文件的元信息和文件數據塊,存儲、管理和認證所有用戶元信息,存儲、管理和認證所有用戶終端設備元信息,并為網盤客戶端裝置提供文件、文件數據塊檢索、訪問和變更服務;網盤客戶端裝置,主要用于網盤客戶端存儲所訪問文件的全部或者部分元數據、全部或者部分文件數據塊,與網盤服務器裝置進行文件數據同步,并為網盤客戶端中應用程序提供文件訪問服務;網絡裝置負責為網盤服務器裝置和網盤客戶端裝置之間的數據通信提供服務; 其中, 網盤服務器裝置包括網絡服務模塊、事件服務模塊、終端服務模塊、用戶服務模塊、目錄服務模塊、文件服務模塊、文件數據塊服務模塊、基礎數據塊服務模塊、全局參數服務模塊和存儲區;存儲區模塊負責網盤服務器裝置內數據的持久存儲,基礎數據塊服務模塊直接與存儲區連接從而實現對網盤服務器裝置內數據塊的管理;事件服務模塊、終端服務模塊、用戶服務模塊、目錄服務模塊、文件服務模塊、文件數據塊服務模塊和全局參數服務模塊分別與基礎數據塊服務模塊連接并通過基礎數據塊服務模塊來獲得各自元信息和數據塊的存儲;網絡服務模塊提供網絡通信服務,事件服務模塊直接與網絡服務模塊連接從而獲得網絡通信服務;終端服務模塊、用戶服務模塊、目錄服務模塊、文件服務模塊和文件數據塊服務模塊分別與事件服務模塊連接并通過事件服務模塊為網盤客戶端裝置提供服務,事件服務模塊與基礎數據塊服務模塊連接從而實現事件數據的存儲;終端服務模塊負責存儲、管理和認證所有用戶終端設備元信息,終端服務模塊與事件服務模塊連接從而對外提供終端服務,終端服務模塊與基礎數據塊服務模塊連接從而實現元信息的存儲;用戶服務模塊負責存儲、管理和認證所有用戶元信息,用戶服務模塊與事件服務模塊連接從而對外提供用戶服務,用戶服務模塊與基礎數據塊服務模塊連接從而實現元信息的存儲;目錄服務模塊負責網盤系統中目錄信息的管理,目錄服務模塊與文件服務模塊連接而實現對指定目錄內的文件服務,目錄服務模塊與事件服務模塊連接從而對外提供目錄服務,目錄服務模塊與基礎數據塊服務模塊連接從而實現元信息的存儲;文件服務模塊負責網盤系統中文件信息的管理,文件服務模塊與目錄服務模塊連接并向目錄服務模塊提供文件服務,文件服務模塊與文件數據塊服務模塊連接而實現對指定文件的文件數據塊服務,文件服務模塊與事件服務模塊連接從而對外提供文件服務,文件服務模塊與基礎數據塊服務模塊連接從而實現元信息的存儲;文件數據塊服務模塊負責網盤系統中文件的數據塊信息的管理,文件數據塊服務模塊與文件服務模塊連接并向文件服務模塊提供文件數據塊服務,文件數據塊服務模塊與事件服務模塊連接從而對外提供文件數據塊服務,文件數據塊服務模塊與基礎數據塊服務模塊連接從而實現元信息和文件數據塊存儲;全局參數服務模塊負責網盤系統中網盤服務器裝置內全局參數的管理,全局參數服務模塊與基礎數據塊服務模塊連接從而實現全局參數存儲,網盤服務器裝置內全局參數包括數據塊大小、數據塊總數、起始數據塊ID、截止數據塊ID、空閑數據塊池、空閑元數據塊池、空閑文件數據塊池、用戶元信息池、終端元信息池、文件元信息池、文件數據塊元信息池和根目錄文件ID; 網盤客戶端裝置包括應用程序、文件系統接口層模塊、網絡服務模塊、事件服務模塊、目錄服務模塊、文件服務模塊、文件數據塊服務模塊、基礎數據塊服務模塊、全局參數服務模塊和存儲區;應用程序為網盤客戶端裝置上運行的第三方應用程序,應用程序與文件系統接口層模塊連接從而獲得文件系統訪問服務;文件系統接口層模塊分別與應用程序、目錄服務模塊和文件服務模塊連接,文件系統接口層模塊通過調用目錄服務模塊和文件服務模塊為上層的應用程序提供網盤系統的文件訪問服務;存儲區模塊負責網盤客戶端裝置內數據的持久存儲,基礎數據塊服務模塊直接與存儲區連接從而實現對網盤客戶端裝置內數據塊的管理;事件服務模塊、目錄服務模塊、文件服務模塊、文件數據塊服務模塊和全局參數服務模塊分別與基礎數據塊服務模塊連接并通過基礎數據塊服務模塊來獲得各自元信息和數據塊的存儲;網絡服務模塊提供網絡通信服務,事件服務模塊直接與網絡服務模塊連接從而獲得網絡通信服務;目錄服務模塊、文件服務模塊和文件數據塊服務模塊分別與事件服務模塊連接并通過事件服務模塊來訪問網盤服務器裝置和其它網盤客戶端裝置,事件服務模塊與基礎數據塊服務模塊連接從而實現事件數據的存儲;目錄服務模塊負責網盤系統中網盤客戶端裝置內目錄信息的管理,目錄服務模塊與文件服務模塊連接而實現對指定目錄內的文件服務,目錄服務模塊與事件服務模塊連接從而與網盤服務器裝置和其它網盤客戶端裝置進行數據同步,目錄服務模塊與基礎數據塊服務模塊連接從而實現元信息的存儲;文件服務模塊負責網盤系統中網盤客戶端裝置內文件信息的管理,文件服務模塊與目錄服務模塊連接并向目錄服務模塊提供文件服務,文件服務模塊與文件數據塊服務模塊連接而實現對指定文件的文件數據塊服務,文件服務模塊與事件服務模塊連接從而與網盤服務器裝置和其它網盤客戶端裝置進行數據同步,文件服務模塊與基礎數據塊服務模塊連接從而實現元信息的存儲;文件數據塊服務模塊負責網盤系統中網盤客戶端裝置內文件的數據塊信息的管理,文件數據塊服務模塊與文件服務模塊連接并向文件服務模塊提供文件數據塊服務,文件數據塊服務模塊與事件服務模塊連接從而與網盤服務器裝置和其它網盤客戶端裝置進行數據同步,文件數據塊服務模塊與基礎數據塊服務模塊連接從而實現元信息和文件數據塊存儲;全局參數服務模塊負責網盤系統中網盤客戶端裝置內全局參數的管理,全局參數服務模塊與基礎數據塊服務模塊連接從而實現全局參數存儲,網盤客戶端裝置內全局參數包括數據塊大小、數據塊總數、起始數據塊ID、截止數據塊ID、空閑數據塊池、空閑元數據塊池、空閑文件數據塊池、文件元信息池、文件數據塊元信息池、網盤服務器設備元信息、本地終端設備元信息、用戶元信息和根目錄文件ID,其中網盤服務器設備元信息和本地終端設備元信息的數據結構相同; 網盤服務器裝置和網盤客戶端裝置中關于終端設備的核心數據結構為終端設備元信息,終端設備元信息包括設備ID、設備元信息頭、網絡地址和網絡端口,其中設備ID為該終端設備的唯一標識符,設備元信息頭包括信息版本標記、設備名稱、設備物理類型、設備網絡協議和狀態; 網盤服務器裝置和網盤客戶端裝置中關于用戶的核心數據結構為用戶元信息,用戶元信息包括用戶ID、用戶元信息頭和用戶根目錄文件ID,其中用戶ID為該用戶的唯一標識符,用戶元信息頭包括信息版本標記、用戶名、用戶認證信息、狀態; 網盤服務器裝置和網盤客戶端裝置中關于目錄和文件的核心數據結構包括文件元信息、目錄元信息、普通文件元信息和本地文件數據塊元信息;文件元信息是目錄和普通文件共同的元信息,文件元信息包括文件ID、副本ID、文件公共元信息和擴展元信息,其中文件ID和副本ID共同決定文件的唯一標識;文件公共元信息包括元信息版本標記、文件類型、權限信息、創建修改時間、主控設備ID和狀態,其中文件類型用來區分該文件是否為目錄文件,主控設備ID代表該文件當前最新全局版本的文件數據塊所在的終端設備;目錄元信息包括目錄元信息頭和目錄文件項池,其中目錄元信息頭包括數據塊總數、目錄文件項總數、目錄文件項摘要和狀態,目錄文件項池存儲該目錄下所有目錄文件項,目錄文件項包括文件ID和文件名;普通文件元信息包括普通文件元信息頭和全局文件數據塊元信息序列池,其中普通文件元信息頭包括數據塊總數、文件大小、文件體摘要和狀態,全局文件數據塊元信息序列池存儲該文件所有文件數據塊對應的全局文件數據塊元信息的有序集合;全局文件數據塊元信息包括全局文件數據塊ID、本地文件數據塊ID、全局版本標記、本地版本標記、狀態和網絡存儲的設備ID的池,其中網絡存儲的設備ID的池存儲該文件數據塊的最新數據的終端設備ID;本地文件數據塊元信息包括數據塊摘要、數據塊ID、引用數和狀態,其中引用數表明該本地文件數據塊屬于不同文件的數目,只有當該引用數為零時方回收該本地文件數據塊元為空閑文件數據塊。2.如權利要求1所述的網盤系統,其特征在于,所述的網盤系統中每個文件以數據塊為單位存儲,文件的所有數據塊分散存儲在網盤服務器裝置和網盤客戶端裝置中;針對網盤系統中的每一個文件,網盤服務器裝置中存儲該文件相關的各種元信息,網盤服務器裝置無需存儲該文件的所有文件數據塊的數據;網盤服務器裝置中該文件的全局文件數據塊元信息序列池包含了該文件的所有本地文件數據塊ID號和網絡存儲的設備ID,其中,本地文件數據塊ID號為該文件數據塊在網盤服務器裝置中的位置信息,網絡存儲的設備ID為該文件數據塊在其它網盤客戶端裝置的位置信息;針對某個網盤客戶端裝置,該網盤客戶端裝置只需存儲該網盤客戶端裝置的上層應用程序所要訪問網盤系統中文件的相關各種元信息和該文件中所要訪問的部分文件數據塊,網盤客戶端裝置中該文件的全局文件數據塊元信息序列池包含了該文件的所有全局文件數據塊ID號、所有本地文件數據塊ID號和網絡存儲的設備ID,其中,本地文件數據塊ID號為該文件數據塊網盤客戶端裝置中的位置信息,網絡存儲的設備ID為該文件數據塊在其它網盤客戶端裝置或者網盤服務器裝置的位置信息,全局文件數據塊ID號為該文件數據塊在網盤服務器裝置的位置信息。3.如權利要求1或2所述的網盤系統,其特征在于,所述的網盤系統中文件只能有一個全局文件版本,全局文件版本的副本ID為空;網盤系統中文件可以有零個或者多個文件副本,同一個文件的文件副本各自擁有不同的非空副本ID;全局文件版本和文件副本擁有相同的文件ID,每個網盤客戶端裝置只能看到網盤系統中該文件的全局文件版本和該終端設備上該文件的文件副本。4.如權利要求1或2所述的網盤系統,其特征在于,當網盤客戶端裝置修改某文件時,若該文件在該網盤客戶端裝置沒有文件副本則該網盤客戶端裝置首先建立該文件的文件副本,然后針對該文件副本進行修改,對該文件副本修改后該網盤客戶端裝置可隨時向網盤服務器裝置申請成為該文件的全局文件版本;當網盤客戶端裝置將某文件的本地文件副本的文件元信息提交到網盤服務器裝置并且被網盤服務器裝置接受為該文件的全局文件版本時,該網盤客戶端裝置將刪除該文件在本地的全局文件版本,并且該網盤客戶端裝置將該文件的本地文件副本轉為在本地的全局文件版本;當網盤客戶端裝置將某文件的本地文件副本的文件元信息提交到網盤服務器裝置并且不被網盤服務器裝置接受為該文件的全局文件版本時,該網盤客戶端裝置可以將該文件的本地文件副本通過改變文件名字從而成為一個新文件的文件副本,該網盤客戶端裝置對該新文件的文件副本可隨時向網盤服務器裝置申請成為該新文件的全局文件版本。5.如權利要求1所述的網盤系統,其特征在于,網盤客戶端裝置和網盤服務器裝置之間文件訪問和同步服務采用事件訂閱機制,事件接收和處理統一由各自的事件服務模塊來完成;所有事件采用統一的事件信息結構體,事件信息結構體包括事件ID、事件來源類型、事件業務類型、事件源終端ID、事件源執行體ID、事件目的終端ID、事件時間標記、事件回執通知標記、事件內容體長度、事件內容體摘要、事件頭摘要和事件內容體,其中事件ID為事件的唯一標識;事件來源類型包括網盤服務器發送給網盤客戶端的事件類型、網盤客戶端發送給網盤服務器的事件類型、網盤服務器發送給本地的事件類型和網盤客戶端發送給本地的事件類型;事件業務類型包括文件的元信息及文件塊的創建、修改、刪除、下載和上傳的業務,也包括目錄元信息的創建、修改、刪除、下載和上傳的業務,也包括用戶注冊、注銷、更新、認證和查詢的業務,也包括終端設備的登記、更新和查詢的業務,事件服務模塊根據不同的事件業務類型來訪問對應業務服務模塊來執行事件相關業務。6.如權利要求1或5所述的網盤系統,其特征在于,所述的網盤客戶端裝置和網盤服務器裝置中事件服務模塊的處理流程如下: 第I步、接收事件請求; 第2步、分析事件類型,如果事件為本地執行事件,則執行第5步,否則執行第3步; 第3步、事件不是遠程執行事件,則執行第10步,否則執行第4步; 第4步、該事件通過網絡發送到指定網絡設備,并執行第6步; 第5步、在本地調用相關模塊執行該事件; 第6步、是否通知事件源,如果無需通知事件源則執行第10步,否則執行第7步; 第7步、事件源是否為遠程,如果事件源是遠程則執行9步,否則執行第8步; 第8步、將該事件回執通知給本地事件源執行體,并執行第10步; 第9步、將該事件回執通知通過網絡發送到指定網絡設備,并執行第10步; 第10步、事件處理完畢返回。7.如權利要求1或4所述的網盤系統,其特征在于,用戶從網盤客戶端裝置登錄到網盤服務器裝置時需要通過網盤服務器裝置的認證,當用戶及網盤客戶端裝置通過網盤服務器裝置認證后,網盤服務器將用戶及網盤客戶端裝置的登錄信息記下來并跟蹤用戶退出事件,該登錄信息可記錄在“用戶登錄表”中,用戶登錄表中包括用戶ID、終端ID、網絡物理地址、登錄時間、退出時間和狀態;當網盤系統中網盤服務器裝置內某個文件信息被修改,則網盤服務器裝置向擁有該文件的所有在線網盤客戶端裝置發送“文件更新事件”,從而使得相關在線網盤客戶端裝置可以及時更新該文件元信息和文件數據塊。8.—種支持多用戶多終端同時讀寫的網盤系統的讀文件方法,其特征在于,網盤客戶端裝置中“應用程序”讀取網盤系統中指定文件的指定文件數據到指定內存空間的方法包括具體步驟如下:第I步、網盤客戶端裝置中“文件系統接口層”接收來自上層“應用程序”的讀取網盤系統中指定文件的指定偏移量位置及長度的文件數據到指定內存空間的請求,并將該讀請求轉化為讀取網盤系統中指定文件的指定第i塊文件數據塊內容到指定內存空間的讀請求;第2步、網盤客戶端裝置的“文件服務”模塊讀取該文件的“文件元信息”,進一步獲取該指定第i塊文件數據塊的“全局文件數據塊ID號”和“本地文件數據塊ID號”; 第3步、根據第2步中文件數據塊的“本地文件數據塊ID號”,判斷該文件數據塊的內容是否在本地網盤客戶端裝置中存在,若存在則執行第4步,否則執行第5步; 第4步、根據第2步中文件數據塊的“本地文件數據塊ID號”讀取該數據塊的“本地文件數據塊元信息”,進一步判斷該“本地文件數據塊”的狀態是否有效,若該“本地文件數據塊”的狀態為有效,則執行第7步,否則執行第5步; 第5步、針對第2步中指定文件的該指定文件數據塊的“全局文件數據塊ID號”,向本地“事件服務模塊”發送“下載文件數據塊”事件,并在指定時間內等待該事件完成; 第6步、判斷第5步中“下載文件數據塊”事件是否完成,如完成則執行第7步,否則執行第9步; 第7步、重新讀取該文件的“文件元信息”,并獲得該文件數據塊的“全局文件數據塊ID號”和“本地文件數據塊ID號”; 第8步、根據該文件數據塊的“本地文件數據塊ID號”讀取對應的“本地文件數據塊元信息”從而獲得“本地數據塊ID”,讀取該本地數據塊到指定內存,并設置讀取指定文件的指定文件數據塊內容到指定內存空間的訪問請求成功信息,并進一步執行第10步; 第9步、設置讀取指定文件的指定文件數據塊內容到指定內存空間的訪問請求失敗信息,進一步執行第1步; 第10步、讀請求操作結束。9.一種支持多用戶多終端同時讀寫的網盤系統的寫文件方法,其特征在于,網盤客戶端裝置中“應用程序”將新數據寫到網盤系統中指定文件的指定偏移量位置的方法包括具體步驟如下: 第I步、網盤客戶端裝置中“文件系統接口層”接收來自上層“應用程序”將新數據寫到網盤系統中指定文件的指定偏移量位置的請求,并將該寫請求轉化為將新數據寫到網盤系統中指定文件的指定第i塊文件數據塊的請求; 第2步、網盤客戶端裝置的“文件服務”模塊讀取該文件的“文件元信息”,進一步獲取該指定第i塊文件數據塊的“全局文件數據塊ID號”和“本地文件數據塊ID號”; 第3步、判斷第2步中該指定文件數據塊是否為新增數據塊,如果該指定文件數據塊是新增數據塊,則執行第9步,否則執行第4步; 第4步、判斷第2步中該指定文件數據塊是否將被完全寫覆蓋,如果該指定文件數據塊將被完全寫覆蓋,則執行第9步,否則執行第5步; 第5步、判斷第2步中該指定文件數據塊是否已在本地,如果該指定文件數據塊尚未在本地存儲中,則執行第7步,否則執行第6步; 第6步、判斷第2步中該指定文件數據塊的本地數據塊是否有效,如果該指定文件數據塊的本地數據塊有效,則執行第8步,否則執行第7步; 第7步、向網盤服務器裝置發送獲取第2步中該指定文件數據塊的事件、并等待第2步中該指定文件數據塊的數據被下載到本地,如果第2步中該指定文件數據塊的數據未能被下載到本地,則執行第12步,否則執行第8步; 第8步、獲取本地一個空閑數據塊作為新數據塊,并將第2步中該指定文件數據塊的原數據塊內容復制到該新數據塊,并進一步執行第1步; 第9步、獲取本地一個空閑數據塊作為新數據塊,并進一步執行第10步; 第10步、將第I步中新數據寫入新數據塊中,并更新新數據塊的元信息,設置寫數據塊成功; 第11步、向網盤服務器裝置發送“文件數據塊修改”事件,并進一步執行第13步; 第12步、設置寫數據塊失敗,并進一步執行第13步; 第13步、寫請求操作結束。
【文檔編號】G06F17/30GK106021327SQ201610297399
【公開日】2016年10月12日
【申請日】2016年5月6日
【發明人】李旭東
【申請人】南開大學