欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

分布式查詢引擎系統(tǒng)和方法及元數(shù)據(jù)服務器的制造方法

文檔序號:6549150閱讀:162來源:國知局
分布式查詢引擎系統(tǒng)和方法及元數(shù)據(jù)服務器的制造方法
【專利摘要】本申請?zhí)峁┝艘环N分布式鍵-值查詢引擎系統(tǒng)和查詢方法,該系統(tǒng)包括:元數(shù)據(jù)服務器、至少一個代理節(jié)點和至少一個存儲節(jié)點;其中,所述元數(shù)據(jù)服務器,用于維護指向存儲節(jié)點的全局路由表信息;所述代理節(jié)點包括:查詢轉(zhuǎn)發(fā)模塊,用于響應客戶端發(fā)出的包括目標KEY的請求,基于所述全局路由表信息,將客戶端請求轉(zhuǎn)發(fā)給相應的存儲節(jié)點;數(shù)據(jù)轉(zhuǎn)發(fā)模塊,用于將相應存儲節(jié)點返回的包括目標Value的回應包傳送給客戶端;所述存儲節(jié)點,用于基于接收到的客戶端請求,從本地存儲中獲取所需數(shù)據(jù),并發(fā)送包括目標Value的回應包給代理節(jié)點。本發(fā)明能夠?qū)崿F(xiàn)鍵-值數(shù)據(jù)的分布式存儲和查詢,并且能夠容納海量鍵-值數(shù)據(jù),對高并發(fā)訪問的適應性更強。
【專利說明】分布式查詢引擎系統(tǒng)和方法及元數(shù)據(jù)服務器
[0001]本發(fā)明專利申請是申請日為2011年12月31日、申請?zhí)枮?01110460494.8、名稱為“一種分布式鍵-值查詢方法和查詢引擎系統(tǒng)”的中國發(fā)明專利申請的分案申請。

【技術(shù)領(lǐng)域】
[0002]本申請涉及分布式數(shù)據(jù)存儲和查詢【技術(shù)領(lǐng)域】,特別是涉及一種分布式鍵-值查詢方法和查詢引擎系統(tǒng)。

【背景技術(shù)】
[0003]對于大規(guī)模互聯(lián)網(wǎng)應用、云計算的支撐而言,一般會使用關(guān)系型數(shù)據(jù)庫存儲相關(guān)數(shù)據(jù)。
[0004]傳統(tǒng)的關(guān)系型數(shù)據(jù)庫,通常將某一個應用的某一類信息(例如網(wǎng)站用戶信息)都存儲在數(shù)據(jù)庫系統(tǒng)的單個庫單張表中,對應用程序提供讀取和寫入操作的通訊接口。實現(xiàn)上,典型的關(guān)系型數(shù)據(jù)庫如MySQL,單表的查詢和寫入操作有一定上限,超過這個上限,SQL查詢和寫入操作將會變得非常緩慢,磁盤輸入/輸出(1)模塊也會出現(xiàn)瓶頸。在互聯(lián)網(wǎng)海量數(shù)據(jù)的今天,傳統(tǒng)關(guān)系型數(shù)據(jù)庫要承載海量數(shù)據(jù),通常的做法就是將數(shù)據(jù)分成多個庫多個表存儲,例如網(wǎng)站用戶信息數(shù)據(jù),可以按取模算法對用戶標識(uSer_id)字段計算哈希(hash)值,將不同的用戶數(shù)據(jù)分片到不同數(shù)據(jù)庫,以此來解決單庫單表的存儲和讀寫壓力問題。
[0005]也就是說,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫,為支持大容量數(shù)據(jù),需要將數(shù)據(jù)水平拆分到多個庫多張表上,確保單張表的記錄數(shù)是有限的。這樣的好處在于減小了索引文件的大小,從而提升查詢性能。
[0006]但是,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫,傾向于使用單臺機器來解決存儲容量的問題。若要擴容到多臺機器,需要在應用層做數(shù)據(jù)拆分策略。這里存在兩個問題,一個是對于每個應用,都需要應用層做數(shù)據(jù)拆分,且每個應用拆分策略都會有不同,效率低;另一個問題是增加機器后的數(shù)據(jù)重新拆分代價很高,需要人工停機維護操作,不支持自動彈性擴展。
[0007]其次,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫,單臺機器的并發(fā)能力有一定上限,高并發(fā)的訪問會將機器資源耗盡。不能支持高并發(fā)訪問的原因之一是關(guān)系型數(shù)據(jù)庫在檢索時需要做SQL解析操作,對CPU資源的開銷大。
[0008]總之,目前需要本領(lǐng)域技術(shù)人員迫切解決的一個技術(shù)問題是:如何能夠提供一種能夠容納海量數(shù)據(jù)、適應高并發(fā)訪問的更加優(yōu)化的存儲/查詢方案。


【發(fā)明內(nèi)容】

