基于htm和單向rdma操作的分布式哈希表方法
【技術領域】
[0001 ]本發明涉及內存鍵值系統的方法,具體地,涉及一種基于HTM和單向RDMA操作的分布式哈希表方法。
【背景技術】
[0002]大規模的網絡應用需要使用內存來存儲數據,使得大數據集的訪問速度能夠滿足用戶需求。而內存鍵值系統正是一種滿足這種需求的高速數據緩存系統。內存鍵值系統的優勢在于將所有數據存儲在內存,從而當訪問數據時,只需要訪問內存,避免了以往存儲系統訪問磁盤導致的性能下降。
[0003]硬件事務內存(HTM,Hardware Transact1nal memory)是基于硬件實現的事務性內存,可以簡化了并發程序的編寫。HTM的基本的想法是要聲明一個代碼區域作為一個事務,事務(transact1n)執行并原子地提交所有結果到內存(如果事務成功),或中止并取消所有的結果(如果事務失敗)。硬件事務以較低的開銷提供原子性(Atomicity),一致性(Consistency)和隔離性(Isolat1n)等一系列有用的特性,大大簡化并發程序的編寫。
[0004]遠程直接內存訪問(RDMA,Remote Direct Memory Access),是當前高性能網絡設備提供的一種模式,能夠直接對遠端節點已注冊的內存空間進行讀寫訪問,完全不需要服務器機器的CPU進行協助。然而現在的內存鍵值系統仍然只是以傳統方式使用這些高性能網絡互聯設備,未能充分挖掘硬件性能。比如,直接使用InfiniBand網卡提供的兼容以太網編程接口的IP over InfiniteBand(IPoIB)模式。該模式下只能達到有限的傳輸帶寬和較長的網絡延遲。比如以lK-byte網絡包傳輸為例,IPoIB模式帶寬達和延時分別為每秒12.2萬次和60微秒。而使用RDMA時,傳輸帶寬和網絡延時則分別能夠達到149.6萬次和3微秒,性能提升達一個數量級。
[0005]因此如何針對遠程直接內存訪問(RDMA)模式特征,以及處理器提供的高效事務性內存(HTM)模式特征,設計內存鍵值系統,充分發揮高性能網絡互聯設備單向訪問特性,充分利用處理器的事務性內存,提高內存鍵值系統的帶寬,降低請求的延遲,并且不需要遠程處理器參與,實已成為本領域技術人員亟待解決的技術難題。
【發明內容】
[0006]針對現有技術中的缺陷,本發明的目的是提供一種基于HTM和單向RDMA操作的分布式哈希表方法。
[0007]根據本發明提供的基于HTM和單向RDMA操作的分布式哈希表方法,包括如下步驟:
[0008]步驟1:服務器端初始化內存鍵值系統,建立客戶端和服務器端之間的連接;
[0009]步驟2:客戶端在服務器端的內存鍵值系統內讀取存儲目標鍵值對的主頭部或者間接頭部;
[0010]步驟3:根據主頭部或者間接頭部的內容,找到值在服務器端的具體位置,判斷請求類型。判斷請求類別的理由是:讀請求不需要復雜的上鎖過程,而寫請求需要。
[0011]若請求類型為讀請求,則發送單向RDMA的讀請求,讀取服務器端的具體位置處的值,進入步驟6;其中,單向指的是請求不需要目標機器的處理器協助完成;
[0012]若請求類型是寫請求則發送單向RDMA的CAS(比較并交換Compare and Swap)請求,原子性地上鎖,CAS請求不執行的時候,則繼續重試,直到CAS成功,進入步驟4;原子性地上鎖指的是CAS請求只有成功與不執行兩種,不會有中間狀態;
[0013]步驟4:根據主頭部或者間接頭部存儲的值的具體位置,發送單向RDMA寫請求,把值寫到服務端存儲值的具體位置,覆蓋原來的值;
[0014]步驟5:發送單向RDMA的寫請求,釋放遠端的鎖;
[0015]步驟6:檢查初始時存儲目標值的鍵值對主頭部或者間接頭部里的自增量與讀取的目標值中的自增量是否一致;若不一致則返回執行步驟2,若一致,則結束。
[0016]具體地,初始時讀取存儲目標值的鍵值對的主頭部或者間接頭部時包含有鍵的自增量,在讀取目標值時也包含了值的自增量,若這兩個自增量若不一致,說明讀取頭部以及讀取具體值的過程中服務器端發生了插入或者刪除操作,讀取到的具體值可能是不正確的需要重新讀取,返回執行步驟2。
[0017]優選地,所述步驟1包括:
[0018]步驟1.1:服務器端初始化內存鍵值系統,具體地,計算每一個鍵值對中的鍵的哈希值,并將鍵值對存儲在對應的主頭部或者間接頭部,如附圖1所示,主頭部的位置是固定的,當插入新的鍵值對的時候,優先在主頭部中分配一個空槽存儲目標鍵,當主頭部空間使用完了之后,則分配一個間接頭部,并將主頭部指向新的間接頭部,構成一個鏈表;然后分配一個實際的項,用于存儲具體的值,并在主頭部或者間接頭部里記錄好項的地址。
[0019]步驟1.2:建立客戶端和服務器端之間的連接;具體地,客戶端向服務器端發送連接請求,服務器端收到連接請求后向客戶端發送回執消息,客戶端獲得服務器端一段內存的遠程直接訪問的權限。
[0020]優選地,所述步驟2包括:
[0021]步驟2.1:客戶端通過計算鍵值對請求的鍵的哈希值得到該鍵在服務器端對應的主頭部的位置后向服務器端發送遠程內存讀請求;
[0022]步驟2.2:將所述主頭部的四個空槽全部讀回,并檢查所述四個空槽的鍵是否與鍵值對請求的鍵相等;
[0023]步驟2.3:若鍵值對請求的鍵與主頭部內空槽的鍵相等,則進入步驟3;
[0024]若鍵值對請求的鍵與主頭部的所有空槽的鍵不相等,則進入步驟2.4;
[0025]步驟2.4:根據主頭部最后一個空槽的內容,求出間接頭部在服務器端的位置,并向服務器端發送遠程內存讀請求,將間接頭部的四個空槽全部讀回,檢查間接頭部的四個空槽的鍵是否與鍵值對請求的鍵相等;
[0026]若鍵值對請求的鍵與間接頭部內空槽的鍵相等,則進入步驟3;否則,進入步驟2.5;
[0027]步驟2.5:在鍵值對請求的鍵與間接頭部內空槽的鍵不相等時,則重新執行步驟2.1,當內存鍵值系統內所有空槽均訪問過一次卻依然沒有找到與鍵值對請求的鍵相等的空槽時,說明鍵值系統中并沒有此鍵值對,查詢操作結束;
[0028]優選地,所述步驟3中的原子性地上鎖存在一次性不能夠成功拿鎖的情況,當拿鎖不成功時重復嘗試拿鎖直到成功為止。
[0029]與現有技術相比,本發明具有如下的有益效果:
[0030]1、本發明提出的基于HTM和單向RDMA操作的分布式哈希表方法,能夠在不需要服務器端參與的情況下,縮短鍵值請求的延遲;
[0031]2、本發明提出的基于HTM和單向RDMA操作的分布式哈希表方法,充分發揮高性能網絡互聯設備單向訪問特性,充分利用處理器的事務性內存,提高內存鍵值系統的帶寬,增大系統的吞吐量。
【附圖說明】
[0032]通過閱讀參照以下附圖對非限制性實施例所作的詳細描述,本發明的其它特征、目的和優點將會變得更明顯:
[0033]圖1為本發明提供的基于HTM和單向RDMA操作的分布式哈希表方法的結構圖;
[0034]圖2為本發明提供的基于HTM和單向RDMA操作的分布式哈希表方法的流程示意圖。
【具體實施方式】
[0035]下面結合具體實施例對本發明進行詳細說明。以下實施例將有助于本領域的技術人員進一步理解本發明,但不以任何形式限制本發明。應當指出的是,對本領域的普通技術人員來說,在不脫離本發明構思的前提下,還可以做出若干變形和改進。這些都屬于本發明的保護范圍。
[0036]具體地,如圖2所示,本發明提供的基于HTM和單向RDMA操作的分布式哈希表方法包括以下步驟:
[0037]步驟S1:服務器端初始化內存鍵值系統,計算每一個鍵值對的鍵的哈希值,并將鍵值對存儲在對應的主頭部(Main Header)或者間接頭部(Indirect Header),并分配一個實際的項(Entry),用于存儲具體的值。
[0038]具體地,每一個主頭部有4個空槽(slot),每個空槽可以存儲一對鍵值對,若4個空槽均被占用,貝分配一個間接頭部(Indirect Header)來放置最細的鍵值對。
[0039]步驟S2:建立客戶端和服務器端之間的連接;
[0040]具體地,客戶端向服務器端發送連接請求,服務器端收到連接請求后向客戶端發送回執消息(使用傳統方法),雙方建立連接,客戶端擁有服務器端一段內存的遠程直接訪問的權限,之后可以遠程讀寫而不會影響服務器。
[0041 ]步驟S3:客戶端查找與鍵值對請求的鍵相等的鍵的空槽位置;
[0042]所述步驟S3包括:
[0043 ]步驟S301:客戶端通過計算鍵值對請求的鍵的哈希值得到該鍵在服務器端對應的主頭部的位置后向服務器端發送遠程內存讀請求;