一種分布式鍵-值查詢方法和查詢引擎系統的製作方法
2023-04-26 11:49:06 1
專利名稱:一種分布式鍵-值查詢方法和查詢引擎系統的製作方法
技術領域:
本申請涉及分布式數據存儲和查詢技術領域,特別是涉及ー種分布式鍵-值查詢方法和查詢引擎系統。
背景技術:
對於大規模網際網路應用、雲計算的支撐而言,一般會使用關係型資料庫存儲相關數據。傳統的關係型資料庫,通常將某ー個應用的某一類信息(例如網站用戶信息)都存儲在資料庫系統的單個庫單張表中,對應用程式提供讀取和寫入操作的通訊接ロ。實現上,典型的關係型資料庫如MySQL,單表的查詢和寫入操作有一定上限,超過這個上限,SQL 查詢和寫入操作將會變得非常緩慢,磁碟輸入/輸出(IO)模塊也會出現瓶頸。在網際網路海量數據的今天,傳統關係型資料庫要承載海量數據,通常的做法就是將數據分成多個庫多個表存儲,例如網站用戶信息數據,可以按取模算法對用戶標識(userjd)欄位計算哈希 (hash)值,將不同的用戶數據分片到不同資料庫,以此來解決單庫單表的存儲和讀寫壓力問題。也就是說,傳統的關係型資料庫,為支持大容量數據,需要將數據水平拆分到多個庫多張表上,確保單張表的記錄數是有限的。這樣的好處在於減小了索引文件的大小,從而提升查詢性能。但是,傳統的關係型資料庫,傾向於使用單臺機器來解決存儲容量的問題。若要擴容到多臺機器,需要在應用層做數據拆分策略。這裡存在兩個問題,ー個是對於每個應用, 都需要應用層做數據拆分,且每個應用拆分策略都會有不同,效率低;另一個問題是增加機器後的數據重新拆分代價很高,需要人工停機維護操作,不支持自動彈性擴展。其次,傳統的關係型資料庫,單臺機器的並發能力有一定上限,高並發的訪問會將機器資源耗盡。不能支持高並發訪問的原因之一是關係型資料庫在檢索時需要做SQL解析操作,對CPU資源的開銷大。總之,目前需要本領域技術人員迫切解決的ー個技術問題是如何能夠提供ー種能夠容納海量數據、適應高並發訪問的更加優化的存儲/查詢方案。
發明內容
本申請所要解決的技術問題是提供ー種分布式鍵-值查詢方法和查詢引擎系統, 能夠容納海量鍵-值數據,對高並發訪問的適應性更強。為了解決上述問題,本申請公開了ー種分布式鍵-值查詢引擎系統,具體可以包括元數據伺服器,用於維護指向存儲節點的全局路由表信息;
至少ー個代理節點,包括 查詢轉發模塊,用於響應客戶端發出的包括目標KEY的請求,基於所述全局路由表信息,將客戶端請求轉發給相應的存儲節點;數據轉發模塊,用於將相應存儲節點返回的包括目標Value的回應包傳送給客戶
立而;至少ー個存儲節點,用於基於接收到的客戶端請求,從本地存儲中獲取所需數據, 並發送包括目標Value的回應包給代理節點。優選的,所述代理節點還可以包括路由表同步模塊,用於將元數據伺服器的全局路由表信息同步至本地;其中,所述查詢轉發模塊基於本地的全局路由表信息進行查詢。優選的,所述代理節點還可以包括路由表更新模塊,用於當收到元數據伺服器的路由表更新通知時,從元數據伺服器獲取新的全局路由表信息。優選的,所述查詢轉發模塊具體包括哈希子模塊,用於基於所接收的包括目標 KEY的客戶端請求,通過哈希算法計算目標KEY所在的數據區塊;定位子模塊,用於依據計算得到的目標KEY所在的數據區塊的標識,查詢所述全局路由表信息,定位相應的存儲節點;轉發子模塊,用於將客戶端請求轉發至相應存儲節點。優選的,所述元數據伺服器還可以包括數據同步模塊,用於通知所述新增的存儲節點從所選定的存儲節點中同步N個數據區塊;所述N由所述新增存儲節點的屬性參數計算得到;路由表變更模塊,用於當所述新增的存儲節點完成數據同步後,生成新的全局路由表信息;第一更新通知模塊,用於向代理節點發送路由表更新通知。優選的,所述元數據伺服器還可以包括監控模塊,用於監控各存儲節點的存活狀態,當監測到一個存儲節點失效時,修改全局路由表信息;所述修改包括針對以該失效的存儲節點作為主節點的數據區塊,將其主節點重新映射到另ー個冗餘節點上;第二更新通知模塊,用於向代理節點發送路由表更新通知。優選的,所述存儲節點可以包括用於存儲熱點數據的高速存儲節點,和用於存儲非熱點數據的其他類型存儲節點;其中,所述高速存儲節點包括內存節點或者固態硬碟節點,所述其他類型存儲節點包括SAS/SATA硬碟節點。依據本發明的另ー實施例,還公開了ー種分布式鍵-值查詢方法,具體可以包括 接收客戶端指向當前代理節點的包括目標KEY的請求;當前代理節點通過查詢全局路由表信息,將客戶端請求轉發給相應的存儲節點;當前代理節點將相應存儲節點返回的包括目標Value的回應包傳送給客戶端。優選的,所述分布式鍵-值查詢方法還可以包括當前代理節點通過異步線程將維護在伺服器上的全局路由表信息同步至本地,在本地進行對全局路由表信息的查詢。優選的,所述分布式鍵-值查詢方法還可以包括當收到路由表更新通知時,獲取新的全局路由表信息。優選的,所述當前代理節點通過查詢全局路由表信息,將客戶端請求轉發給相應的存儲節點的過程具體包括基於所接收的包括目標KEY的客戶端請求,通過哈希算法計算目標KEY所在的數據區塊;依據計算得到的目標KEY所在的數據區塊標識,查詢所述全局路由表信息,定位相應的存儲節點;將客戶端請求轉發給相應的存儲節點。依據本發明的另ー實施例,還公開了ー種分布式鍵-值(Key-Value)查詢引擎系統的故障轉移方法,包括監測各存儲節點是否存活;其中,同一個數據區塊存儲在ー個存儲主節點和至少ー個存儲冗餘節點上;當監測到一個存儲節點失效時,修改全局路由表信息;所述修改包括針對以該失效的存儲節點作為主節點的數據區塊,將其主節點重新映射到另ー個冗餘節點上;將新的全局路由表信息更新至各代理節點;所述代理節點用於響應客戶端發出的包括目標KEY的請求,基於所述全局路由表信息,將客戶端請求轉發給相應的存儲節點;以及將相應存儲節點返回的包括目標Value的回應包傳送給客戶端。依據本發明的另ー實施例,還公開了ー種分布式鍵-值(Key-Value)查詢引擎系統的增加物理存儲節點方法,包括接收新增存儲節點的註冊請求;依據新增存儲節點的屬性參數,通知所述新增的存儲節點從所選定的存儲節點中同步N個數據區塊;所述N由所述新增存儲節點的屬性參數計算得到;當所述新增的存儲節點完成數據同步後,生成新的全局路由表信息;將新的全局路由表信息更新至代理節點;所述代理節點用於響應客戶端發出的包括目標KEY的請求,基於所述全局路由表信息,將客戶端請求轉發給相應的存儲節點;以及將相應存儲節點返回的包括目標Value的回應包傳送給客戶端。優選的,該方法,在接收新增存儲節點的註冊請求之後,還包括如果所述新增存儲節點為合法工作節點,則進入下一歩,否則,拒絕所述新增存儲節點的加入。優選的,該方法,在將新的全局路由表信息更新至代理節點之後,還包括在所選定的存儲節點的空閒時間,逐步刪除其所存儲的已同步到所述新增存儲節點的所述N個數據區塊。依據本發明的另ー實施例,還公開了一種元數據伺服器,包括存儲模塊,用於存儲反映目標KEY和存儲節點映射關係的全局路由表信息;全局路由表信息同步模塊,用於將所述全局路由表信息同步到至少ー個代理節點;所述代理節點用於響應客戶端發出的包括目標KEY的請求,基於所述全局路由表信息, 將客戶端請求轉發給相應的存儲節點;以及將相應存儲節點返回的包括目標Value的回應包傳送給客戶端。優選的,元數據伺服器還可以包括數據同步模塊,用於依據新增存儲節點的屬性參數,通知所述新增的存儲節點從所選定的存儲節點中同步N個數據區塊;所述N由所述新增存儲節點的屬性參數計算得到;路由表變更模塊,用於當所述新增的存儲節點完成數據同步後,生成新的全局路由表信息;第一更新通知模塊,用於向代理節點發送路由表更新通知。優選的,元數據伺服器還可以包括監控模塊,用於監控各存儲節點的存活狀態, 當監測到一個存儲節點失效時,修改全局路由表信息;所述修改包括針對以該失效的存儲節點作為主節點的數據區塊,將其主節點重新映射到另ー個冗餘節點上;第二更新通知模塊,用於向代理節點發送路由表更新通知。依據本發明的另ー實施例,還公開了ー種代理節點,可以包括查詢轉發模塊,用於響應客戶端發出的包括目標KEY的請求,通過查詢全局路由表信息,將客戶端請求轉發給相應的存儲節點;數據轉發模塊,用於將相應存儲節點返回的包括目標Value的回應包傳送給客戶立面。優選的,所述的代理節點還可以包括路由表同步模塊,用於將伺服器上的全局路由表信息同步至本地;其中,所述查詢轉發模塊基於本地的全局路由表信息進行查詢。優選的,所述的代理節點還可以包括路由表更新模塊,用於當收到路由表更新通
7知時,獲取新的全局路由表信息。優選的,所述查詢轉發模塊具體包括哈希子模塊,用於基於所接收的包括目標KEY的客戶端請求,通過哈希算法計算目標KEY所在的數據區塊;定位子模塊,用於依據計算得到的目標KEY所在的數據區塊標識,查詢所述全局路由表信息,定位相應的存儲節點;轉發子模塊,用於將客戶端請求轉發至相應存儲節點。與現有技術相比,本申請具有以下優點本發明提出了一種新的分布式鍵-值查詢引擎架構,採用該架構的查詢引擎系統和查詢方法,能夠實現鍵-值數據的分布式存儲和查詢,並且能夠容納海量鍵-值數據,對高並發訪問的適應性更強。其中,由於本發明採用了全局路由表信息,客戶端的數據請求可以通過查詢全局路由表進而找到相應的存儲物理節點,然後獲取所需數據即可。因此,當需要増加物理存儲節點吋,只需要將該物理存儲節點増加的信息更新至全局路由表即可,可以實現平滑増加或者減少物理存儲節點的個數,無須停止服務。相比較而言,現有技術針對存儲節點並沒有全局路由表,而是在應用層做數據拆分策略,増加存儲節點後的數據重新拆分代價很高,需要人工停機維護操作,不支持自動彈性擴展。另外,由於本發明將存儲和查詢架構優化為分布式鍵-值(Key-Value)結構,可以避免採用SQL資料庫的複雜查詢方式,提高查詢速度,故而大大提高了並發訪問的強度,尤其適用於確定某個應用程式或者某個網址是否有害的信息存儲和查詢;例如,尤其適用於木馬雲查殺、網址雲查殺以及雲安全中心數據索引等場合。再者,由於本發明並不是直接由元數據伺服器來對全局路由表進行處理,而是由代理節點接收用戶請求,並對同步至代理節點本地的全局路由表進行查詢處理,這樣,就可以將高並發的用戶請求分散到多個代理節點上,由其同時進行查詢處理,從而也大大提高了高並發訪問的處理能力。
圖1是本發明ー種分布式鍵-值查詢引擎系統實施例的模塊示意圖;圖2是本發明ー種分布式鍵-值查詢方法實施例的步驟流程圖;圖3是本發明ー種故障轉移方法的步驟流程圖;圖4是本發明一種增加物理存儲節點的方法的步驟流程圖;圖5是本發明一種優選的分布式KEY-VALUE查詢引擎系統的結構示意圖;圖6是ー種KEY和VBucket之間,VBucket和物理存儲節點之間的映射關係示意圖;圖7是本發明一種元數據伺服器實施例的模塊示意圖;圖8是本發明ー種代理節點實施例的模塊示意圖。
具體實施例方式為使本申請的上述目的、特徵和優點能夠更加明顯易懂,下面結合附圖和具體實施方式
對本申請作進一步詳細的說明。
參照圖1,示出了本發明ー種分布式鍵-值查詢引擎系統實施例,具體可以包括元數據伺服器101,用於維護指向存儲節點的全局路由表信息;所述維護可以包括存儲以及相應的修改更新等;至少ー個代理節點102,在圖1中示出了 X個代理節點,每個代理節點可以包括查詢轉發模塊,用於響應客戶端發出的包括目標KEY的請求,基於所述全局路由表信息,將客戶端請求轉發給相應的存儲節點;數據轉發模塊,用於將相應存儲節點返回的包括目標Value的回應包傳送給客戶
立而;至少ー個存儲節點103,用於基於接收到的客戶端請求,從本地存儲中獲取所需數據,並發送包括目標Value的回應包給代理節點。在圖1中示出了 Y個存儲節點。採用上面的查詢引擎系統,能夠容納更加海量的鍵-值數據,對高並發訪問的適應性更強。其中,元數據伺服器101中的全局路由表信息存儲有目標KEYヰ存儲節點的映射關係。當然,該映射關係可以是直接映射,也可以是間接映射,在本發明的後面實施例描述中,會給出ー個間接映射的優選實現。在本發明的ー個優先實施方式中,所述代理節點102還可以包括路由表同步模塊,用於將元數據伺服器的全局路由表信息同步至本地;其中,所述查詢轉發模塊基於本地的全局路由表信息進行查詢。這樣,可以避免毎次查詢代理節點都到元數據伺服器去請求查詢。同吋,由於代理節點可以設置多個,從而可以實現路由查詢的並發執行,提高對高並發訪問的適應性。當然,具體同步的時間不需要加以限定,例如,在代理節點開機時同步即可;同吋,也可以在固定時刻進行同歩,以防止沒有收到更新通知的情況。在本發明的ー個優先實施方式中,所述代理節點102還可以包括路由表更新模塊,用於當收到元數據伺服器的路由表更新通知時,從元數據伺服器獲取新的全局路由表信息。當出現某個存儲節點故障或者新增存儲節點吋,元數據伺服器上維護的全局路由表信息都會發生變化,因而,此時可以通過路由表更新模塊更新全局路由表信息。需要說明的是,存儲節點可以採用各種存儲介質。例如要求低延遲高並發的內存哈希表存儲引擎,或者容量較高但響應延遲尚可、並發能力一般的固態硬碟(SSD,Solid State Disk)存儲引擎,或者大容量、但響應延遲高、並發能力差的SASGerial attached SCSI)/SATA(Serial Advanced Technology Attachment)存儲引擎。本發明的存儲節點作為「引擎」而言,可以具有接受請求和返回數據的執行能力,當然,還可以具有新增、查找、更新、刪除(CRUD)數據等的執行能力。在本發明的ー個優選實現中,建議採用多級混合存儲引擎。具體的,所述至少ー個存儲節點包括用於存儲熱點數據的高速存儲節點,和用於存儲非熱點數據的其他類型存儲節點;其中,所述高速存儲節點包括內存節點或者固態硬碟節點,所述其他類型存儲節點包括SAS/SATA硬碟節點。即基於不同數據的情況,採用不同的存儲介質來組成多級混合存儲引擎,以達到最優效果。下面本發明給出ー種具體的針對客戶端請求查詢、定位和轉發的實現。其中,所述查詢轉發模塊具體可以包括哈希子模塊,用於基於所接收的包括目標KEY的客戶端請求, 通過哈希算法計算目標KEY所在的數據區塊;定位子模塊,用於依據計算得到的目標KEY所在的數據區塊的標識,查詢所述全局路由表信息,定位相應的存儲節點;轉發子模塊,用於將客戶端請求轉發至相應存儲節點。與採用直接映射-查表的方式相比,固定哈希的方法可以有效減少路由表的大小,提高查詢效率。具體的,通常KEY的取值範圍很大,假設KEY的組成為1 位MD5哈希值,如果使用直接映射-查表方法,路由表最多需要由2~128條「KEY-存儲節點」映射關係組成,這個是實現中是不現實的。採用哈希算法計算數據區塊,再通過數據區塊定位存儲節點這種間接映射的方法,可以有效減少路由表的大小。在某些情況下,存儲節點可能需要増加。則為了在該情形下更好的管理路由,所述元數據伺服器還可以包括數據同步模塊,用於通知所述新增的存儲節點從所選定的存儲節點中同步N個數據區塊;所述N由所述新增存儲節點的屬性參數計算得到;路由表變更模塊,用於當所述新增的存儲節點完成數據同步後,生成新的全局路由表信息;第一更新通知模塊,用於向代理節點發送路由表更新通知。在實際應用中,也可能出現某個存儲節點出現故障失效的情況,則為了及時應對這種情況,所述元數據伺服器還包括監控模塊,用於監控各存儲節點的存活狀態,當監測到一個存儲節點失效時,修改全局路由表信息;所述修改包括針對以該失效的存儲節點作為主節點的數據區塊,將其主節點重新映射到另ー個冗餘節點上;第二更新通知模塊,用於向代理節點發送路由表更新通知。參照圖2,示出了本發明ー種分布式鍵-值查詢方法實施例,具體可以包括步驟201、接收客戶端指向當前代理節點的包括目標KEY的請求;步驟202、當前代理節點通過查詢全局路由表信息,將客戶端請求轉發給相應的存儲節點;步驟203、當前代理節點將相應存儲節點返回的包括目標Value的回應包傳送給
客戶端。在該方法中,全局路由表信息可以存儲在其他的伺服器上,也可以直接存儲在代理節點上,例如,針對數據量不是特別海量的情況,採用少量甚至ー個代理節點的情況,直接由代理節點來維護全局路由表信息也是可行的;在各個代理節點之間進行同步維護即可。當然,優選的,為了提高代理節點處理並發訪問的能力,還是採用在另外的伺服器上単獨維護全局路由表信息為佳。此時,當前代理節點可以通過異步線程將維護在伺服器上的全局路由表信息同步至本地,在本地進行對全局路由表信息的查詢。優選的,在存儲節點自身或者所存儲位置變更吋,上面的方法實施例還可以包括 當收到路由表更新通知時,獲取新的全局路由表信息。在本發明的ー個優選實現中,全局路由表信息並非直接存儲目標KEYヰ存儲節點的直接映射關係,而是存儲了ー個間接映射關係「目標KEY所在的數據區塊ヰ存儲節點」 的,但是可以直接由目標KEY計算得到其所在的數據區塊的標識,這樣可以更好的提高全局路由表的查詢速度。因為大多數情況下,標識查詢要比「目標KEY」的查詢要快的多。在該實現方案中,所述當前代理節點通過查詢全局路由表信息,將客戶端請求轉發給相應的存儲節點的過程具體包括基於所接收的包括目標KEY的客戶端請求,通過哈希算法計算目標KEY所在的數據區塊;依據計算得到的目標KEY所在的數據區塊標識,查詢所述全局路由表信息,定位相應的存儲節點;將客戶端請求轉發給相應的存儲節點。
相應的,參照圖3,本發明還提供了ー種分布式鍵-值(Key-Value)查詢引擎系統的故障轉移方法,專用於解決存儲節點出現故障的情況,包括步驟301、監測各存儲節點是否存活;其中,同一個數據區塊存儲在ー個存儲主節點和至少ー個存儲冗餘節點上;步驟302、當監測到一個存儲節點失效時,修改全局路由表信息;所述修改包括 針對以該失效的存儲節點作為主節點的數據區塊,將其主節點重新映射到另ー個冗餘節點上;步驟303、將新的全局路由表信息更新至各代理節點;所述代理節點用於響應客戶端發出的包括目標KEY的請求,基於所述全局路由表信息,將客戶端請求轉發給相應的存儲節點;以及將相應存儲節點返回的包括目標Value的回應包傳送給客戶端。傳統的關係型資料庫,例如MySQL,若資料庫伺服器出現故障,一般都需要資料庫管理人員將對資料庫的訪問請求切換到備份伺服器上。而本發明可以實現故障的平滑轉移。另外,參照圖4,本發明還提供ー種分布式鍵-值(Key-Value)查詢引擎系統的增加物理存儲節點方法,可以包括步驟401、接收新增存儲節點的註冊請求;步驟402、依據新增存儲節點的屬性參數,通知所述新增的存儲節點從所選定的存儲節點中同步N個數據區塊;所述N由所述新增存儲節點的屬性參數計算得到;步驟403、當所述新增的存儲節點完成數據同步後,生成新的全局路由表信息;步驟404、將新的全局路由表信息更新至代理節點;所述代理節點用於響應客戶端發出的包括目標KEY的請求,基於所述全局路由表信息,將客戶端請求轉發給相應的存儲節點;以及將相應存儲節點返回的包括目標Value的回應包傳送給客戶端。當然,為了保證對存儲節點的管理和控制,還可以增加對存儲節點的註冊審核。例如,在接收新增存儲節點的註冊請求之後,還包括如果所述新增存儲節點為合法工作節點,則進入下一歩,否則,拒絕所述新增存儲節點的加入。需要說明的是,如果已經將某些數據區塊轉移到新增的存儲節點上了,則原存儲節點上的這些數據區塊則可以作為其冗餘備份存在,並更新在全局路由表信息中。當然,原存儲節點上的這些數據區塊在冗餘備份數量足夠的情況下,也可以作為無效數據而刪除, 降低原存儲節點的負荷。例如,在將新的全局路由表信息更新至代理節點之後,還包括在所選定的存儲節點的空閒時間,逐步刪除其所存儲的已同步到所述新增存儲節點的所述N個數據區塊。總之,對於圖3和圖4所提供的故障轉移方法和増加物理存儲節點方法,可以幫助本發明在分布式鍵-值(Key-Value)查詢引擎系統中平滑増加或者減少機器個數,無須停止服務。增減機器後,數據會自動在多臺機器之間重新達到平滑點(例如通過主節點和冗餘節點的配置實現平滑)。參照圖5,示出了本發明ー種優選的分布式KEY-VALUE查詢引擎系統的結構示意圖。其中,示出了多個並發請求的客戶端。客戶端(Client)主要是用於發起請求。具體的,本發明可以支持多種語言的客戶端(C/C++/Python/PHP等)。
元數據伺服器(Config Server)負責維護全局路由表信息,並監控所有存儲節點的存活狀態,在存儲節點失效和新增存儲節點吋,元數據伺服器起著關鍵的協調作用。代理節點(Storage Proxy):負責響應客戶端的請求和請求的轉發。根據元數據伺服器上的路由表信息,代理節點可以將客戶端的請求轉發給下遊的存儲節點,並將存儲節點的回應包遞給客戶端。存儲節點(Storage Node):負責數據的實際存儲,可以有多種存儲引擎供選擇,例如要求低延遲高並發的內存哈希表存儲引擎,或者容量較高但響應延遲尚可、並發能力一般的固態硬碟(SSD)存儲引擎,或者大容量、但響應延遲高、並發能力差的SAS/SATA存儲引擎,或者定製化的多級混合存儲引擎。在圖5中,在客戶端和存儲節點之間,包括Nginx/UDP伺服器和代理節點,當然, Nginx/UDP伺服器通常只是分布式通訊系統中所需要的一個傳輸設備而己,本領域技術人員也可以採用其他設備,甚至不採用。Nginx/UDP伺服器和代理節點之間也不一定是一一對應的關係。需要說明的是,在一個實體硬體中可能存在多個代理節點,本發明對此無需加以限制。並且在圖5中還示出了數據區塊冗餘備份存儲的情況。具體的,圖5給出了 4個存儲節點,其中,存儲節點a是數據區塊_0的主節點,數據區塊_1的主節點,數據區塊_6的冗餘節點,數據區塊_7的冗餘節點;存儲節點b是數據區塊_0的冗餘節點,數據區塊_1的冗餘節點,數據區塊_2的主節點,數據區塊_3的主節點;存儲節點c是數據區塊_2的冗餘節點,數據區塊_3的冗餘節點,數據區塊_4的主節點,數據區塊_5的主節點;存儲節點d是數據區塊_4的冗餘節點,數據區塊_5的冗餘節點,數據區塊_6的主節點,數據區塊_7的主節點;這樣的存儲方式,包括保證在均勻分布的情況下,每個數據區塊都可以存儲在一個主節點上,也同時存儲在ー個冗餘節點上。S卩,各個物理存儲節點都可以即做某幾個VBucket (Virtual Bucket ;數據邏輯分區區間,即數據區塊的ー種)的主節點,又做另外幾個VBucket的冗餘節點。存儲節點上有獨立線程,從主節點上同步所負責冗餘VBucket的新增/修改數據。在圖5中,元數據伺服器還可以配置有一個備份的伺服器。下面針對圖5所示系統,描述ー個從客戶端發起請求到收到查詢引擎響應的完整流程的示例。1)以GET請求為例,客戶端向代理節點(Storage Proxy)發起單個KEY的GET請求,也可以是批量KEY的GET請求。2)代理節點收到上遊客戶端的請求後,通過固定哈希算法(例如MM)計算KEY所在的VBucket序號,即數據區塊區號。3)代理節點通過KEY所屬的VBucket序號,查找全局路由表,定位物理存儲節點 (Storage Node)。實現上,查找全局路由表的過程不需要毎次都請求元數據伺服器(Config krver),而是代理節點通過ー個異步線程將路由信息同步到本地。
4)代理伺服器通過VBucket序號定位到的是ー組物理存儲節點,其中第一個節點是主節點,負責該VBucket的所有讀取和寫入請求,後續為冗餘備份節點。代理伺服器將客戶端的GET請求轉發給主節點。幻物理存儲節點接收到GET請求後,從本地存儲引擎中取出KEY對應的數據,發送應答包給代理節點。6)代理節點接收到物理存儲節點的應答包後,將應答包返回給客戶端。參照圖6,示出了 KEY和VBucket之間,VBucket和物理存儲節點之間的映射關係示意圖。在KEY和VBucket之間,通過固定哈希的方式獲取映射關係,在VBucket和物理存儲節點之間,通過查表的方式獲取映射關係。下面描述ー個物理存儲節點失效的故障轉移流程的示例。1) A節點失效。2)元數據伺服器上有對所有物理存儲節點存活狀態的實時監控進程。當發現A節點失效時,即會修改路由表,將A節點作為主節點的VBucket,其主節點重新映射到下ー個冗餘節點上。3)所有代理節點,都會從元數據伺服器同步路由表信息。當發現路由表變更後,後續的請求將依據新的路由表來做路由。下面描述ー個増加ー個物理存儲節點的流程的示例。1)新增物理存儲節點B,B會向元數據伺服器發送ー個註冊請求。2)元數據伺服器收到註冊請求後,確認B是否是工作節點,若不是合法工作節點則拒絕,若是則進入下面新節點數據準備的流程。3)假設之前有m個物理存儲節點,而VBucket總數為vt,元數據伺服器計算新加入節點可以承載的VBucket個數為number = abs (vt/m+1)。元數據伺服器發起指令通知B 從當前活躍的存儲節點中同步number個(N個)VBucket。4)新存儲節點B完成VBucket數據同歩,通知元數據伺服器其準備完畢。5)元數據伺服器生成ー張新的路由表。6)代理節點收到元數據伺服器的路由表更新通知,將後續請求依據新的路由表路由,至此,新物理節點B正式加到集群當中服務。因為新增存儲節點分擔了 VBucket,増加了系統容量。在空閒時間,當前活躍的存儲節點會逐步淘汰已經不屬於自身的VBucket。本發明實現了一個由多臺機器組成,可容納海量數據,並可以通過增加集群機器數量擴大集群數據規模,穩定可靠的鍵-值存儲系統,以及存儲之上的適應高並發訪問的網絡模型。本發明具有以下的一些創新點本發明實現了基於一致性哈希算法的數據分布策略。集群內部有輕量級的元數據伺服器,只存儲全局路由表信息,即數據區塊區號和存儲物理節點的映射關係,對鍵的訪問請求,會先根據哈希算法計算出數據區塊區號,再通過全局路由表找到所負責的存儲物理
ザル本發明的集群內部可以平滑増加或者減少機器個數,無須停止服務。增減機器後, 數據會自動在多臺機器之間重新達到平滑點。本發明支持數據冗餘存儲。所有數據節點均可以同時作為其他節點的冗餘節點。
13
本發明的集群對外可以採用支持高並發的網絡訪問接ロ,並可以通過增加代理節點和存儲節點的數量提高整個集群的並發能力。代理節點對外通訊,代理節點和存儲節點之間的內部通訊可以優選採用基於IO復用的TCP網絡模型。本發明還支持存儲引擎的定製化。可以根據應用需求,選用內存存儲引擎、或者固態硬碟存儲引擎、或者SAS/SATA硬碟的存儲引擎;或者可以選用混用的多級存儲引擎,將熱數據在高速設備(內存、固態硬碟)上緩存。總之,本發明可以實現自動化的集群擴容,通過增加集群內部物理存儲節點的數量,內部數據會自動轉移到新的存儲節點上,從而達到擴大集群的存儲容量和並發訪問能力的目的。本發明可以承載海量數據的存儲和每日千億級別的高並發訪問。由其適用於木馬雲查殺服務、網址雲查殺服務、雲安全中心數據索引中心等相關安全產品和後臺應用服務中。參照圖7示出了本發明ー種元數據伺服器實施例,作為本發明方案中的關鍵部件,其可以包括存儲模塊701,用於存儲反映目標KEY和存儲節點映射關係的全局路由表信息;全局路由表信息同步模塊702,用於將所述全局路由表信息同步到至少ー個代理節點;所述代理節點用於響應客戶端發出的包括目標KEY的請求,基於所述全局路由表信息,將客戶端請求轉發給相應的存儲節點;以及將相應存儲節點返回的包括目標Value的回應包傳送給客戶端。在優選實現中,元數據伺服器還可以包括數據同步模塊703,用於依據新增存儲節點的屬性參數,通知所述新增的存儲節點從所選定的存儲節點中同步N個數據區塊;所述N由所述新增存儲節點的屬性參數計算得到;路由表變更模塊704,用於當所述新增的存儲節點完成數據同步後,生成新的全局路由表信息;第一更新通知模塊705,用於向代理節點發送路由表更新通知。對於具有故障轉移功能的元數據伺服器而言,其還可以包括監控模塊706,用於監控各存儲節點的存活狀態,當監測到一個存儲節點失效時,修改全局路由表信息;所述修改包括針對以該失效的存儲節點作為主節點的數據區塊,將其主節點重新映射到另ー個冗餘節點上;第二更新通知模塊707,用於向代理節點發送路由表更新通知。參照圖8,示出了本發明ー種代理節點實施例,作為本發明方案中的關鍵部件,其可以包括查詢轉發模塊801,用於響應客戶端發出的包括目標KEY的請求,通過查詢全局路由表信息,將客戶端請求轉發給相應的存儲節點;數據轉發模塊802,用於將相應存儲節點返回的包括目標Value的回應包傳送給客戶端。在優選實現中,代理節點還可以包括路由表同步模塊803,用於將伺服器上的全局路由表信息同步至本地;其中,所述查詢轉發模塊基於本地的全局路由表信息進行查詢。在優選實現中,代理節點還可以包括路由表更新模塊804,用於當收到路由表更新通知時,獲取新的全局路由表信息。當然,在具體實現中,也可以直接將路由表更新模塊 804的功能集成到路由表同步模塊803中。在本發明的一個優選實現方案中,所述查詢轉發模塊801具體可以包括
哈希子模塊8011,用於基於所接收的包括目標KEY的客戶端請求,通過哈希算法計算目標KEY所在的數據區塊;定位子模塊8012,用於依據計算得到的目標KEY所在的數據區塊標識,查詢所述全局路由表信息,定位相應的存儲節點;轉發子模塊8013,用於將客戶端請求轉發至相應存儲節點。本說明書中的各個實施例均採用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。對於裝置實施例而言,由於其與方法實施例基本相似,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。以上對本申請所提供的ー種分布式鍵-值查詢引擎系統、分布式鍵-值查詢方法、 代理節點、元數據伺服器、増加物理存儲節點的方法和ー種故障轉移方法進行了詳細介紹, 本文中應用了具體個例對本申請的原理及實施方式進行了闡述,以上實施例的說明只是用於幫助理解本申請的方法及其核心思想;同時,對於本領域的一般技術人員,依據本申請的思想,在具體實施方式
及應用範圍上均會有改變之處,綜上所述,本說明書內容不應理解為對本申請的限制。
權利要求
1.ー種分布式鍵-值查詢引擎系統,其特徵在幹,包括 元數據伺服器,用於維護指向存儲節點的全局路由表信息; 至少ー個代理節點,包括查詢轉發模塊,用於響應客戶端發出的包括目標KEY的請求,基於所述全局路由表信息,將客戶端請求轉發給相應的存儲節點;數據轉發模塊,用於將相應存儲節點返回的包括目標Value的回應包傳送給客戶端; 至少ー個存儲節點,用於基於接收到的客戶端請求,從本地存儲中獲取所需數據,並發送包括目標Value的回應包給代理節點。
2.根據權利要求1所述的系統,其特徵在幹,所述代理節點還包括 路由表同步模塊,用於將元數據伺服器的全局路由表信息同步至本地; 其中,所述查詢轉發模塊基於本地的全局路由表信息進行查詢。
3.根據權利要求2所述的系統,其特徵在幹,所述代理節點還包括路由表更新模塊,用於當收到元數據伺服器的路由表更新通知時,從元數據伺服器獲取新的全局路由表信息。
4.根據權利要求1所述的系統,其特徵在幹,所述查詢轉發模塊具體包括哈希子模塊,用於基於所接收的包括目標KEY的客戶端請求,通過哈希算法計算目標 KEY所在的數據區塊;定位子模塊,用於依據計算得到的目標KEY所在的數據區塊的標識,查詢所述全局路由表信息,定位相應的存儲節點;轉發子模塊,用於將客戶端請求轉發至相應存儲節點。
5.根據權利要求1所述的系統,其特徵在幹,所述元數據伺服器還包括數據同步模塊,用於通知所述新增的存儲節點從所選定的存儲節點中同步N個數據區塊;所述N由所述新增存儲節點的屬性參數計算得到;路由表變更模塊,用於當所述新增的存儲節點完成數據同步後,生成新的全局路由表信息。第一更新通知模塊,用於向代理節點發送路由表更新通知。
6.根據權利要求2或5所述的系統,其特徵在幹,所述元數據伺服器還包括 監控模塊,用於監控各存儲節點的存活狀態,當監測到一個存儲節點失效時,修改全局路由表信息;所述修改包括針對以該失效的存儲節點作為主節點的數據區塊,將其主節點重新映射到另ー個冗餘節點上;第二更新通知模塊,用於向代理節點發送路由表更新通知。
7.根據權利要求1所述的系統,其特徵在幹,所述至少ー個存儲節點包括用於存儲熱點數據的高速存儲節點,和用於存儲非熱點數據的其他類型存儲節點; 其中,所述高速存儲節點包括內存節點或者固態硬碟節點,所述其他類型存儲節點包括SAS/SATA硬碟節點。
8.ー種分布式鍵-值查詢方法,其特徵在幹,包括接收客戶端指向當前代理節點的包括目標KEY的請求; 當前代理節點通過查詢全局路由表信息,將客戶端請求轉發給相應的存儲節點; 當前代理節點將相應存儲節點返回的包括目標Value的回應包傳送給客戶端。
9.如權利要求8所述的方法,其特徵在於,還包括當前代理節點通過異步線程將維護在伺服器上的全局路由表信息同步至本地,在本地進行對全局路由表信息的查詢。
10.如權利要求8所述的方法,其特徵在於,還包括 當收到路由表更新通知時,獲取新的全局路由表信息。
11.如權利要求8所述的方法,其特徵在幹,所述當前代理節點通過查詢全局路由表信息,將客戶端請求轉發給相應的存儲節點的過程具體包括基於所接收的包括目標KEY的客戶端請求,通過哈希算法計算目標KEY所在的數據區塊;依據計算得到的目標KEY所在的數據區塊標識,查詢所述全局路由表信息,定位相應的存儲節點;將客戶端請求轉發給相應的存儲節點。
12.—種分布式鍵-值(Key-Value)查詢引擎系統的故障轉移方法,其特徵在幹,包括監測各存儲節點是否存活;其中,同一個數據區塊存儲在一個存儲主節點和至少ー個存儲冗餘節點上;當監測到一個存儲節點失效時,修改全局路由表信息;所述修改包括針對以該失效的存儲節點作為主節點的數據區塊,將其主節點重新映射到另ー個冗餘節點上;將新的全局路由表信息更新至各代理節點;所述代理節點用於響應客戶端發出的包括目標KEY的請求,基於所述全局路由表信息,將客戶端請求轉發給相應的存儲節點;以及將相應存儲節點返回的包括目標Value的回應包傳送給客戶端。
13.—種分布式鍵-值(Key-Value)查詢引擎系統的増加物理存儲節點方法,其特徵在幹,包括接收新增存儲節點的註冊請求;依據新增存儲節點的屬性參數,通知所述新增的存儲節點從所選定的存儲節點中同步 N個數據區塊;所述N由所述新增存儲節點的屬性參數計算得到;當所述新增的存儲節點完成數據同步後,生成新的全局路由表信息; 將新的全局路由表信息更新至代理節點;所述代理節點用於響應客戶端發出的包括目標KEY的請求,基於所述全局路由表信息,將客戶端請求轉發給相應的存儲節點;以及將相應存儲節點返回的包括目標Value的回應包傳送給客戶端。
14.如權利要求13所述的方法,其特徵在幹,在接收新增存儲節點的註冊請求之後,還包括如果所述新增存儲節點為合法工作節點,則進入下一歩,否則,拒絕所述新增存儲節點的加入。
15.如權利要求13所述的方法,在將新的全局路由表信息更新至代理節點之後,還包括在所選定的存儲節點的空閒時間,逐步刪除其所存儲的已同步到所述新增存儲節點的所述N個數據區塊。
16.一種元數據伺服器,其特徵在幹,包括存儲模塊,用於存儲反映目標KEY和存儲節點映射關係的全局路由表信息; 全局路由表信息同步模塊,用於將所述全局路由表信息同步到至少ー個代理節點;所述代理節點用於響應客戶端發出的包括目標KEY的請求,基於所述全局路由表信息,將客戶端請求轉發給相應的存儲節點;以及將相應存儲節點返回的包括目標Value的回應包傳送給客戶端。
17.根據權利要求16所述的元數據伺服器,其特徵在於,還包括數據同步模塊,用於依據新增存儲節點的屬性參數,通知所述新增的存儲節點從所選定的存儲節點中同步N個數據區塊;所述N由所述新增存儲節點的屬性參數計算得到; 路由表變更模塊,用於當所述新增的存儲節點完成數據同步後,生成新的全局路由表イロ『 >E、;第一更新通知模塊,用於向代理節點發送路由表更新通知。
18.根據權利要求16或17所述的元數據伺服器,其特徵在於,還包括監控模塊,用於監控各存儲節點的存活狀態,當監測到一個存儲節點失效時,修改全局路由表信息;所述修改包括針對以該失效的存儲節點作為主節點的數據區塊,將其主節點重新映射到另ー個冗餘節點上;第二更新通知模塊,用於向代理節點發送路由表更新通知。
19.ー種代理節點,其特徵在幹,包括查詢轉發模塊,用於響應客戶端發出的包括目標KEY的請求,通過查詢全局路由表信息,將客戶端請求轉發給相應的存儲節點;數據轉發模塊,用於將相應存儲節點返回的包括目標Value的回應包傳送給客戶端。
20.根據權利要求19所述的代理節點,其特徵在於,還包括 路由表同步模塊,用於將伺服器上的全局路由表信息同步至本地; 其中,所述查詢轉發模塊基於本地的全局路由表信息進行查詢。
21.根據權利要求20所述的代理節點,其特徵在於,還包括路由表更新模塊,用於當收到路由表更新通知時,獲取新的全局路由表信息。
22.根據權利要求19所述的代理節點,其特徵在幹,所述查詢轉發模塊具體包括 哈希子模塊,用於基於所接收的包括目標KEY的客戶端請求,通過哈希算法計算目標KEY所在的數據區塊;定位子模塊,用於依據計算得到的目標KEY所在的數據區塊標識,查詢所述全局路由表信息,定位相應的存儲節點;轉發子模塊,用於將客戶端請求轉發至相應存儲節點。
全文摘要
本申請提供了一種分布式鍵-值查詢引擎系統和查詢方法,該系統包括元數據伺服器、至少一個代理節點和至少一個存儲節點;其中,所述元數據伺服器,用於維護指向存儲節點的全局路由表信息;所述代理節點包括查詢轉發模塊,用於響應客戶端發出的包括目標KEY的請求,基於所述全局路由表信息,將客戶端請求轉發給相應的存儲節點;數據轉發模塊,用於將相應存儲節點返回的包括目標Value的回應包傳送給客戶端;所述存儲節點,用於基於接收到的客戶端請求,從本地存儲中獲取所需數據,並發送包括目標Value的回應包給代理節點。本發明能夠實現鍵-值數據的分布式存儲和查詢,並且能夠容納海量鍵-值數據,對高並發訪問的適應性更強。
文檔編號G06F17/30GK102591970SQ20111046049
公開日2012年7月18日 申請日期2011年12月31日 優先權日2011年12月31日
發明者楊康, 謝冉 申請人:北京奇虎科技有限公司