[0009]本申請所要解決的技術(shù)問題是提供一種分布式鍵-值查詢方法和查詢引擎系統(tǒng),能夠容納海量鍵-值數(shù)據(jù),對高并發(fā)訪問的適應性更強。
[0010]為了解決上述問題,本申請公開了一種分布式鍵-值查詢引擎系統(tǒng),具體可以包括:
[0011]元數(shù)據(jù)服務器,用于維護指向存儲節(jié)點的全局路由表信息;
[0012]至少一個代理節(jié)點,包括:
[0013]查詢轉(zhuǎn)發(fā)模塊,用于響應客戶端發(fā)出的包括目標KEY的請求,基于所述全局路由表信息,將客戶端請求轉(zhuǎn)發(fā)給相應的存儲節(jié)點;
[0014]數(shù)據(jù)轉(zhuǎn)發(fā)模塊,用于將相應存儲節(jié)點返回的包括目標Value的回應包傳送給客戶端;
[0015]至少一個存儲節(jié)點,用于基于接收到的客戶端請求,從本地存儲中獲取所需數(shù)據(jù),并發(fā)送包括目標Value的回應包給代理節(jié)點。
[0016]優(yōu)選的,所述代理節(jié)點還可以包括:路由表同步模塊,用于將元數(shù)據(jù)服務器的全局路由表信息同步至本地;其中,所述查詢轉(zhuǎn)發(fā)模塊基于本地的全局路由表信息進行查詢。
[0017]優(yōu)選的,所述代理節(jié)點還可以包括:路由表更新模塊,用于當收到元數(shù)據(jù)服務器的路由表更新通知時,從元數(shù)據(jù)服務器獲取新的全局路由表信息。
[0018]優(yōu)選的,所述查詢轉(zhuǎn)發(fā)模塊具體包括:哈希子模塊,用于基于所接收的包括目標KEY的客戶端請求,通過哈希算法計算目標KEY所在的數(shù)據(jù)區(qū)塊;定位子模塊,用于依據(jù)計算得到的目標KEY所在的數(shù)據(jù)區(qū)塊的標識,查詢所述全局路由表信息,定位相應的存儲節(jié)點;轉(zhuǎn)發(fā)子模塊,用于將客戶端請求轉(zhuǎn)發(fā)至相應存儲節(jié)點。
[0019]優(yōu)選的,所述元數(shù)據(jù)服務器還可以包括:數(shù)據(jù)同步模塊,用于通知所述新增的存儲節(jié)點從所選定的存儲節(jié)點中同步N個數(shù)據(jù)區(qū)塊;所述N由所述新增存儲節(jié)點的屬性參數(shù)計算得到;路由表變更模塊,用于當所述新增的存儲節(jié)點完成數(shù)據(jù)同步后,生成新的全局路由表信息;第一更新通知模塊,用于向代理節(jié)點發(fā)送路由表更新通知。
[0020]優(yōu)選的,所述元數(shù)據(jù)服務器還可以包括:監(jiān)控模塊,用于監(jiān)控各存儲節(jié)點的存活狀態(tài),當監(jiān)測到一個存儲節(jié)點失效時,修改全局路由表信息;所述修改包括:針對以該失效的存儲節(jié)點作為主節(jié)點的數(shù)據(jù)區(qū)塊,將其主節(jié)點重新映射到另一個冗余節(jié)點上;第二更新通知模塊,用于向代理節(jié)點發(fā)送路由表更新通知。
[0021]優(yōu)選的,所述存儲節(jié)點可以包括:用于存儲熱點數(shù)據(jù)的高速存儲節(jié)點,和用于存儲非熱點數(shù)據(jù)的其他類型存儲節(jié)點;其中,所述高速存儲節(jié)點包括內(nèi)存節(jié)點或者固態(tài)硬盤節(jié)點,所述其他類型存儲節(jié)點包括SAS/SATA硬盤節(jié)點。
[0022]依據(jù)本發(fā)明的另一實施例,還公開了一種分布式鍵-值查詢方法,具體可以包括:接收客戶端指向當前代理節(jié)點的包括目標KEY的請求;當前代理節(jié)點通過查詢?nèi)致酚杀硇畔?,將客戶端請求轉(zhuǎn)發(fā)給相應的存儲節(jié)點;當前代理節(jié)點將相應存儲節(jié)點返回的包括目標Value的回應包傳送給客戶端。
[0023]優(yōu)選的,所述分布式鍵-值查詢方法還可以包括:當前代理節(jié)點通過異步線程將維護在服務器上的全局路由表信息同步至本地,在本地進行對全局路由表信息的查詢。
[0024]優(yōu)選的,所述分布式鍵-值查詢方法還可以包括:當收到路由表更新通知時,獲取新的全局路由表信息。
[0025]優(yōu)選的,所述當前代理節(jié)點通過查詢?nèi)致酚杀硇畔?,將客戶端請求轉(zhuǎn)發(fā)給相應的存儲節(jié)點的過程具體包括:基于所接收的包括目標KEY的客戶端請求,通過哈希算法計算目標KEY所在的數(shù)據(jù)區(qū)塊;依據(jù)計算得到的目標KEY所在的數(shù)據(jù)區(qū)塊標識,查詢所述全局路由表信息,定位相應的存儲節(jié)點;將客戶端請求轉(zhuǎn)發(fā)給相應的存儲節(jié)點。
[0026]依據(jù)本發(fā)明的另一實施例,還公開了一種分布式鍵-值(Key-Value)查詢引擎系統(tǒng)的故障轉(zhuǎn)移方法,包括:監(jiān)測各存儲節(jié)點是否存活;其中,同一個數(shù)據(jù)區(qū)塊存儲在一個存儲主節(jié)點和至少一個存儲冗余節(jié)點上;當監(jiān)測到一個存儲節(jié)點失效時,修改全局路由表信息;所述修改包括:針對以該失效的存儲節(jié)點作為主節(jié)點的數(shù)據(jù)區(qū)塊,將其主節(jié)點重新映射到另一個冗余節(jié)點上;將新的全局路由表信息更新至各代理節(jié)點;所述代理節(jié)點用于響應客戶端發(fā)出的包括目標KEY的請求,基于所述全局路由表信息,將客戶端請求轉(zhuǎn)發(fā)給相應的存儲節(jié)點;以及將相應存儲節(jié)點返回的包括目標Value的回應包傳送給客戶端。
[0027]依據(jù)本發(fā)明的另一實施例,還公開了一種分布式鍵-值(Key-Value)查詢引擎系統(tǒng)的增加物理存儲節(jié)點方法,包括:接收新增存儲節(jié)點的注冊請求;依據(jù)新增存儲節(jié)點的屬性參數(shù),通知所述新增的存儲節(jié)點從所選定的存儲節(jié)點中同步N個數(shù)據(jù)區(qū)塊;所述N由所述新增存儲節(jié)點的屬性參數(shù)計算得到;當所述新增的存儲節(jié)點完成數(shù)據(jù)同步后,生成新的全局路由表信息;將新的全局路由表信息更新至代理節(jié)點;所述代理節(jié)點用于響應客戶端發(fā)出的包括目標KEY的請求,基于所述全局路由表信息,將客戶端請求轉(zhuǎn)發(fā)給相應的存儲節(jié)點;以及將相應存儲節(jié)點返回的包括目標Value的回應包傳送給客戶端。
[0028]優(yōu)選的,該方法,在接收新增存儲節(jié)點的注冊請求之后,還包括:如果所述新增存儲節(jié)點為合法工作節(jié)點,則進入下一步,否則,拒絕所述新增存儲節(jié)點的加入。
[0029]優(yōu)選的,該方法,在將新的全局路由表信息更新至代理節(jié)點之后,還包括:在所選定的存儲節(jié)點的空閑時間,逐步刪除其所存儲的已同步到所述新增存儲節(jié)點的所述N個數(shù)據(jù)區(qū)塊。
[0030]依據(jù)本發(fā)明的另一實施例,還公開了一種元數(shù)據(jù)服務器,包括:
[0031]存儲模塊,用于存儲反映目標KEY和存儲節(jié)點映射關(guān)系的全局路由表信息;
[0032]全局路由表信息同步模塊,用于將所述全局路由表信息同步到至少一個代理節(jié)點;所述代理節(jié)點用于響應客戶端發(fā)出的包括目標KEY的請求,基于所述全局路由表信息,將客戶端請求轉(zhuǎn)發(fā)給相應的存儲節(jié)點;以及將相應存儲節(jié)點返回的包括目標Value的回應包傳送給客戶端。
[0033]優(yōu)選的,元數(shù)據(jù)服務器還可以包括:數(shù)據(jù)同步模塊,用于依據(jù)新增存儲節(jié)點的屬性參數(shù),通知所述新增的存儲節(jié)點從所選定的存儲節(jié)點中同步N個數(shù)據(jù)區(qū)塊;所述N由所述新增存儲節(jié)點的屬性參數(shù)計算得到;路由表變更模塊,用于當所述新增的存儲節(jié)點完成數(shù)據(jù)同步后,生成新的全局路由表信息;第一更新通知模塊,用于向代理節(jié)點發(fā)送路由表更新通知。
[0034]優(yōu)選的,元數(shù)據(jù)服務器還可以包括:監(jiān)控模塊,用于監(jiān)控各存儲節(jié)點的存活狀態(tài),當監(jiān)測到一個存儲節(jié)點失效時,修改全局路由表信息;所述修改包括:針對以該失效的存儲節(jié)點作為主節(jié)點的數(shù)據(jù)區(qū)塊,將其主節(jié)點重新映射到另一個冗余節(jié)點上;第二更新通知模塊,用于向代理節(jié)點發(fā)送路由表更新通知。
[0035]依據(jù)本發(fā)明的另一實施例,還公開了一種代理節(jié)點,可以包括:
[0036]查詢轉(zhuǎn)發(fā)模塊,用于響應客戶端發(fā)出的包括目標KEY的請求,通過查詢?nèi)致酚杀硇畔?,將客戶端請求轉(zhuǎn)發(fā)給相應的存儲節(jié)點;
[0037]數(shù)據(jù)轉(zhuǎn)發(fā)模塊,用于將相應存儲節(jié)點返回的包括目標Value的回應包傳送給客戶端。
[0038]優(yōu)選的,所述的代理節(jié)點還可以包括:路由表同步模塊,用于將服務器上的全局路由表信息同步至本地;其中,所述查詢轉(zhuǎn)發(fā)模塊基于本地的全局路由表信息進行查詢。
[0039]優(yōu)選的,所述的代理節(jié)點還可以包括:路由表更新模塊,用于當收到路由表更新通知時,獲取新的全局路由表息。
[0040]優(yōu)選的,所述查詢轉(zhuǎn)發(fā)模塊具體包括:
[0041]哈希子模塊,用于基于所接收的包括目標KEY的客戶端請求,通過哈希算法計算目標KEY所在的數(shù)據(jù)區(qū)塊;
[0042]定位子模塊,用于依據(jù)計算得到的目標KEY所在的數(shù)據(jù)區(qū)塊標識,查詢所述全局路由表信息,定位相應的存儲節(jié)點;
[0043]轉(zhuǎn)發(fā)子模塊,用于將客戶端請求轉(zhuǎn)發(fā)至相應存儲節(jié)點。
[0044]與現(xiàn)有技術(shù)相比,本申請具有以下優(yōu)點:
[0045]本發(fā)明提出了一種新的分布式鍵-值查詢引擎架構(gòu),采用該架構(gòu)的查詢引擎系統(tǒng)和查詢方法,能夠?qū)崿F(xiàn)鍵-值數(shù)據(jù)的分布式存儲和查詢,并且能夠容納海量鍵-值數(shù)據(jù),對高并發(fā)訪問的適應性更強。
[0046]其中,由于本發(fā)明采用了全局路由表信息,客戶端的數(shù)據(jù)請求可以通過查詢?nèi)致酚杀磉M而找到相應的存儲物理節(jié)點,然后獲取所需數(shù)據(jù)即可。因此,當需要增加物理存儲節(jié)點時,只需要將該物理存儲節(jié)點增加的信息更新至全局路由表即可,可以實現(xiàn)平滑增加或者減少物理存儲節(jié)點的個數(shù),無須停止服務。相比較而言,現(xiàn)有技術(shù)針對存儲節(jié)點并沒有全局路由表,而是在應用層做數(shù)據(jù)拆分策略,增加存儲節(jié)點后的數(shù)據(jù)重新拆分代價很高,需要人工停機維護操作,不支持自動彈性擴展。
[0047]另外,由于本發(fā)明將存儲和查詢架構(gòu)優(yōu)化為分布式鍵-值(Key-Value)結(jié)構(gòu),可以避免采用SQL數(shù)據(jù)庫的復雜查詢方式,提高查詢速度,故而大大提高了并發(fā)訪問的強度,尤其適用于確定某個應用程序或者某個網(wǎng)址是否有害的信息存儲和查詢;例如,尤其適用于木馬云查殺、網(wǎng)址云查殺以及云安全中心數(shù)據(jù)索引等場合。再者,由于本發(fā)明并不是直接由元數(shù)據(jù)服務器來對全局路由表進行處理,而是由代理節(jié)點接收用戶請求,并對同步至代理節(jié)點本地的全局路由表進行查詢處理,這樣,就可以將高并發(fā)的用戶請求分散到多個代理節(jié)點上,由其同時進行查詢處理,從而也大大提高了高并發(fā)訪問的處理能力。

