分布式存儲系統(tǒng)及其數(shù)據(jù)讀寫方法
【技術(shù)領域】
[0001]本申請涉及計算機存儲技術(shù)領域,尤其涉及分布式存儲系統(tǒng)及其數(shù)據(jù)讀寫方法。
【背景技術(shù)】
[0002]隨著移動設備、社交網(wǎng)絡、物聯(lián)網(wǎng)等多種應用的蓬勃發(fā)展,人類社會產(chǎn)生的數(shù)據(jù)呈爆炸式增長。傳統(tǒng)的磁盤陣列在容量、性能和帶寬方面越來越難以滿足以海量數(shù)據(jù)為基礎的數(shù)據(jù)密集型應用的存儲要求。因此,采取scale-out架構(gòu)、容量和性能可隨節(jié)點數(shù)線性增加的分布式集群存儲系統(tǒng)應運而生,能提供更高的每秒讀寫(10)操作的次數(shù)(10PS,Input/Output Operat1ns Per Second)性能的固態(tài)硬盤也逐漸取代傳統(tǒng)磁盤成為10密集型應用的首選。在此背景下,固態(tài)硬盤昂貴的價格、先擦除后寫入的應用特點,都要求在存儲系統(tǒng)中盡可能壓縮數(shù)據(jù)的實際存儲空間、降低寫入次數(shù),以便進一步提高使用分布式閃存系統(tǒng)的性價比。
[0003]重復數(shù)據(jù)刪除是數(shù)據(jù)縮減技術(shù)中的一種,通常用于基于磁盤的備份系統(tǒng),旨在減少存儲系統(tǒng)中實際使用的存儲容量。目前重復數(shù)據(jù)刪除的工作方式通常是在某個時間周期內(nèi),在后臺運行重復數(shù)據(jù)刪除程序,查找不同文件中不同位置的重復數(shù)據(jù)塊,把重復的數(shù)據(jù)塊用指示符取代,以減少對存儲容量的占用。高度冗余的數(shù)據(jù)集(例如備份數(shù)據(jù))從重復數(shù)據(jù)刪除技術(shù)的獲益極大;另外重復數(shù)據(jù)刪除技術(shù)可以允許用戶的不同站點之間進行高效、經(jīng)濟的備份數(shù)據(jù)復制。但是,對于分布式集群存儲系統(tǒng)而言,現(xiàn)有的單設備內(nèi)的重復數(shù)據(jù)刪除技術(shù)無法達到全局重復數(shù)據(jù)刪除的目標,數(shù)據(jù)縮減比達不到最佳效果;另外,后臺處理的重復數(shù)據(jù)刪除方式無法減少數(shù)據(jù)寫入的操作,對于使用固態(tài)硬盤的存儲系統(tǒng)而言,就達不到減少擦寫次數(shù)、延長固態(tài)硬盤壽命的目標。
【發(fā)明內(nèi)容】
[0004]本申請?zhí)峁┝艘环N應用于分布式存儲系統(tǒng)及其數(shù)據(jù)讀寫方法,無需進行實際的重復數(shù)據(jù)刪除操作,即可達到全局重復數(shù)據(jù)刪除的目標,并且可以減少數(shù)據(jù)寫入的操作。
[0005]本申請實施例提供了一種分布式存儲系統(tǒng),包括:所述分布式存儲系統(tǒng)包括一個代理模塊、一個元數(shù)據(jù)服務模塊以及多個存儲服務模塊,每個存儲服務模塊管理至少一個存儲節(jié)點;
[0006]所述代理模塊用于接收來自應用系統(tǒng)的寫請求,按分塊參數(shù)計算所要寫入的數(shù)據(jù)的哈希值,得到塊標識,向元數(shù)據(jù)服務模塊發(fā)送攜帶所述塊標識的寫請求;接收元數(shù)據(jù)服務模塊返回的節(jié)點信息,根據(jù)所述節(jié)點信息,把寫入請求路由到相應的存儲節(jié)點;以及將來自元數(shù)據(jù)服務模塊或存儲服務模塊的寫入成功消息返回應用系統(tǒng);
[0007]所述元數(shù)據(jù)服務模塊用于維護全局的一級映射表,一級映射表包含了全局邏輯地址和存儲節(jié)點、塊標識的映射關(guān)系;接收來自代理模塊的攜帶塊標識的寫請求,查找一級映射表,如果已存在相應塊標識的映射記錄,刷新一級映射表,增加一條寫入起始地址和相應塊標識的映射記錄,通過代理模塊向應用系統(tǒng)返回寫入成功消息;若不存在,選擇一個存儲節(jié)點,把所述存儲節(jié)點的節(jié)點信息返回給代理模塊;接收來自存儲服務模塊的寫入信息,刷新一級映射表,新增寫入起始地址、相應塊標識、相應存儲節(jié)點的映射記錄,向所述存儲服務模塊返回刷新成功消息;
[0008]存儲服務模塊用于維護二級映射表,二級映射表包含了塊標識和實際存儲物理地址的映射關(guān)系;接收路由到本存儲服務模塊所管理的存儲節(jié)點的寫請求,把數(shù)據(jù)寫入所述存儲節(jié)點的磁盤,刷新二級映射表,新增相應塊標識和實際寫入物理地址的記錄,并向元數(shù)據(jù)服務模塊發(fā)送寫入信息。
[0009]可選地,所述代理模塊還用于接收來自應用系統(tǒng)的讀請求,將該讀請求透傳給元數(shù)據(jù)服務模塊,以及將來自存儲服務模塊的讀數(shù)據(jù)返回應用系統(tǒng);
[0010]所述元數(shù)據(jù)服務模塊還用于接收來自代理模塊的攜帶讀取起始地址的讀請求,查找一級映射表中所述讀取起始地址對應的映射記錄,得到相應的存儲節(jié)點以及塊標識,把讀請求路由到相應的存儲節(jié)點;
[0011]所述存儲服務模塊還用于接收路由到本存儲服務模塊所管理的存儲節(jié)點的讀請求,根據(jù)塊標識查找二級映射表,得到實際物理地址,從實際物理地址中獲取讀數(shù)據(jù),將讀數(shù)據(jù)返回給代理模塊。
[0012]可選地,所述元數(shù)據(jù)服務模塊進一步包括:
[0013]負載分擔算法單元,用于根據(jù)負載分擔算法選擇一個負載較輕的存儲節(jié)點。
[0014]可選地,元數(shù)據(jù)服務模塊單獨部署在獨立節(jié)點中,或者分布式部署在所有的節(jié)點集群上。
[0015]本申請實施例還提供了一種分布式存儲系統(tǒng)的數(shù)據(jù)寫入方法,該分布式存儲系統(tǒng)如前所述,該數(shù)據(jù)寫入方法包括:
[0016]代理模塊接收來自應用系統(tǒng)的寫請求,按分塊參數(shù)計算所要寫入的數(shù)據(jù)的哈希值,得到塊標識,向元數(shù)據(jù)服務模塊發(fā)送攜帶所述塊標識的寫請求;
[0017]元數(shù)據(jù)服務模塊接收來自代理模塊的攜帶塊標識的寫請求,查找一級映射表,如果已存在相應塊標識的映射記錄,刷新一級映射表,增加一條寫入起始地址和相應塊標識的映射記錄,通過代理模塊向應用系統(tǒng)返回寫入成功消息,結(jié)束寫入流程;若不存在,選擇一個存儲節(jié)點,把所述存儲節(jié)點的節(jié)點信息返回給代理模塊;
[0018]代理模塊接收元數(shù)據(jù)服務模塊返回的節(jié)點信息,根據(jù)所述節(jié)點信息,把寫入請求路由到相應的存儲節(jié)點;
[0019]存儲服務模塊接收路由到本存儲服務模塊所管理的存儲節(jié)點的寫請求,把數(shù)據(jù)寫入所述存儲節(jié)點的磁盤,刷新二級映射表,新增相應塊標識和實際寫入物理地址的記錄,并向元數(shù)據(jù)服務模塊發(fā)送寫入信息;
[0020]元數(shù)據(jù)服務模塊接收來自存儲服務模塊的寫入信息,刷新一級映射表,新增寫入起始地址、相應塊標識、相應存儲節(jié)點的映射記錄,向所述存儲服務模塊返回刷新成功消息;
[0021]存儲服務模塊將來自元數(shù)據(jù)服務模塊或存儲服務模塊的寫入成功消息返回應用系統(tǒng)。
[0022]本申請實施例還提供了一種分布式存儲系統(tǒng)的數(shù)據(jù)讀取方法,該分布式存儲系統(tǒng)如前所述,該數(shù)據(jù)讀取方法包括:
[0023]代理模塊接收來自應用系統(tǒng)的讀請求,將該讀請求透傳給元數(shù)據(jù)服務模塊;
[0024]元數(shù)據(jù)服務模塊接收來自代理模塊的攜帶讀取起始地址的讀請求,查找一級映射表中所述讀取起始地址對應的映射記錄,得到相應的存儲節(jié)點以及塊標識,把讀請求路由到相應的存儲節(jié)點;
[0025]存儲服務模塊接收路由到本存儲服務模塊所管理的存儲節(jié)點的讀請求,根據(jù)塊標識查找二級映射表,得到實際物理地址,從實際物理地址中獲取讀數(shù)據(jù),將讀數(shù)據(jù)返回給代理模塊;
[0026]代理模塊將來自存儲服務模塊的讀數(shù)據(jù)返回應用系統(tǒng)。
[0027]從以上技術(shù)方案可以看出,由于采用兩級元數(shù)據(jù)組織,在寫入數(shù)據(jù)時,如果已存在相同數(shù)據(jù)則不進行實際寫入,從而減少數(shù)據(jù)寫入的操作,并且達到全局重復數(shù)據(jù)刪除的目標。本申請方案可以實現(xiàn)如下技術(shù)效果:
[0028]在分布式存儲系統(tǒng)中實現(xiàn)了在線的全局重復數(shù)據(jù)刪除,降低實際存儲空間占用;
[0029]寫數(shù)據(jù)時由于重復的數(shù)據(jù)不需要實際的寫操作,節(jié)省了應用系統(tǒng)和存儲系統(tǒng)的數(shù)據(jù)交互和帶寬,提高了存儲效率;
[0030]可以很靈活地在存儲節(jié)點上部署元數(shù)據(jù)服務和存儲服務,易于構(gòu)建分布式、大規(guī)模的存儲系統(tǒng)。
【附圖說明】
[0031]圖1為本申請實施例提供的采用二級元數(shù)據(jù)組織方法的分布式存儲系統(tǒng)的架構(gòu)示意圖;
[0032]圖2為本申請實施例提供的分布式存儲系統(tǒng)的數(shù)據(jù)寫入流程示意圖;
[0033]圖3為本申請實施例提供的分布式存儲系統(tǒng)的讀數(shù)據(jù)流程示意圖。
【具體實施方式】
[0034]為使本申請技術(shù)方案的技術(shù)原理、特點以及技術(shù)效果更加清楚,以下結(jié)合具體實施例對本申請技術(shù)方案進行詳細闡述。
[0035]本申請方案中,采用二級元數(shù)據(jù)組織方法,把分布式存儲系統(tǒng)的服務模塊分為元數(shù)據(jù)服務模塊和存儲服務模塊,其中元數(shù)據(jù)服務模塊負責維護全局的一級映射表,一級映射表包含了全局邏輯地址和存儲節(jié)點、塊標識(即數(shù)據(jù)塊哈希(Hash)值)的映射關(guān)系;存儲服務模塊負責維護二級映射表,二級映射表包含了塊標識和實際存儲物理地址的映射關(guān)系Ο
[0036]本申請實施例提供的采用二級元數(shù)據(jù)組織方法的分布式存儲系統(tǒng)的架構(gòu)如圖1所示,分布式存儲系統(tǒng)100中包括一個代理模塊101、一個元數(shù)據(jù)服務模塊102以及多個存儲服務t旲塊103。
[0037]所述代理模塊101用于接收來自應用系統(tǒng)的寫請求,按分塊參數(shù)計算所要寫入的數(shù)據(jù)的哈希值,得到塊標識,向元數(shù)據(jù)服務模塊102發(fā)送攜帶所述塊標識的寫請求;接收元數(shù)據(jù)服務模塊102返回的節(jié)點信息,根據(jù)所述節(jié)點信息,把寫入請求路由到相應的存儲節(jié)點;以及將來自元數(shù)據(jù)服務模塊102或存儲服務模塊103的寫入成功消息返回應用系統(tǒng);
[0038]所述元數(shù)據(jù)服務模塊102用于維護全局的一級映射表,一級映射表包含了全局邏輯地址和存儲節(jié)點、塊標識的映射關(guān)系;接收來自代理模塊的攜帶塊標識的寫請求,查找一級映射表,如果已存在相應塊標識的映射記錄,刷新一級映射表,增加一條寫入起始地址和相應塊標識的映射記錄,通過代理模塊101向應用系統(tǒng)返回寫入成功消息;若不存在,選擇一個存儲節(jié)點,把所述存儲節(jié)點的節(jié)點信息返回給代理模塊101 ;接收來自存儲服務模塊103的寫入信息,刷新一級映射表,新增寫入起始地址、相應塊標識、相應存儲節(jié)點的映射記錄,向所述存儲服務模塊103返回刷新成功消息;
[0039]存儲服務模塊103用于維護二級映射表,二級映射表包含了塊標識和實際存儲物理地址的映射關(guān)系;接收路由到本存儲服務模塊103所管理的存儲節(jié)點的寫請求,把數(shù)據(jù)寫入所述存儲節(jié)點的磁盤,刷新二級映射表,新增相應塊標識和實際寫入物理地址的記錄,并向元數(shù)據(jù)服務模塊102發(fā)送寫入信息。
[0040]根據(jù)本申請的另一實施例,所述代理模塊101還用于接收來自應用系統(tǒng)的讀請求,將該讀請求透傳給元數(shù)據(jù)服務模塊102,以及將來自存儲服務模塊103的讀數(shù)