摘要:針對現(xiàn)有屬性管理方法上的缺陷和不足,提出了一種新的屬性管理方法——哈希桶。哈希桶方法對對象的屬性進(jìn)行集中管理,不僅降低了管理存儲成本,更有效地提高了系統(tǒng)的吞吐率。經(jīng)過仿真測試表明,哈希桶對象屬性管理方法性能遠(yuǎn)優(yōu)于現(xiàn)有的屬性管理方法。
關(guān)鍵詞:基于對象存儲系統(tǒng);對象屬性;哈希桶
中圖分類號:TP311文獻(xiàn)標(biāo)志碼:A
文章編號:1001-3695(2007)11-0188-03
0引言
隨著計算機(jī)技術(shù)的快速普及,人們對數(shù)據(jù)的需求呈指數(shù)級增長,存儲系統(tǒng)已經(jīng)成為制約計算機(jī)進(jìn)一步發(fā)展的瓶頸。傳統(tǒng)的存儲系統(tǒng),如NAS和SAN都難以提供完美的存儲解決方案:NAS基于文件,文件級別的接口提供了安全性和跨平臺的互操作性;SAN基于塊,塊級別接口在快速訪問、高性能方面有優(yōu)勢。此時,基于對象的存儲系統(tǒng)[1]在眾多存儲方案中脫穎而出,它在性能、可擴(kuò)展、數(shù)據(jù)共享以及容錯、容災(zāi)等方面有杰出表現(xiàn),為人們提供一個完美的解決方案。對象存儲系統(tǒng)的概念已經(jīng)被工業(yè)界廣泛認(rèn)可,并由多家公司聯(lián)合,由美國國家標(biāo)準(zhǔn)組織(ANSI)下屬的T10工作組制定標(biāo)準(zhǔn)——OSD命令集(object-based storage device commands)[2];IBM、Panasas等公司已經(jīng)推出了相關(guān)產(chǎn)品。目前影響較大的對象存儲系統(tǒng)有集群文件系統(tǒng)公司開發(fā)的Lustre文件系統(tǒng)[3]和Panasas公司開發(fā)的Panasas ActiveScale storage cluster[4]等。
基于對象存儲系統(tǒng)之所以取得這么大的成功,最根本的原因在于它推出了一個全新的存儲接口,即對象(object)。
對象是一些具有邏輯關(guān)系的數(shù)據(jù)的載體,它與塊的固定大小不一樣。對象是可變長的,可包含任何類型的數(shù)據(jù),如文件、數(shù)據(jù)庫記錄、圖像以及多媒體視頻、音頻等。至于包含何種類型數(shù)據(jù)由應(yīng)用決定,對象可動態(tài)地擴(kuò)大和縮小。對象分為用戶對象、分區(qū)對象、集合對象和根對象四種。其中:用戶對象是對象存儲設(shè)備中數(shù)量最多的,它存放各種對象數(shù)據(jù)及其屬性數(shù)據(jù);把用戶對象進(jìn)行分區(qū)管理,構(gòu)成分區(qū)對象;集合對象是一些具有相同或相近特性的用戶對象或者分區(qū)對象的集合;根對象及其屬性用于描述對象存儲設(shè)備的一些特征,一個對象存儲設(shè)備只有一個根對象。對象由一個128 bit的標(biāo)志符惟一表示。該128 bit的標(biāo)志符為64 bit的partition_ID和64 bit的user_Object_ID的組合。
本文根據(jù)當(dāng)前存儲系統(tǒng)應(yīng)用的一些特點,結(jié)合對象存儲設(shè)備自身的優(yōu)點,提出了一種對象屬性管理的新方法——哈希桶。通過哈希桶對對象屬性進(jìn)行集中式的管理,大幅度地提高了系統(tǒng)的性能。
1對象存儲系統(tǒng)和對象存儲設(shè)備
對象存儲系統(tǒng)的體系結(jié)構(gòu)如圖1所示。高速網(wǎng)絡(luò)將用戶、元數(shù)據(jù)服務(wù)器(metadata server,MDS)和對象存儲設(shè)備(OSD)[5]連接起來。OBSS實現(xiàn)一個基于對象的分布式網(wǎng)絡(luò)文件系統(tǒng)。MDS提供全局名字空間,管理文件到對象的映射,提供身份驗證等安全機(jī)制。OSD則向外提供對象接口,以對象作為存取單元。用戶訪問文件時先向元數(shù)據(jù)服務(wù)器發(fā)送請求,獲取文件的信息(如文件由哪些對象組成以及對象所在的設(shè)備等)及訪問證書,然后客戶與OSD直接交互。OSD收到客戶請求后,對其身份進(jìn)行認(rèn)證,然后執(zhí)行客戶的對象讀寫請求。在這里客戶向OSD發(fā)送的I/O請求與基于塊的I/O請求不同,僅包括對象ID、對象的偏移地址以及長度。
OSD是一個智能化的設(shè)備,包括CPU、memory、網(wǎng)絡(luò)接口以及塊設(shè)備接口,管理對象存儲空間的分配、數(shù)據(jù)組織以及對象的屬性。對象存儲系統(tǒng)的最大好處之一就是將底層的數(shù)據(jù)組織和同步操作交由OSD管理,這就大大減輕了用戶端和元數(shù)據(jù)服務(wù)器的負(fù)擔(dān),同時也提高了整個系統(tǒng)的并行性和可擴(kuò)展性。
2對象屬性
對象屬性是對象特點的描述或歷史行為的記錄,充分利用對象的屬性特征能有效地提高基于對象存儲系統(tǒng)的整體性能。
對象可以表示任何類型的應(yīng)用數(shù)據(jù)。對于不同的應(yīng)用,數(shù)據(jù)的屬性是不同的。如果為所有的對象定義一種統(tǒng)一的屬性表示方式,這種表示方式會占用大量的存儲空間。為簡化和擴(kuò)展對象屬性的表示,本文采用一種屬性頁(attribute page)的表示方法,每個屬性頁上記錄相關(guān)或相近的屬性。每個屬性頁用屬性頁號(attri_Page_ID)來表示;屬性頁中具體的一個屬性用屬性索引號(attri_Index_ID)來索引。因此,對象的一個屬性以(partition_ID, user_ID, attri_Page_ID, attri_Index_ID)惟一表示。
對于每個對象都具有的公共屬性則定義為公共屬性頁(其ID號為0),如每個對象都具有創(chuàng)建時間、最近一次修改時間、對象大小等屬性。每個對象至少有一張屬性卡片,那就是公共屬性卡片,由系統(tǒng)定義、系統(tǒng)方法和用戶自定義方法均可解釋存取。
對于與應(yīng)用有關(guān)的屬性,則可定義為用戶屬性頁,如多媒體對象與數(shù)據(jù)庫表格對象具有完全不同的特點:多媒體對象有QoS[6]、幀速率、視頻圖像大小等屬性,可定義為多媒體屬性卡片;數(shù)據(jù)庫表格對象的屬性可能有記錄的條數(shù)、每條記錄的格式等內(nèi)容,可定義為數(shù)據(jù)庫表格屬性卡片。不同的對象使用了不同的自定義的屬性卡片。
屬性頁的使用為表示新對象類型的相應(yīng)特征提供了方便,只要根據(jù)新對象的特點定義針對該對象特點的屬性卡片,就可對屬性進(jìn)行擴(kuò)展,從而表示新對象的特征。如為每個對象定義一個預(yù)取屬性頁,對用戶訪問對象存儲設(shè)備的規(guī)律進(jìn)行智能的自我學(xué)習(xí),提高了對象存儲設(shè)備的預(yù)取命中率,從而提高對象存儲設(shè)備的性能。
屬性管理可分為分布式和集中式管理兩種。分布式的屬性管理將每個對象的所有屬性存放到一個前綴名與對象相同的文件中,如對象ID為123,對象的屬性文件命名為123.attri。這樣一個對象就對應(yīng)數(shù)據(jù)文件和屬性文件兩個文件。筆者采用文件方法實現(xiàn)了分布式屬性管理。文件方法雖然簡單易行,但是其存儲管理開銷大,在實際實現(xiàn)時性能不是很理想。集中式屬性管理,即將所有對象的屬性集中存放管理,采用哈希桶方法予以實現(xiàn)。最終實驗數(shù)據(jù)表明該方法不僅降低了管理成本,而且提高了整個系統(tǒng)的吞吐率。
3對象屬性的存放策略
3.1哈希桶
屬性是對象存儲系統(tǒng)中最大的特色,用戶在實際應(yīng)用中需要進(jìn)行大量的查找、增添、刪除屬性的操作。如何提高屬性的存取速度和效率,對于提高整個對象存儲系統(tǒng)的性能有著重要的意義。因此,本文提出了哈希桶的方法來集中管理屬性的存放。
哈希桶的整體設(shè)計思想是:屬性用〈key, value〉的記錄方式表示,并以桶(bucket)為單位進(jìn)行存放。用戶只需知道相應(yīng)屬性的key,根據(jù)哈希映射關(guān)系便可迅速找到屬性的value,而不需要按照傳統(tǒng)的文件方法,先根據(jù)屬性文件名查找對應(yīng)的屬性文件,再在該屬性文件中查找對應(yīng)的具體屬性。
屬性的key用〈partition_ID, user_ID, attri_Page_ID, attri_Index_ID〉表示。由于partition_ID、user_ID惟一表示了一個對象,這樣的組合就惟一確定了每一個對象的每一條具體屬性。Key對應(yīng)的value中存放相應(yīng)的屬性數(shù)據(jù)。桶用來記錄查找屬性的相關(guān)信息(用struct bucket_element表示,包括屬性的哈希值(hash_value)、該屬性記錄在磁盤中的位置(data_poin ̄ter)、屬性的key長度(key_size)、屬性的value長度(data_size)等)。桶的大小可以由用戶自己設(shè)定,默認(rèn)為1 024 Byte;桶中可裝載的bucket_element的個數(shù)用max_count表示。當(dāng)桶中的記錄裝滿時,即count=max_count,該桶就裂變成兩個桶。為了迅速地定位到所需要的桶,還引進(jìn)了目錄表(dir_table),記錄了所有桶對應(yīng)的在磁盤上的存放地址信息。
3.2屬性查找
下面來看一下屬性查找的過程(圖2),具體用obs_findkey(uint64_t partition_ID,uint64_t user_ID, uint32_t attri_Page_ID,uint32_t attri_Index_ID,…)函數(shù)來實現(xiàn)。
a)根據(jù)屬性key中的〈partition_ID, user_ID〉,通過哈希計算得到相應(yīng)31位的hash_value。
b)取hash_value的高N位作為目錄表(dir_table)的索引, dir[N]中的值指向存放該屬性信息的桶。根據(jù)該值從磁盤讀入相應(yīng)的桶。
c)Hash_vale % max_count,得到的值作為所查找屬性在桶中的索引(index)位置。
d)在桶中第index個bucket_element中記錄了屬性的相關(guān)信息,從中得到 date_pointer中記錄了該屬性在磁盤上的具體存放地址。
e)根據(jù)date_pointer值從磁盤中讀入該屬性記錄,比較該屬性的key值與要查找屬性的key值。如果相同,該屬性就是所查找的屬性,查找成功;反之,index值加1,跳轉(zhuǎn)步驟d)。
3.3屬性刪除
在哈希算法中,哈希沖突是不可避免的。同樣,在哈希桶的方法中,由于采用了哈希算法,哈希值相同的屬性由于哈希沖突必然會相鄰地存放在同一個桶里。在之前的屬性查找過程中,提到根據(jù)屬性的〈partition_ID, user_ID〉來計算hash值,而沒有用精確度更好、哈希沖突較少的整個key值〈partition_ID, user_ID, attri_Page_ID, attri_Index_ID〉來計算哈希值,正是利用哈希沖突的特性很好地解決了屬性刪除這個難點。在刪除一個對象時,不僅要刪除對象的數(shù)據(jù),還要刪除對象所有的屬性。如果按整個key計算哈希值的話,由于哈希值的不定性,該對象的屬性將會分布到多個桶中,這樣在刪除屬性時,就需要讀入多個與之相關(guān)的桶。在最壞的情況下,需要遍歷所有的桶,大大降低了速度。而且,用戶還需要了解對象的所有屬性key值,造成使用上的諸多不便,在某些場合還會直接導(dǎo)致操作失敗。根據(jù)〈partition_ID, user_ID〉計算hash值,同一個對象的所有屬性,由于其〈partition_ID, user_ID〉相同,所得的hash值也必定相同;而根據(jù)解決哈希沖突的處理方法,hash值相同的屬性順次相鄰存放,因此該對象所有的屬性必定存放到同一個桶中。在刪除對象屬性時,只需要從磁盤上讀入該桶,查找桶中所有〈partition_ID, user_ID〉相同的屬性,便可完全刪除該對象的所有屬性,從而實現(xiàn)對象快速、高效的刪除。
4性能評估
為了測試兩種屬性管理方法的優(yōu)劣,筆者編寫程序生成一個綜合負(fù)載[7]。該負(fù)載中對象屬性大小分布在1 KB~8 MB,且服從正態(tài)分布,屬性的請求隨機(jī)到達(dá)。在本測試的trace中,讀屬性操作占60%,寫屬性與刪除屬性操作占40%。實驗平臺采用Intel P4 3 GHz處理器,512 MB內(nèi)存,ATA 120 GB 2 MB緩存的磁盤。在單個OSD設(shè)備上進(jìn)行仿真測試。
實驗結(jié)果如圖3所示。在屬性管理的性能比較上,總體而言,哈希桶方法遠(yuǎn)遠(yuǎn)優(yōu)于文件方法管理。文件方法管理由于涉及到眾多file、dentry、inode等內(nèi)核數(shù)據(jù)結(jié)構(gòu)之間的復(fù)雜關(guān)系[8],在大量的文件讀、寫、刪除操作以后,性能下降很快。特別是在文件的讀寫屬性操作時,更是因為要加互斥操作以及維護(hù)數(shù)據(jù)的一致性,使得其操作時間要高于哈希桶方法中的處理時間。在哈希桶的管理方法中,由于涉及的數(shù)據(jù)結(jié)構(gòu)較少,系統(tǒng)的吞吐率雖然隨著訪問次數(shù)的增長不可避免地有所下降,但是仍大幅度地優(yōu)于同等條件下的文件管理方法。
(a) 系統(tǒng)總吞吐率(b) 讀請求吞吐率
(c) 寫請求吞吐率(d) 刪除請求吞吐率
5結(jié)束語
本文研究了對象存儲系統(tǒng)中的屬性管理方法哈希桶,通過集中管理對象屬性降低了存儲管理成本,提高了管理效率。在同等條件下仿真測試得出結(jié)論,哈希桶屬性管理方法的性能遠(yuǎn)遠(yuǎn)優(yōu)于現(xiàn)有的文件屬性管理方法。
參考文獻(xiàn):
[1]MESNIER M, GANGER G R, RIEDEL E. Object-based storage[J].IEEE Communications Magazine,2003,41(8):84-90.
[2]LOHMEYER J B, PENOKIE G O, ALOISI P D, et al. Information technology SCSI object-based storage device commands (OSD),Technical Council Proposal Douament T10/1355-D[R].[S.l.]:ANSI, 2004.
[3]BRAAM P J. The Lustre storage architecture[EB/OL]. http://www.lustre.org/docs/lustre.pdf.
[4]Panasas. Object storage architecture: defining a new generation of storage systems built on distributed, intelligent storage devices[R].[S.l.]:Storage Networking Solutions Europe, 2004.
[5]FENG Dan,QIN Ling-jun,ZENG Ling-fang, et al. A scalable object-based intelligent storage device[C]//Proc of the 3rd International Conference on Machine Learning and Cybernetics. Shanghai:[s.n.],2004:387-391.
[6]LU Ying-ping, DU D H C, RUWART T.QoS provisioning framework for an OSD-based storage system[C]//Proc of the 22nd IEEE/13th NASA Goddard Conference on Mass Storage Systems and Technologies.2005:28-35.
[7]WANG Feng,XIN Qin,HONG Bo,et al.File system workload analysis for large scientific computing applications[C]//Proc of the 21st IEEE/12th NASA Goddard Conference on Mass Storage Systems and Technologies.2004:129-152.
[8]BOVET D P, CESATI M. Understanding the Linux kernel[M]. 2nd ed.[S.l.]: O’Reilly,2002:400-465.
“本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文”