【專利附圖】

【附圖說明】
[0048]圖1是本發(fā)明一種分布式鍵-值查詢引擎系統(tǒng)實施例的模塊示意圖;
[0049]圖2是本發(fā)明一種分布式鍵-值查詢方法實施例的步驟流程圖;
[0050]圖3是本發(fā)明一種故障轉(zhuǎn)移方法的步驟流程圖;
[0051]圖4是本發(fā)明一種增加物理存儲節(jié)點的方法的步驟流程圖;
[0052]圖5是本發(fā)明一種優(yōu)選的分布式KEY-VALUE查詢引擎系統(tǒng)的結(jié)構(gòu)示意圖;
[0053]圖6是一種KEY和VBucket之間,VBucket和物理存儲節(jié)點之間的映射關(guān)系示意圖;
[0054]圖7是本發(fā)明一種元數(shù)據(jù)服務器實施例的模塊示意圖;
[0055]圖8是本發(fā)明一種代理節(jié)點實施例的模塊示意圖。

【具體實施方式】
[0056]為使本申請的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附圖和【具體實施方式】對本申請作進一步詳細的說明。
[0057]參照圖1,示出了本發(fā)明一種分布式鍵-值查詢引擎系統(tǒng)實施例,具體可以包括:
[0058]元數(shù)據(jù)服務器101,用于維護指向存儲節(jié)點的全局路由表信息;所述維護可以包括存儲以及相應的修改更新等;
[0059]至少一個代理節(jié)點102,在圖1中示出了 X個代理節(jié)點,每個代理節(jié)點可以包括:
[0060]查詢轉(zhuǎn)發(fā)模塊,用于響應客戶端發(fā)出的包括目標KEY的請求,基于所述全局路由表信息,將客戶端請求轉(zhuǎn)發(fā)給相應的存儲節(jié)點;
[0061]數(shù)據(jù)轉(zhuǎn)發(fā)模塊,用于將相應存儲節(jié)點返回的包括目標Value的回應包傳送給客戶端;
[0062]至少一個存儲節(jié)點103,用于基于接收到的客戶端請求,從本地存儲中獲取所需數(shù)據(jù),并發(fā)送包括目標Value的回應包給代理節(jié)點。在圖1中示出了 Y個存儲節(jié)點。
[0063]采用上面的查詢引擎系統(tǒng),能夠容納更加海量的鍵-值數(shù)據(jù),對高并發(fā)訪問的適應性更強。其中,元數(shù)據(jù)服務器101中的全局路由表信息存儲有目標KEY—存儲節(jié)點的映射關(guān)系。當然,該映射關(guān)系可以是直接映射,也可以是間接映射,在本發(fā)明的后面實施例描述中,會給出一個間接映射的優(yōu)選實現(xiàn)。
[0064]在本發(fā)明的一個優(yōu)先實施方式中,所述代理節(jié)點102還可以包括:路由表同步模塊,用于將元數(shù)據(jù)服務器的全局路由表信息同步至本地;其中,所述查詢轉(zhuǎn)發(fā)模塊基于本地的全局路由表信息進行查詢。這樣,可以避免每次查詢代理節(jié)點都到元數(shù)據(jù)服務器去請求查詢。同時,由于代理節(jié)點可以設置多個,從而可以實現(xiàn)路由查詢的并發(fā)執(zhí)行,提高對高并發(fā)訪問的適應性。當然,具體同步的時間不需要加以限定,例如,在代理節(jié)點開機時同步即可;同時,也可以在固定時刻進行同步,以防止沒有收到更新通知的情況。
[0065]在本發(fā)明的一個優(yōu)先實施方式中,所述代理節(jié)點102還可以包括:路由表更新模塊,用于當收到元數(shù)據(jù)服務器的路由表更新通知時,從元數(shù)據(jù)服務器獲取新的全局路由表信息。當出現(xiàn)某個存儲節(jié)點故障或者新增存儲節(jié)點時,元數(shù)據(jù)服務器上維護的全局路由表信息都會發(fā)生變化,因而,此時可以通過路由表更新模塊更新全局路由表信息。
[0066]需要說明的是,存儲節(jié)點可以采用各種存儲介質(zhì)。例如要求低延遲高并發(fā)的內(nèi)存哈希表存儲引擎,或者容量較高但響應延遲尚可、并發(fā)能力一般的固態(tài)硬盤(SSD,SolidState Disk)存儲引擎,或者大容量、但響應延遲高、并發(fā)能力差的SAS (Serial attachedSCSI)/SATA(Serial Advanced Technology Attachment)存儲引擎。本發(fā)明的存儲節(jié)點作為“引擎”而言,可以具有接受請求和返回數(shù)據(jù)的執(zhí)行能力,當然,還可以具有新增、查找、更新、刪除(CRUD)數(shù)據(jù)等的執(zhí)行能力。
[0067]在本發(fā)明的一個優(yōu)選實現(xiàn)中,建議采用多級混合存儲引擎。具體的,所述至少一個存儲節(jié)點包括:用于存儲熱點數(shù)據(jù)的高速存儲節(jié)點,和用于存儲非熱點數(shù)據(jù)的其他類型存儲節(jié)點;其中,所述高速存儲節(jié)點包括內(nèi)存節(jié)點或者固態(tài)硬盤節(jié)點,所述其他類型存儲節(jié)點包括SAS/SATA硬盤節(jié)點。即基于不同數(shù)據(jù)的情況,采用不同的存儲介質(zhì)來組成多級混合存儲引擎,以達到最優(yōu)效果。
[0068]下面本發(fā)明給出一種具體的針對客戶端請求查詢、定位和轉(zhuǎn)發(fā)的實現(xiàn)。其中,所述查詢轉(zhuǎn)發(fā)模塊具體可以包括:哈希子模塊,用于基于所接收的包括目標KEY的客戶端請求,通過哈希算法計算目標KEY所在的數(shù)據(jù)區(qū)塊;定位子模塊,用于依據(jù)計算得到的目標KEY所在的數(shù)據(jù)區(qū)塊的標識,查詢所述全局路由表信息,定位相應的存儲節(jié)點;轉(zhuǎn)發(fā)子模塊,用于將客戶端請求轉(zhuǎn)發(fā)至相應存儲節(jié)點。
[0069]與采用直接映射-查表的方式相比,固定哈希的方法可以有效減少路由表的大小,提高查詢效率。具體的,通常KEY的取值范圍很大,假設KEY的組成為128位MD5哈希值,如果使用直接映射-查表方法,路由表最多需要由2~128條“KEY-存儲節(jié)點”映射關(guān)系組成,這個是實現(xiàn)中是不現(xiàn)實的。采用哈希算法計算數(shù)據(jù)區(qū)塊,再通過數(shù)據(jù)區(qū)塊定位存儲節(jié)點這種間接映射的方法,可以有效減少路由表的大小。
[0070]在某些情況下,存儲節(jié)點可能需要增加。則為了在該情形下更好的管理路由,所述元數(shù)據(jù)服務器還可以包括:數(shù)據(jù)同步模塊,用于通知所述新增的存儲節(jié)點從所選定的存儲節(jié)點中同步N個數(shù)據(jù)區(qū)塊;所述N由所述新增存儲節(jié)點的屬性參數(shù)計算得到;路由表變更模塊,用于當所述新增的存儲節(jié)點完成數(shù)據(jù)同步后,生成新的全局路由表信息;第一更新通知模塊,用于向代理節(jié)點發(fā)送路由表更新通知。
[0071]在實際應用中,也可能出現(xiàn)某個存儲節(jié)點出現(xiàn)故障失效的情況,則為了及時應對這種情況,所述元數(shù)據(jù)服務器還包括:監(jiān)控模塊,用于監(jiān)控各存儲節(jié)點的存活狀態(tài),當監(jiān)測到一個存儲節(jié)點失效時,修改全局路由表信息;所述修改包括:針對以該失效的存儲節(jié)點作為主節(jié)點的數(shù)據(jù)區(qū)塊,將其主節(jié)點重新映射到另一個冗余節(jié)點上;第二更新通知模塊,用于向代理節(jié)點發(fā)送路由表更新通知。
[0072]參照圖2,示出了本發(fā)明一種分布式鍵-值查詢方法實施例,具體可以包括:
[0073]步驟201、接收客戶端指向當前代理節(jié)點的包括目標KEY的請求;
[0074]步驟202、當前代理節(jié)點通過查詢?nèi)致酚杀硇畔?,將客戶端請求轉(zhuǎn)發(fā)給相應的存儲節(jié)點;
[0075]步驟203、當前代理節(jié)點將相應存儲節(jié)點返回的包括目標Value的回應包傳送給客戶端。
[0076]在該方法中,全局路由表信息可以存儲在其他的服務器上,也可以直接存儲在代理節(jié)點上,例如,針對數(shù)據(jù)量不是特別海量的情況,采用少量甚至一個代理節(jié)點的情況,直接由代理節(jié)點來維護全局路由表信息也是可行的;在各個代理節(jié)點之間進行同步維護即可。
[0077]當然,優(yōu)選的,為了提高代理節(jié)點處理并發(fā)訪問的能力,還是采用在另外的服務器上單獨維護全局路由表信息為佳。此時,當前代理節(jié)點可以通過異步線程將維護在服務器上的全局路由表信息同步至本地,在本地進行對全局路由表信息的查詢。
[0078]優(yōu)選的,在存儲節(jié)點自身或者所存儲位置變更時,上面的方法實施例還可以包括:當收到路由表更新通知時,獲取新的全局路由表信息。
[0079]在本發(fā)明的一個優(yōu)選實現(xiàn)中,全局路由表信息并非直接存儲目標KEY —存儲節(jié)點的直接映射關(guān)系,而是存儲了一個間接映射關(guān)系“目標KEY所在的數(shù)據(jù)區(qū)塊一存儲節(jié)點”的,但是可以直接由目標KEY計算得到其所在的數(shù)據(jù)區(qū)塊的標識,這樣可以更好的提高全局路由表的查詢速度。因為大多數(shù)情況下,標識查詢要比“目標KEY”的查詢要快的多。
[0080]在該實現(xiàn)方案中,所述當前代理節(jié)點通過查詢?nèi)致酚杀硇畔ⅲ瑢⒖蛻舳苏埱筠D(zhuǎn)發(fā)給相應的存儲節(jié)點的過程具體包括:基于所接收的包括目標KEY的客戶端請求,通過哈希算法計算目標KEY所在的數(shù)據(jù)區(qū)塊;依據(jù)計算得到的目標KEY所在的數(shù)據(jù)區(qū)塊標識,查詢所述全局路由表信息,定位相應的存儲節(jié)點;將客戶端請求轉(zhuǎn)發(fā)給相應的存儲節(jié)點。
[0081]相應的,參照圖3,本發(fā)明還提供了一種分布式鍵-值(Key-Value)查詢引擎系統(tǒng)的故障轉(zhuǎn)移方法,專用于解決存儲節(jié)點出現(xiàn)故障的情況,包括:
[0082]步驟301、監(jiān)測各存儲節(jié)點是否存活;其中,同一個數(shù)據(jù)區(qū)塊存儲在一個存儲主節(jié)點和至少一個存儲冗余節(jié)點上;
[0083]步驟302、當監(jiān)測到一個存儲節(jié)點失效時,修改全局路由表信息;所述修改包括:針對以該失效的存儲節(jié)點作為主節(jié)點的數(shù)據(jù)區(qū)塊,將其主節(jié)點重新映射到另一個冗余節(jié)點上;
[0084]步驟303、將新的全局路由表信息更新至各代理節(jié)點;所述代理節(jié)點用于響應客戶端發(fā)出的包括目標KEY的請求,基于所述全局路由表信息,將客戶端請求轉(zhuǎn)發(fā)給相應的存儲節(jié)點;以及將相應存儲節(jié)點返回的包括目標Value的回應包傳送給客戶端。
[0085]傳統(tǒng)的關(guān)系型數(shù)據(jù)庫,例如MySQL,若數(shù)據(jù)庫服務器出現(xiàn)故障,一般都需要數(shù)據(jù)庫管理人員將對數(shù)據(jù)庫的訪問請求切換到備份服務器上。而本發(fā)明可以實現(xiàn)故障的平滑轉(zhuǎn)移。
[0086]另外,參照圖4,本發(fā)明還提供一種分布式鍵-值(Key-Value)查詢引擎系統(tǒng)的增加物理存儲節(jié)點方法,可以包括:
[0087]步驟401、接收新增存儲節(jié)點的注冊請求;
[0088]步驟402、依據(jù)新增存儲節(jié)點的屬性參數(shù),通知所述新增的存儲節(jié)點從所選定的存儲節(jié)點中同步N個數(shù)據(jù)區(qū)塊;所述N由所述新增存儲節(jié)點的屬性參數(shù)計算得到;
[0089]步驟403、當所述新增的存儲節(jié)點完成數(shù)據(jù)同步后,生成新的全局路由表信息;
[0090]步驟404、將新的全局路由表信息更新至代理節(jié)點;所述代理節(jié)點用于響應客戶端發(fā)出的包括目標KEY的請求,基于所述全局路由表信息,將客戶端請求轉(zhuǎn)發(fā)給相應的存儲節(jié)點;以及將相應存儲節(jié)點返回的包括目標Value的回應包傳送給客戶端。
[0091]當然,為了保證對存儲節(jié)點的管理和控制,還可以增加對存儲節(jié)點的注冊審核。例如,在接收新增存儲節(jié)點的注冊請求之后,還包括:如果所述新增存儲節(jié)點為合法工作節(jié)點,則進入下一步,否則,拒絕所述新增存儲節(jié)點的加入。
[0092]需要說明的是,如果已經(jīng)將某些數(shù)據(jù)區(qū)塊轉(zhuǎn)移到新增的存儲節(jié)點上了,則原存儲節(jié)點上的這些數(shù)據(jù)區(qū)塊則可以作為其冗余備份存在,并更新在全局路由表信息中。當然,原存儲節(jié)點上的這些數(shù)據(jù)區(qū)塊在冗余備份數(shù)量足夠的情況下,也可以作為無效數(shù)據(jù)而刪除,降低原存儲節(jié)點的負荷。
[0093]例如,在將新的全局路由表信息更新至代理節(jié)點之后,還包括:在所選定的存儲節(jié)點的空閑時間,逐步刪除其所存儲的已同步到所述新增存儲節(jié)點的所述N個數(shù)據(jù)區(qū)塊。
[0094]總之,對于圖3和圖4所提供的故障轉(zhuǎn)移方法和增加物理存儲節(jié)點方法,可以幫助本發(fā)明在分布式鍵-值(Key-Value)查詢引擎系統(tǒng)中平滑增加或者減少機器個數(shù),無須停止服務。增減機器后,數(shù)據(jù)會自動在多臺機器之間重新達到平滑點(例如通過主節(jié)點和冗余節(jié)點的配置實現(xiàn)平滑)。
[0095]參照圖5,示出了本發(fā)明一種優(yōu)選的分布式KEY-VALUE查詢引擎系統(tǒng)的結(jié)構(gòu)示意圖。
[0096]其中,示出了多個并發(fā)請求的客戶端??蛻舳?Client)主要是用于發(fā)起請求。具體的,本發(fā)明可以支持多種語言的客戶端(C/C++/Python/PHP等)。
[0097]元數(shù)據(jù)服務器(Config Server):負責維護全局路由表信息,并監(jiān)控所有存儲節(jié)點的存活狀態(tài),在存儲節(jié)點失效和新增存儲節(jié)點時,元數(shù)據(jù)服務器起著關(guān)鍵的協(xié)調(diào)作用。
[0098]代理節(jié)點(Storage Proxy):負責響應客戶端的請求和請求的轉(zhuǎn)發(fā)。根據(jù)元數(shù)據(jù)服務器上的路由表信息,代理節(jié)點可以將客戶端的請求轉(zhuǎn)發(fā)給下游的存儲節(jié)點,并將存儲節(jié)點的回應包遞給客戶端。
[0099]存儲節(jié)點(Storage Node):負責數(shù)據(jù)的實際存儲,可以有多種存儲引擎供選擇,例如要求低延遲高并發(fā)的內(nèi)存哈希表存儲引擎,或者容量較高但響應延遲尚可、并發(fā)能力一般的固態(tài)硬盤(SSD)存儲引擎,或者大容量、但響應延遲高、并發(fā)能力差的SAS/SATA存儲引擎,或者定制化的多級混合存儲引擎。
[0100]在圖5中,在客戶端和存儲節(jié)點之間,包括Nginx/UDP服務器和代理節(jié)點,當然,Nginx/UDP服務器通常只是分布式通訊系統(tǒng)中所需要的一個傳輸設備而已,本領(lǐng)域技術(shù)人員也可以采用其他設備,甚至不采用。Nginx/UDP服務器和代理節(jié)點之間也不一定是一一對應的關(guān)系。
[0101]需要說明的是,在一個實體硬件中可能存在多個代理節(jié)點,本發(fā)明對此無需加以限制。并且在圖5中還示出了數(shù)據(jù)區(qū)塊冗余備份存儲的情況。
[0102]具體的,圖5給出了 4個存儲節(jié)點,其中,
[0103]存儲節(jié)點a是數(shù)據(jù)區(qū)塊_0的主節(jié)點,數(shù)據(jù)區(qū)塊_1的主節(jié)點,數(shù)據(jù)區(qū)塊_6的冗余節(jié)點,數(shù)據(jù)區(qū)塊_7的冗余節(jié)點;
[0104]存儲節(jié)點b是數(shù)據(jù)區(qū)塊_0的冗余節(jié)點,數(shù)據(jù)區(qū)塊_1的冗余節(jié)點,數(shù)據(jù)區(qū)塊_2的主節(jié)點,數(shù)據(jù)區(qū)塊_3的主節(jié)點;
[0105]存儲節(jié)點c是數(shù)據(jù)區(qū)塊_2的冗余節(jié)點,數(shù)據(jù)區(qū)塊_3的冗余節(jié)點,數(shù)據(jù)區(qū)塊_4的主節(jié)點,數(shù)據(jù)區(qū)塊_5的主節(jié)點;
[0106]存儲節(jié)點d是數(shù)據(jù)區(qū)塊_4的冗余節(jié)點,數(shù)據(jù)區(qū)塊_5的冗余節(jié)點,數(shù)據(jù)區(qū)塊_6的主節(jié)點,數(shù)據(jù)區(qū)塊_7的主節(jié)點;
[0107]這樣的存儲方式,包括保證在均勻分布的情況下,每個數(shù)據(jù)區(qū)塊都可以存儲在一個主節(jié)點上,也同時存儲在一個冗余節(jié)點上。
[0108]S卩,各個物理存儲節(jié)點都可以即做某幾個VBucket (Virtual Bucket ;數(shù)據(jù)邏輯分區(qū)區(qū)間,即數(shù)據(jù)區(qū)塊的一種)的主節(jié)點,又做另外幾個VBucket的冗余節(jié)點。存儲節(jié)點上有獨立線程,從主節(jié)點上同步所負責冗余VBucket的新增/修改數(shù)據(jù)。
[0109]在圖5中,元數(shù)據(jù)服務器還可以配置有一個備份的服務器。
[0110]下面針對圖5所示系統(tǒng),描述一個從客戶端發(fā)起請求到收到查詢引擎響應的完整流程的示例。
[0111]I)以GET請求為例,客戶端向代理節(jié)點(Storage Proxy)發(fā)起單個KEY的GET請求,也可以是批量KEY的GET請求。
[0112]2)代理節(jié)點收到上游客戶端的請求后,通過固定哈希算法(例如MD5)計算KEY所在的VBucket序號,即數(shù)據(jù)區(qū)塊區(qū)號。
[0113]3)代理節(jié)點通過KEY所屬的VBucket序號,查找全局路由表,定位物理存儲節(jié)點(Storage Node) 0實現(xiàn)上,查找全局路由表的過程不需要每次都請求元數(shù)據(jù)服務器(ConfigServer),而是代理節(jié)點通過一個異步線程將路由信息同步到本地。
[0114]4)代理服務器通過VBucket序號定位到的是一組物理存儲節(jié)點,其中第一個節(jié)點是主節(jié)點,負責該VBucket的所有讀取和寫入請求,后續(xù)為冗余備份節(jié)點。代理服務器將客戶端的GET請求轉(zhuǎn)發(fā)給主節(jié)點。
[0115]5)物理存儲節(jié)點接收到GET請求后,從本地存儲引擎中取出KEY對應的數(shù)據(jù),發(fā)送應答包給代理節(jié)點。
[0116]6)代理節(jié)點接收到物理存儲節(jié)點的應答包后,將應答包返回給客戶端。
[0117]參照圖6,示出了 KEY和VBucket之間,VBucket和物理存儲節(jié)點之間的映射關(guān)系示意圖。在KEY和VBucket之間,通過固定哈希的方式獲取映射關(guān)系,在VBucket和物理存儲節(jié)點之間,通過查表的方式獲取映射關(guān)系。
[0118]下面描述一個物理存儲節(jié)點失效的故障轉(zhuǎn)移流程的示例。
[0119]I) A節(jié)點失效。
[0120]2)元數(shù)據(jù)服務器上有對所有物理存儲節(jié)點存活狀態(tài)的實時監(jiān)控進程。當發(fā)現(xiàn)A節(jié)點失效時,即會修改路由表,將A節(jié)點作為主節(jié)點的VBucket,其主節(jié)點重新映射到下一個冗余節(jié)點上。
[0121]3)所有代理節(jié)點,都會從元數(shù)據(jù)服務器同步路由表信息。當發(fā)現(xiàn)路由表變更后,后續(xù)的請求將依據(jù)新的路由表來做路由。
[0122]下面描述一個增加一個物理存儲節(jié)點的流程的示例。
[0123]I)新增物理存儲節(jié)點B,B會向元數(shù)據(jù)服務器發(fā)送一個注冊請求。
[0124]2)元數(shù)據(jù)服務器收到注冊請求后,確認B是否是工作節(jié)點,若不是合法工作節(jié)點則拒絕,若是則進入下面新節(jié)點數(shù)據(jù)準備的流程。
[0125]3)假設之前有m個物理存儲節(jié)點,而VBucket總數(shù)為vt,元數(shù)據(jù)服務器計算新加入節(jié)點可以承載的VBucket個數(shù)為number = abs (vt/m+1)。元數(shù)據(jù)服務器發(fā)起指令通知B從當前活躍的存儲節(jié)點中同步number個(N個)VBucket。
[0126]4)新存儲節(jié)點B完成VBucket數(shù)據(jù)同步,通知元數(shù)據(jù)服務器其準備完畢。
[0127]5)元數(shù)據(jù)服務器生成一張新的路由表。
[0128]6)代理節(jié)點收到元數(shù)據(jù)服務器的路由表更新通知,將后續(xù)請求依據(jù)新的路由表路由,至此,新物理節(jié)點B正式加到集群當中服務。
[0129]因為新增存儲節(jié)點分擔了 VBucket,增加了系統(tǒng)容量。在空閑時間,當前活躍的存儲節(jié)點會逐步淘汰已經(jīng)不屬于自身的VBucket。
[0130]本發(fā)明實現(xiàn)了一個由多臺機器組成,可容納海量數(shù)據(jù),并可以通過增加集群機器數(shù)量擴大集群數(shù)據(jù)規(guī)模,穩(wěn)定可靠的鍵-值存儲系統(tǒng),以及存儲之上的適應高并發(fā)訪問的網(wǎng)絡模型。本發(fā)明具有以下的一些創(chuàng)新點:
[0131]本發(fā)明實現(xiàn)了基于一致性哈希算法的數(shù)據(jù)分布策略。集群內(nèi)部有輕量級的元數(shù)據(jù)服務器,只存儲全局路由表信息,即數(shù)據(jù)區(qū)塊區(qū)號和存儲物理節(jié)點的映射關(guān)系,對鍵的訪問請求,會先根據(jù)哈希算法計算出數(shù)據(jù)區(qū)塊區(qū)號,再通過全局路由表找到所負責的存儲物理節(jié)點。
[0132]本發(fā)明的集群內(nèi)部可以平滑增加或者減少機器個數(shù),無須停止服務。增減機器后,數(shù)據(jù)會自動在多臺機器之間重新達到平滑點。
[0133]本發(fā)明支持數(shù)據(jù)冗余存儲。所有數(shù)據(jù)節(jié)點均可以同時作為其他節(jié)點的冗余節(jié)點。
[0134]本發(fā)明的集群對外可以采用支持高并發(fā)的網(wǎng)絡訪問接口,并可以通過增加代理節(jié)點和存儲節(jié)點的數(shù)量提高整個集群的并發(fā)能力。代理節(jié)點對外通訊,代理節(jié)點和存儲節(jié)點之間的內(nèi)部通訊可以優(yōu)選采用基于1復用的TCP網(wǎng)絡模型。
[0135]本發(fā)明還支持存儲引擎的定制化。可以根據(jù)應用需求,選用內(nèi)存存儲引擎、或者固態(tài)硬盤存儲引擎、或者SAS/SATA硬盤的存儲引擎;或者可以選用混用的多級存儲引擎,將熱數(shù)據(jù)在高速設備(內(nèi)存、固態(tài)硬盤)上緩存。
[0136]總之,本發(fā)明可以實現(xiàn)自動化的集群擴容,通過增加集群內(nèi)部物理存儲節(jié)點的數(shù)量,內(nèi)部數(shù)據(jù)會自動轉(zhuǎn)移到新的存儲節(jié)點上,從而達到擴大集群的存儲容量和并發(fā)訪問能力的目的。本發(fā)明可以承載海量數(shù)據(jù)的存儲和每日千億級別的高并發(fā)訪問。由其適用于木馬云查殺服務、網(wǎng)址云查殺服務、云安全中心數(shù)據(jù)索引中心等相關(guān)安全產(chǎn)品和后臺應用服務中。
[0137]參照圖7示出了本發(fā)明一種元數(shù)據(jù)服務器實施例,作為本發(fā)明方案中的關(guān)鍵部件,其可以包括:
[0138]存儲模塊701,用于存儲反映目標KEY和存儲節(jié)點映射關(guān)系的全局路由表信息;
[0139]全局路由表信息同步模塊702,用于將所述全局路由表信息同步到至少一個代理節(jié)點;所述代理節(jié)點用于響應客戶端發(fā)出的包括目標KEY的請求,基于所述全局路由表信息,將客戶端請求轉(zhuǎn)發(fā)給相應的存儲節(jié)點;以及將相應存儲節(jié)點返回的包括目標Value的回應包傳送給客戶端。
[0140]在優(yōu)選實現(xiàn)中,元數(shù)據(jù)服務器還可以包括:數(shù)據(jù)同步模塊703,用于依據(jù)新增存儲節(jié)點的屬性參數(shù),通知所述新增的存儲節(jié)點從所選定的存儲節(jié)點中同步N個數(shù)據(jù)區(qū)塊;所述N由所述新增存儲節(jié)點的屬性參數(shù)計算得到;路由表變更模塊704,用于當所述新增的存儲節(jié)點完成數(shù)據(jù)同步后,生成新的全局路由表信息;第一更新通知模塊705,用于向代理節(jié)點發(fā)送路由表更新通知。
[0141]對于具有故障轉(zhuǎn)移功能的元數(shù)據(jù)服務器而言,其還可以包括:監(jiān)控模塊706,用于監(jiān)控各存儲節(jié)點的存活狀態(tài),當監(jiān)測到一個存儲節(jié)點失效時,修改全局路由表信息;所述修改包括:針對以該失效的存儲節(jié)點作為主節(jié)點的數(shù)據(jù)區(qū)塊,將其主節(jié)點重新映射到另一個冗余節(jié)點上;第二更新通知模塊707,用于向代理節(jié)點發(fā)送路由表更新通知。
[0142]參照圖8,示出了本發(fā)明一種代理節(jié)點實施例,作為本發(fā)明方案中的關(guān)鍵部件,其可以包括:
[0143]查詢轉(zhuǎn)發(fā)模塊801,用于響應客戶端發(fā)出的包括目標KEY的請求,通過查詢?nèi)致酚杀硇畔?,將客戶端請求轉(zhuǎn)發(fā)給相應的存儲節(jié)點;
[0144]數(shù)據(jù)轉(zhuǎn)發(fā)模塊802,用于將相應存儲節(jié)點返回的包括目標Value的回應包傳送給客戶端。
[0145]在優(yōu)選實現(xiàn)中,代理節(jié)點還可以包括:路由表同步模塊803,用于將服務器上的全局路由表信息同步至本地;其中,所述查詢轉(zhuǎn)發(fā)模塊基于本地的全局路由表信息進行查詢。
[0146]在優(yōu)選實現(xiàn)中,代理節(jié)點還可以包括:路由表更新模塊804,用于當收到路由表更新通知時,獲取新的全局路由表信息。當然,在具體實現(xiàn)中,也可以直接將路由表更新模塊804的功能集成到路由表同步模塊803中。
[0147]在本發(fā)明的一個優(yōu)選實現(xiàn)方案中,所述查詢轉(zhuǎn)發(fā)模塊801具體可以包括:
[0148]哈希子模塊8011,用于基于所接收的包括目標KEY的客戶端請求,通過哈希算法計算目標KEY所在的數(shù)據(jù)區(qū)塊;
[0149]定位子模塊8012,用于依據(jù)計算得到的目標KEY所在的數(shù)據(jù)區(qū)塊標識,查詢所述全局路由表信息,定位相應的存儲節(jié)點;
[0150]轉(zhuǎn)發(fā)子模塊8013,用于將客戶端請求轉(zhuǎn)發(fā)至相應存儲節(jié)點。
[0151]本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。對于裝置實施例而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實施例的部分說明即可。
[0152]以上對本申請所提供的一種分布式鍵-值查詢引擎系統(tǒng)、分布式鍵-值查詢方法、代理節(jié)點、元數(shù)據(jù)服務器、增加物理存儲節(jié)點的方法和一種故障轉(zhuǎn)移方法進行了詳細介紹,本文中應用了具體個例對本申請的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本申請的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請的思想,在【具體實施方式】及應用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應理解為對本申請的限制。
【權(quán)利要求】
1.一種分布式信息查詢方法,用于查詢存儲節(jié)點中存儲的信息,該方法包括: 接收客戶端發(fā)送的包括目標KEY的請求; 基于所接收的包括目標KEY的請求,通過哈希算法計算目標KEY所在的數(shù)據(jù)區(qū)塊; 依據(jù)計算得到的目標KEY所在的數(shù)據(jù)區(qū)塊標識,查詢所述全局路由表信息以定位相應的存儲節(jié)點,其中,所述全局路由表信息包括目標KEY所在的數(shù)據(jù)區(qū)塊到存儲節(jié)點的映射關(guān)系; 將客戶端請求轉(zhuǎn)發(fā)給相應的存儲節(jié)點; 將相應存儲節(jié)點返回的包括目 標Value的回應包傳送給客戶端。
2.如權(quán)利要求1所述的方法,還包括: 監(jiān)控各存儲節(jié)點的存活狀態(tài); 當監(jiān)測到一個存儲節(jié)點失效時,修改全局路由表信息。
3.如權(quán)利要求2所述的方法,其中,所述修改包括:更新所述全局路由表信息中存儲的目標KEY所在的數(shù)據(jù)區(qū)塊到存儲節(jié)點的映射關(guān)系,針對以該失效的存儲節(jié)點作為主節(jié)點的數(shù)據(jù)區(qū)塊,將其主節(jié)點重新映射到另一個冗余節(jié)點上。
4.如權(quán)利要求1至3中任一項所述的方法,還包括:通過異步線程將維護在服務器上的全局路由表信息同步至本地,在本地進行對全局路由表信息的查詢。
5.如權(quán)利要求1至4中任一項所述的方法,還包括: 當收到路由表更新通知時,獲取新的全局路由表信息。
6.如權(quán)利要求1至5中任一項所述的方法,還包括: 接收新增存儲節(jié)點的注冊請求; 依據(jù)新增存儲節(jié)點的屬性參數(shù),通知所述新增的存儲節(jié)點從所選定的存儲節(jié)點中同步N個數(shù)據(jù)區(qū)塊,其中,所述N由所述新增存儲節(jié)點的屬性參數(shù)計算得到; 當所述新增的存儲節(jié)點完成數(shù)據(jù)同步后,生成新的全局路由表信息。
7.如權(quán)利要求6所述的方法,其中,在接收新增存儲節(jié)點的注冊請求之后,還包括: 如果所述新增存儲節(jié)點為非法工作節(jié)點,拒絕所述新增存儲節(jié)點的加入。
8.如權(quán)利要求6所述的方法,還包括: 在所選定的存儲節(jié)點的空閑時間,逐步刪除其所存儲的已同步到所述新增存儲節(jié)點的所述N個數(shù)據(jù)區(qū)塊。
9.一種分布式查詢引擎系統(tǒng),其包括: 元數(shù)據(jù)服務器,用于維護指向存儲節(jié)點的全局路由表信息; 至少一個代理節(jié)點,包括: 查詢轉(zhuǎn)發(fā)模塊,用于響應客戶端發(fā)出的包括目標KEY的請求,基于所述全局路由表信息,將客戶端請求轉(zhuǎn)發(fā)給相應的存儲節(jié)點; 數(shù)據(jù)轉(zhuǎn)發(fā)模塊,用于將相應存儲節(jié)點返回的包括目標Value的回應包傳送給客戶端;至少一個存儲節(jié)點,用于基于接收到的客戶端請求,從本地存儲中獲取所需數(shù)據(jù),并發(fā)送包括目標Value的回應包給代理節(jié)點; 其中,所述元數(shù)據(jù)服務器包括: 數(shù)據(jù)同步模塊,用于通知所述新增的存儲節(jié)點從所選定的存儲節(jié)點中同步N個數(shù)據(jù)區(qū)塊,所述N由所述新增存儲節(jié)點的屬性參數(shù)計算得到;路由表變更模塊,用于當所述新增的存儲節(jié)點完成數(shù)據(jù)同步后,生成新的全局路由表信息; 第一更新通知模塊,用于向代理節(jié)點發(fā)送路由表更新通知。
10.根據(jù)權(quán)利要求9所述的系統(tǒng),其中,所述代理節(jié)點還包括: 路由表同步模塊,用于將元數(shù)據(jù)服務器的全局路由表信息同步至本地; 其中,所述查詢轉(zhuǎn)發(fā)模炔基于本地的全局路由表信息進行查詢。
11.根據(jù)權(quán)利要求10所述的系統(tǒng),其中,所述代理節(jié)點還包括: 路由表更新模塊,用于當收到元數(shù)據(jù)服務器的路由表更新通知時,從元數(shù)據(jù)服務器獲取新的全局路由表信息。
12.根據(jù)權(quán)利要求9所述的系統(tǒng),其中,所述查詢轉(zhuǎn)發(fā)模塊具體包括: 哈希子模塊,用于基于所接收的包括目標KEY的客戶端請求,通過哈希算法計算目標KEY所在的數(shù)據(jù)區(qū)塊; 定位子模塊,用于依據(jù)計算得到的目標KEY所在的數(shù)據(jù)區(qū)塊的標識,查詢所述全局路由表信息,定位相應的存儲節(jié)點; 轉(zhuǎn)發(fā)子模塊,用于將客戶端請求轉(zhuǎn)發(fā)至相應存儲節(jié)點。
13.根據(jù)權(quán)利要求9至12中任一項所述的系統(tǒng),其中,所述元數(shù)據(jù)服務器還包括: 監(jiān)控模塊,用于監(jiān)控各存儲節(jié)點的存活狀態(tài),當監(jiān)測到一個存儲節(jié)點失效時,修改全局路由表信息;所述修改包括:針對以該失效的存儲節(jié)點作為主節(jié)點的數(shù)據(jù)區(qū)塊,將其主節(jié)點重新映射到另一個冗余節(jié)點上; 第二更新通知模塊,用于向代理節(jié)點發(fā)送路由表更新通知。
14.根據(jù)權(quán)利要求9至13中任一項所述的系統(tǒng),其中,所述至少一個存儲節(jié)點包括: 用于存儲熱點數(shù)據(jù)的高速存儲節(jié)點,和用于存儲非熱點數(shù)據(jù)的其他類型存儲節(jié)點; 其中,所述高速存儲節(jié)點包括內(nèi)存節(jié)點或者固態(tài)硬盤節(jié)點,所述其他類型存儲節(jié)點包括SAS/SATA硬盤節(jié)點。
15.一種元數(shù)據(jù)服務器,其包括: 存儲模塊,用于存儲反映目標KEY和存儲節(jié)點映射關(guān)系的全局路由表信息; 全局路由表信息同步模塊,用于將所述全局路由表信息同步到至少一個代理節(jié)點,其中,所述代理節(jié)點用于響應客戶端發(fā)出的包括目標KEY的請求,基于所述全局路由表信息,將客戶端請求轉(zhuǎn)發(fā)給相應的存儲節(jié)點,以及將相應存儲節(jié)點返回的包括目標Value的回應包傳送給客戶端; 數(shù)據(jù)同步模塊,用于依據(jù)新增存儲節(jié)點的屬性參數(shù),通知所述新增的存儲節(jié)點從所選定的存儲節(jié)點中同步N個數(shù)據(jù)區(qū)塊;所述N由所述新增存儲節(jié)點的屬性參數(shù)計算得到; 路由表變更模塊,用于當所述新增的存儲節(jié)點完成數(shù)據(jù)同步后,生成新的全局路由表信息。
16.根據(jù)權(quán)利要求15所述的元數(shù)據(jù)服務器,還包括: 監(jiān)控模塊,用于監(jiān)控各存儲節(jié)點的存活狀態(tài),當監(jiān)測到一個存儲節(jié)點失效時,修改全局路由表信息;所述修改包括:針對以該失效的存儲節(jié)點作為主節(jié)點的數(shù)據(jù)區(qū)塊,將其主節(jié)點重新映射到另一個冗余節(jié)點上。
17.根據(jù)權(quán)利要求15或16所述的元數(shù)據(jù)服務器,還包括:第一更新通知模塊,用于向代理節(jié)點發(fā)送路由表更新通知。
【文檔編號】G06F17/30GK104050249SQ201410256090
【公開日】2014年9月17日 申請日期:2011年12月31日 優(yōu)先權(quán)日:2011年12月31日
【發(fā)明者】楊康, 謝冉 申請人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
丁青县| 革吉县| 金堂县| 彩票| 澄迈县| 饶平县| 东辽县| 确山县| 盐池县| 博客| 银川市| 大理市| 岑巩县| 那坡县| 沙湾县| 西林县| 大悟县| 喀喇| 新安县| 图们市| 南川市| 静海县| 桐柏县| 翁源县| 安平县| 鸡东县| 高州市| 赫章县| 犍为县| 芦山县| 丹江口市| 揭阳市| 泰宁县| 丹阳市| 青龙| 嘉兴市| 南雄市| 夏邑县| 喀喇| 顺平县| 株洲市|