分布式查詢引擎系統(tǒng)和方法及元數(shù)據(jù)服務(wù)器的制造方法
【專利摘要】本申請(qǐng)?zhí)峁┝艘环N分布式鍵-值查詢引擎系統(tǒng)和查詢方法,該系統(tǒng)包括:元數(shù)據(jù)服務(wù)器、至少一個(gè)代理節(jié)點(diǎn)和至少一個(gè)存儲(chǔ)節(jié)點(diǎn);其中,所述元數(shù)據(jù)服務(wù)器,用于維護(hù)指向存儲(chǔ)節(jié)點(diǎn)的全局路由表信息;所述代理節(jié)點(diǎn)包括:查詢轉(zhuǎn)發(fā)模塊,用于響應(yīng)客戶端發(fā)出的包括目標(biāo)KEY的請(qǐng)求,基于所述全局路由表信息,將客戶端請(qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的存儲(chǔ)節(jié)點(diǎn);數(shù)據(jù)轉(zhuǎn)發(fā)模塊,用于將相應(yīng)存儲(chǔ)節(jié)點(diǎn)返回的包括目標(biāo)Value的回應(yīng)包傳送給客戶端;所述存儲(chǔ)節(jié)點(diǎn),用于基于接收到的客戶端請(qǐng)求,從本地存儲(chǔ)中獲取所需數(shù)據(jù),并發(fā)送包括目標(biāo)Value的回應(yīng)包給代理節(jié)點(diǎn)。本發(fā)明能夠?qū)崿F(xiàn)鍵-值數(shù)據(jù)的分布式存儲(chǔ)和查詢,并且能夠容納海量鍵-值數(shù)據(jù),對(duì)高并發(fā)訪問的適應(yīng)性更強(qiáng)。
【專利說明】分布式查詢引擎系統(tǒng)和方法及元數(shù)據(jù)服務(wù)器
[0001]本發(fā)明專利申請(qǐng)是申請(qǐng)日為2011年12月31日、申請(qǐng)?zhí)枮?01110460494.8、名稱為“一種分布式鍵-值查詢方法和查詢引擎系統(tǒng)”的中國發(fā)明專利申請(qǐng)的分案申請(qǐng)。
【技術(shù)領(lǐng)域】
[0002]本申請(qǐng)涉及分布式數(shù)據(jù)存儲(chǔ)和查詢【技術(shù)領(lǐng)域】,特別是涉及一種分布式鍵-值查詢方法和查詢引擎系統(tǒng)。
【背景技術(shù)】
[0003]對(duì)于大規(guī)模互聯(lián)網(wǎng)應(yīng)用、云計(jì)算的支撐而言,一般會(huì)使用關(guān)系型數(shù)據(jù)庫存儲(chǔ)相關(guān)數(shù)據(jù)。
[0004]傳統(tǒng)的關(guān)系型數(shù)據(jù)庫,通常將某一個(gè)應(yīng)用的某一類信息(例如網(wǎng)站用戶信息)都存儲(chǔ)在數(shù)據(jù)庫系統(tǒng)的單個(gè)庫單張表中,對(duì)應(yīng)用程序提供讀取和寫入操作的通訊接口。實(shí)現(xiàn)上,典型的關(guān)系型數(shù)據(jù)庫如MySQL,單表的查詢和寫入操作有一定上限,超過這個(gè)上限,SQL查詢和寫入操作將會(huì)變得非常緩慢,磁盤輸入/輸出(1)模塊也會(huì)出現(xiàn)瓶頸。在互聯(lián)網(wǎng)海量數(shù)據(jù)的今天,傳統(tǒng)關(guān)系型數(shù)據(jù)庫要承載海量數(shù)據(jù),通常的做法就是將數(shù)據(jù)分成多個(gè)庫多個(gè)表存儲(chǔ),例如網(wǎng)站用戶信息數(shù)據(jù),可以按取模算法對(duì)用戶標(biāo)識(shí)(uSer_id)字段計(jì)算哈希(hash)值,將不同的用戶數(shù)據(jù)分片到不同數(shù)據(jù)庫,以此來解決單庫單表的存儲(chǔ)和讀寫壓力問題。
[0005]也就是說,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫,為支持大容量數(shù)據(jù),需要將數(shù)據(jù)水平拆分到多個(gè)庫多張表上,確保單張表的記錄數(shù)是有限的。這樣的好處在于減小了索引文件的大小,從而提升查詢性能。
[0006]但是,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫,傾向于使用單臺(tái)機(jī)器來解決存儲(chǔ)容量的問題。若要擴(kuò)容到多臺(tái)機(jī)器,需要在應(yīng)用層做數(shù)據(jù)拆分策略。這里存在兩個(gè)問題,一個(gè)是對(duì)于每個(gè)應(yīng)用,都需要應(yīng)用層做數(shù)據(jù)拆分,且每個(gè)應(yīng)用拆分策略都會(huì)有不同,效率低;另一個(gè)問題是增加機(jī)器后的數(shù)據(jù)重新拆分代價(jià)很高,需要人工停機(jī)維護(hù)操作,不支持自動(dòng)彈性擴(kuò)展。
[0007]其次,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫,單臺(tái)機(jī)器的并發(fā)能力有一定上限,高并發(fā)的訪問會(huì)將機(jī)器資源耗盡。不能支持高并發(fā)訪問的原因之一是關(guān)系型數(shù)據(jù)庫在檢索時(shí)需要做SQL解析操作,對(duì)CPU資源的開銷大。
[0008]總之,目前需要本領(lǐng)域技術(shù)人員迫切解決的一個(gè)技術(shù)問題是:如何能夠提供一種能夠容納海量數(shù)據(jù)、適應(yīng)高并發(fā)訪問的更加優(yōu)化的存儲(chǔ)/查詢方案。
【發(fā)明內(nèi)容】
[0009]本申請(qǐng)所要解決的技術(shù)問題是提供一種分布式鍵-值查詢方法和查詢引擎系統(tǒng),能夠容納海量鍵-值數(shù)據(jù),對(duì)高并發(fā)訪問的適應(yīng)性更強(qiáng)。
[0010]為了解決上述問題,本申請(qǐng)公開了一種分布式鍵-值查詢引擎系統(tǒng),具體可以包括:
[0011]元數(shù)據(jù)服務(wù)器,用于維護(hù)指向存儲(chǔ)節(jié)點(diǎn)的全局路由表信息;
[0012]至少一個(gè)代理節(jié)點(diǎn),包括:
[0013]查詢轉(zhuǎn)發(fā)模塊,用于響應(yīng)客戶端發(fā)出的包括目標(biāo)KEY的請(qǐng)求,基于所述全局路由表信息,將客戶端請(qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的存儲(chǔ)節(jié)點(diǎn);
[0014]數(shù)據(jù)轉(zhuǎn)發(fā)模塊,用于將相應(yīng)存儲(chǔ)節(jié)點(diǎn)返回的包括目標(biāo)Value的回應(yīng)包傳送給客戶端;
[0015]至少一個(gè)存儲(chǔ)節(jié)點(diǎn),用于基于接收到的客戶端請(qǐng)求,從本地存儲(chǔ)中獲取所需數(shù)據(jù),并發(fā)送包括目標(biāo)Value的回應(yīng)包給代理節(jié)點(diǎn)。
[0016]優(yōu)選的,所述代理節(jié)點(diǎn)還可以包括:路由表同步模塊,用于將元數(shù)據(jù)服務(wù)器的全局路由表信息同步至本地;其中,所述查詢轉(zhuǎn)發(fā)模塊基于本地的全局路由表信息進(jìn)行查詢。
[0017]優(yōu)選的,所述代理節(jié)點(diǎn)還可以包括:路由表更新模塊,用于當(dāng)收到元數(shù)據(jù)服務(wù)器的路由表更新通知時(shí),從元數(shù)據(jù)服務(wù)器獲取新的全局路由表信息。
[0018]優(yōu)選的,所述查詢轉(zhuǎn)發(fā)模塊具體包括:哈希子模塊,用于基于所接收的包括目標(biāo)KEY的客戶端請(qǐng)求,通過哈希算法計(jì)算目標(biāo)KEY所在的數(shù)據(jù)區(qū)塊;定位子模塊,用于依據(jù)計(jì)算得到的目標(biāo)KEY所在的數(shù)據(jù)區(qū)塊的標(biāo)識(shí),查詢所述全局路由表信息,定位相應(yīng)的存儲(chǔ)節(jié)點(diǎn);轉(zhuǎn)發(fā)子模塊,用于將客戶端請(qǐng)求轉(zhuǎn)發(fā)至相應(yīng)存儲(chǔ)節(jié)點(diǎn)。
[0019]優(yōu)選的,所述元數(shù)據(jù)服務(wù)器還可以包括:數(shù)據(jù)同步模塊,用于通知所述新增的存儲(chǔ)節(jié)點(diǎn)從所選定的存儲(chǔ)節(jié)點(diǎn)中同步N個(gè)數(shù)據(jù)區(qū)塊;所述N由所述新增存儲(chǔ)節(jié)點(diǎn)的屬性參數(shù)計(jì)算得到;路由表變更模塊,用于當(dāng)所述新增的存儲(chǔ)節(jié)點(diǎn)完成數(shù)據(jù)同步后,生成新的全局路由表信息;第一更新通知模塊,用于向代理節(jié)點(diǎn)發(fā)送路由表更新通知。
[0020]優(yōu)選的,所述元數(shù)據(jù)服務(wù)器還可以包括:監(jiān)控模塊,用于監(jiān)控各存儲(chǔ)節(jié)點(diǎn)的存活狀態(tài),當(dāng)監(jiān)測(cè)到一個(gè)存儲(chǔ)節(jié)點(diǎn)失效時(shí),修改全局路由表信息;所述修改包括:針對(duì)以該失效的存儲(chǔ)節(jié)點(diǎn)作為主節(jié)點(diǎn)的數(shù)據(jù)區(qū)塊,將其主節(jié)點(diǎn)重新映射到另一個(gè)冗余節(jié)點(diǎn)上;第二更新通知模塊,用于向代理節(jié)點(diǎn)發(fā)送路由表更新通知。
[0021]優(yōu)選的,所述存儲(chǔ)節(jié)點(diǎn)可以包括:用于存儲(chǔ)熱點(diǎn)數(shù)據(jù)的高速存儲(chǔ)節(jié)點(diǎn),和用于存儲(chǔ)非熱點(diǎn)數(shù)據(jù)的其他類型存儲(chǔ)節(jié)點(diǎn);其中,所述高速存儲(chǔ)節(jié)點(diǎn)包括內(nèi)存節(jié)點(diǎn)或者固態(tài)硬盤節(jié)點(diǎn),所述其他類型存儲(chǔ)節(jié)點(diǎn)包括SAS/SATA硬盤節(jié)點(diǎn)。
[0022]依據(jù)本發(fā)明的另一實(shí)施例,還公開了一種分布式鍵-值查詢方法,具體可以包括:接收客戶端指向當(dāng)前代理節(jié)點(diǎn)的包括目標(biāo)KEY的請(qǐng)求;當(dāng)前代理節(jié)點(diǎn)通過查詢?nèi)致酚杀硇畔?,將客戶端?qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的存儲(chǔ)節(jié)點(diǎn);當(dāng)前代理節(jié)點(diǎn)將相應(yīng)存儲(chǔ)節(jié)點(diǎn)返回的包括目標(biāo)Value的回應(yīng)包傳送給客戶端。
[0023]優(yōu)選的,所述分布式鍵-值查詢方法還可以包括:當(dāng)前代理節(jié)點(diǎn)通過異步線程將維護(hù)在服務(wù)器上的全局路由表信息同步至本地,在本地進(jìn)行對(duì)全局路由表信息的查詢。
[0024]優(yōu)選的,所述分布式鍵-值查詢方法還可以包括:當(dāng)收到路由表更新通知時(shí),獲取新的全局路由表信息。
[0025]優(yōu)選的,所述當(dāng)前代理節(jié)點(diǎn)通過查詢?nèi)致酚杀硇畔?,將客戶端?qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的存儲(chǔ)節(jié)點(diǎn)的過程具體包括:基于所接收的包括目標(biāo)KEY的客戶端請(qǐng)求,通過哈希算法計(jì)算目標(biāo)KEY所在的數(shù)據(jù)區(qū)塊;依據(jù)計(jì)算得到的目標(biāo)KEY所在的數(shù)據(jù)區(qū)塊標(biāo)識(shí),查詢所述全局路由表信息,定位相應(yīng)的存儲(chǔ)節(jié)點(diǎn);將客戶端請(qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的存儲(chǔ)節(jié)點(diǎn)。
[0026]依據(jù)本發(fā)明的另一實(shí)施例,還公開了一種分布式鍵-值(Key-Value)查詢引擎系統(tǒng)的故障轉(zhuǎn)移方法,包括:監(jiān)測(cè)各存儲(chǔ)節(jié)點(diǎn)是否存活;其中,同一個(gè)數(shù)據(jù)區(qū)塊存儲(chǔ)在一個(gè)存儲(chǔ)主節(jié)點(diǎn)和至少一個(gè)存儲(chǔ)冗余節(jié)點(diǎn)上;當(dāng)監(jiān)測(cè)到一個(gè)存儲(chǔ)節(jié)點(diǎn)失效時(shí),修改全局路由表信息;所述修改包括:針對(duì)以該失效的存儲(chǔ)節(jié)點(diǎn)作為主節(jié)點(diǎn)的數(shù)據(jù)區(qū)塊,將其主節(jié)點(diǎn)重新映射到另一個(gè)冗余節(jié)點(diǎn)上;將新的全局路由表信息更新至各代理節(jié)點(diǎn);所述代理節(jié)點(diǎn)用于響應(yīng)客戶端發(fā)出的包括目標(biāo)KEY的請(qǐng)求,基于所述全局路由表信息,將客戶端請(qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的存儲(chǔ)節(jié)點(diǎn);以及將相應(yīng)存儲(chǔ)節(jié)點(diǎn)返回的包括目標(biāo)Value的回應(yīng)包傳送給客戶端。
[0027]依據(jù)本發(fā)明的另一實(shí)施例,還公開了一種分布式鍵-值(Key-Value)查詢引擎系統(tǒng)的增加物理存儲(chǔ)節(jié)點(diǎn)方法,包括:接收新增存儲(chǔ)節(jié)點(diǎn)的注冊(cè)請(qǐng)求;依據(jù)新增存儲(chǔ)節(jié)點(diǎn)的屬性參數(shù),通知所述新增的存儲(chǔ)節(jié)點(diǎn)從所選定的存儲(chǔ)節(jié)點(diǎn)中同步N個(gè)數(shù)據(jù)區(qū)塊;所述N由所述新增存儲(chǔ)節(jié)點(diǎn)的屬性參數(shù)計(jì)算得到;當(dāng)所述新增的存儲(chǔ)節(jié)點(diǎn)完成數(shù)據(jù)同步后,生成新的全局路由表信息;將新的全局路由表信息更新至代理節(jié)點(diǎn);所述代理節(jié)點(diǎn)用于響應(yīng)客戶端發(fā)出的包括目標(biāo)KEY的請(qǐng)求,基于所述全局路由表信息,將客戶端請(qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的存儲(chǔ)節(jié)點(diǎn);以及將相應(yīng)存儲(chǔ)節(jié)點(diǎn)返回的包括目標(biāo)Value的回應(yīng)包傳送給客戶端。
[0028]優(yōu)選的,該方法,在接收新增存儲(chǔ)節(jié)點(diǎn)的注冊(cè)請(qǐng)求之后,還包括:如果所述新增存儲(chǔ)節(jié)點(diǎn)為合法工作節(jié)點(diǎn),則進(jìn)入下一步,否則,拒絕所述新增存儲(chǔ)節(jié)點(diǎn)的加入。
[0029]優(yōu)選的,該方法,在將新的全局路由表信息更新至代理節(jié)點(diǎn)之后,還包括:在所選定的存儲(chǔ)節(jié)點(diǎn)的空閑時(shí)間,逐步刪除其所存儲(chǔ)的已同步到所述新增存儲(chǔ)節(jié)點(diǎn)的所述N個(gè)數(shù)據(jù)區(qū)塊。
[0030]依據(jù)本發(fā)明的另一實(shí)施例,還公開了一種元數(shù)據(jù)服務(wù)器,包括:
[0031]存儲(chǔ)模塊,用于存儲(chǔ)反映目標(biāo)KEY和存儲(chǔ)節(jié)點(diǎn)映射關(guān)系的全局路由表信息;
[0032]全局路由表信息同步模塊,用于將所述全局路由表信息同步到至少一個(gè)代理節(jié)點(diǎn);所述代理節(jié)點(diǎn)用于響應(yīng)客戶端發(fā)出的包括目標(biāo)KEY的請(qǐng)求,基于所述全局路由表信息,將客戶端請(qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的存儲(chǔ)節(jié)點(diǎn);以及將相應(yīng)存儲(chǔ)節(jié)點(diǎn)返回的包括目標(biāo)Value的回應(yīng)包傳送給客戶端。
[0033]優(yōu)選的,元數(shù)據(jù)服務(wù)器還可以包括:數(shù)據(jù)同步模塊,用于依據(jù)新增存儲(chǔ)節(jié)點(diǎn)的屬性參數(shù),通知所述新增的存儲(chǔ)節(jié)點(diǎn)從所選定的存儲(chǔ)節(jié)點(diǎn)中同步N個(gè)數(shù)據(jù)區(qū)塊;所述N由所述新增存儲(chǔ)節(jié)點(diǎn)的屬性參數(shù)計(jì)算得到;路由表變更模塊,用于當(dāng)所述新增的存儲(chǔ)節(jié)點(diǎn)完成數(shù)據(jù)同步后,生成新的全局路由表信息;第一更新通知模塊,用于向代理節(jié)點(diǎn)發(fā)送路由表更新通知。
[0034]優(yōu)選的,元數(shù)據(jù)服務(wù)器還可以包括:監(jiān)控模塊,用于監(jiān)控各存儲(chǔ)節(jié)點(diǎn)的存活狀態(tài),當(dāng)監(jiān)測(cè)到一個(gè)存儲(chǔ)節(jié)點(diǎn)失效時(shí),修改全局路由表信息;所述修改包括:針對(duì)以該失效的存儲(chǔ)節(jié)點(diǎn)作為主節(jié)點(diǎn)的數(shù)據(jù)區(qū)塊,將其主節(jié)點(diǎn)重新映射到另一個(gè)冗余節(jié)點(diǎn)上;第二更新通知模塊,用于向代理節(jié)點(diǎn)發(fā)送路由表更新通知。
[0035]依據(jù)本發(fā)明的另一實(shí)施例,還公開了一種代理節(jié)點(diǎn),可以包括:
[0036]查詢轉(zhuǎn)發(fā)模塊,用于響應(yīng)客戶端發(fā)出的包括目標(biāo)KEY的請(qǐng)求,通過查詢?nèi)致酚杀硇畔?,將客戶端?qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的存儲(chǔ)節(jié)點(diǎn);
[0037]數(shù)據(jù)轉(zhuǎn)發(fā)模塊,用于將相應(yīng)存儲(chǔ)節(jié)點(diǎn)返回的包括目標(biāo)Value的回應(yīng)包傳送給客戶端。
[0038]優(yōu)選的,所述的代理節(jié)點(diǎn)還可以包括:路由表同步模塊,用于將服務(wù)器上的全局路由表信息同步至本地;其中,所述查詢轉(zhuǎn)發(fā)模塊基于本地的全局路由表信息進(jìn)行查詢。
[0039]優(yōu)選的,所述的代理節(jié)點(diǎn)還可以包括:路由表更新模塊,用于當(dāng)收到路由表更新通知時(shí),獲取新的全局路由表息。
[0040]優(yōu)選的,所述查詢轉(zhuǎn)發(fā)模塊具體包括:
[0041]哈希子模塊,用于基于所接收的包括目標(biāo)KEY的客戶端請(qǐng)求,通過哈希算法計(jì)算目標(biāo)KEY所在的數(shù)據(jù)區(qū)塊;
[0042]定位子模塊,用于依據(jù)計(jì)算得到的目標(biāo)KEY所在的數(shù)據(jù)區(qū)塊標(biāo)識(shí),查詢所述全局路由表信息,定位相應(yīng)的存儲(chǔ)節(jié)點(diǎn);
[0043]轉(zhuǎn)發(fā)子模塊,用于將客戶端請(qǐng)求轉(zhuǎn)發(fā)至相應(yīng)存儲(chǔ)節(jié)點(diǎn)。
[0044]與現(xiàn)有技術(shù)相比,本申請(qǐng)具有以下優(yōu)點(diǎn):
[0045]本發(fā)明提出了一種新的分布式鍵-值查詢引擎架構(gòu),采用該架構(gòu)的查詢引擎系統(tǒng)和查詢方法,能夠?qū)崿F(xiàn)鍵-值數(shù)據(jù)的分布式存儲(chǔ)和查詢,并且能夠容納海量鍵-值數(shù)據(jù),對(duì)高并發(fā)訪問的適應(yīng)性更強(qiáng)。
[0046]其中,由于本發(fā)明采用了全局路由表信息,客戶端的數(shù)據(jù)請(qǐng)求可以通過查詢?nèi)致酚杀磉M(jìn)而找到相應(yīng)的存儲(chǔ)物理節(jié)點(diǎn),然后獲取所需數(shù)據(jù)即可。因此,當(dāng)需要增加物理存儲(chǔ)節(jié)點(diǎn)時(shí),只需要將該物理存儲(chǔ)節(jié)點(diǎn)增加的信息更新至全局路由表即可,可以實(shí)現(xiàn)平滑增加或者減少物理存儲(chǔ)節(jié)點(diǎn)的個(gè)數(shù),無須停止服務(wù)。相比較而言,現(xiàn)有技術(shù)針對(duì)存儲(chǔ)節(jié)點(diǎn)并沒有全局路由表,而是在應(yīng)用層做數(shù)據(jù)拆分策略,增加存儲(chǔ)節(jié)點(diǎn)后的數(shù)據(jù)重新拆分代價(jià)很高,需要人工停機(jī)維護(hù)操作,不支持自動(dòng)彈性擴(kuò)展。
[0047]另外,由于本發(fā)明將存儲(chǔ)和查詢架構(gòu)優(yōu)化為分布式鍵-值(Key-Value)結(jié)構(gòu),可以避免采用SQL數(shù)據(jù)庫的復(fù)雜查詢方式,提高查詢速度,故而大大提高了并發(fā)訪問的強(qiáng)度,尤其適用于確定某個(gè)應(yīng)用程序或者某個(gè)網(wǎng)址是否有害的信息存儲(chǔ)和查詢;例如,尤其適用于木馬云查殺、網(wǎng)址云查殺以及云安全中心數(shù)據(jù)索引等場(chǎng)合。再者,由于本發(fā)明并不是直接由元數(shù)據(jù)服務(wù)器來對(duì)全局路由表進(jìn)行處理,而是由代理節(jié)點(diǎn)接收用戶請(qǐng)求,并對(duì)同步至代理節(jié)點(diǎn)本地的全局路由表進(jìn)行查詢處理,這樣,就可以將高并發(fā)的用戶請(qǐng)求分散到多個(gè)代理節(jié)點(diǎn)上,由其同時(shí)進(jìn)行查詢處理,從而也大大提高了高并發(fā)訪問的處理能力。
【專利附圖】
【附圖說明】
[0048]圖1是本發(fā)明一種分布式鍵-值查詢引擎系統(tǒng)實(shí)施例的模塊示意圖;
[0049]圖2是本發(fā)明一種分布式鍵-值查詢方法實(shí)施例的步驟流程圖;
[0050]圖3是本發(fā)明一種故障轉(zhuǎn)移方法的步驟流程圖;
[0051]圖4是本發(fā)明一種增加物理存儲(chǔ)節(jié)點(diǎn)的方法的步驟流程圖;
[0052]圖5是本發(fā)明一種優(yōu)選的分布式KEY-VALUE查詢引擎系統(tǒng)的結(jié)構(gòu)示意圖;
[0053]圖6是一種KEY和VBucket之間,VBucket和物理存儲(chǔ)節(jié)點(diǎn)之間的映射關(guān)系示意圖;
[0054]圖7是本發(fā)明一種元數(shù)據(jù)服務(wù)器實(shí)施例的模塊示意圖;
[0055]圖8是本發(fā)明一種代理節(jié)點(diǎn)實(shí)施例的模塊示意圖。
【具體實(shí)施方式】
[0056]為使本申請(qǐng)的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和【具體實(shí)施方式】對(duì)本申請(qǐng)作進(jìn)一步詳細(xì)的說明。
[0057]參照?qǐng)D1,示出了本發(fā)明一種分布式鍵-值查詢引擎系統(tǒng)實(shí)施例,具體可以包括:
[0058]元數(shù)據(jù)服務(wù)器101,用于維護(hù)指向存儲(chǔ)節(jié)點(diǎn)的全局路由表信息;所述維護(hù)可以包括存儲(chǔ)以及相應(yīng)的修改更新等;
[0059]至少一個(gè)代理節(jié)點(diǎn)102,在圖1中示出了 X個(gè)代理節(jié)點(diǎn),每個(gè)代理節(jié)點(diǎn)可以包括:
[0060]查詢轉(zhuǎn)發(fā)模塊,用于響應(yīng)客戶端發(fā)出的包括目標(biāo)KEY的請(qǐng)求,基于所述全局路由表信息,將客戶端請(qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的存儲(chǔ)節(jié)點(diǎn);
[0061]數(shù)據(jù)轉(zhuǎn)發(fā)模塊,用于將相應(yīng)存儲(chǔ)節(jié)點(diǎn)返回的包括目標(biāo)Value的回應(yīng)包傳送給客戶端;
[0062]至少一個(gè)存儲(chǔ)節(jié)點(diǎn)103,用于基于接收到的客戶端請(qǐng)求,從本地存儲(chǔ)中獲取所需數(shù)據(jù),并發(fā)送包括目標(biāo)Value的回應(yīng)包給代理節(jié)點(diǎn)。在圖1中示出了 Y個(gè)存儲(chǔ)節(jié)點(diǎn)。
[0063]采用上面的查詢引擎系統(tǒng),能夠容納更加海量的鍵-值數(shù)據(jù),對(duì)高并發(fā)訪問的適應(yīng)性更強(qiáng)。其中,元數(shù)據(jù)服務(wù)器101中的全局路由表信息存儲(chǔ)有目標(biāo)KEY—存儲(chǔ)節(jié)點(diǎn)的映射關(guān)系。當(dāng)然,該映射關(guān)系可以是直接映射,也可以是間接映射,在本發(fā)明的后面實(shí)施例描述中,會(huì)給出一個(gè)間接映射的優(yōu)選實(shí)現(xiàn)。
[0064]在本發(fā)明的一個(gè)優(yōu)先實(shí)施方式中,所述代理節(jié)點(diǎn)102還可以包括:路由表同步模塊,用于將元數(shù)據(jù)服務(wù)器的全局路由表信息同步至本地;其中,所述查詢轉(zhuǎn)發(fā)模塊基于本地的全局路由表信息進(jìn)行查詢。這樣,可以避免每次查詢代理節(jié)點(diǎn)都到元數(shù)據(jù)服務(wù)器去請(qǐng)求查詢。同時(shí),由于代理節(jié)點(diǎn)可以設(shè)置多個(gè),從而可以實(shí)現(xiàn)路由查詢的并發(fā)執(zhí)行,提高對(duì)高并發(fā)訪問的適應(yīng)性。當(dāng)然,具體同步的時(shí)間不需要加以限定,例如,在代理節(jié)點(diǎn)開機(jī)時(shí)同步即可;同時(shí),也可以在固定時(shí)刻進(jìn)行同步,以防止沒有收到更新通知的情況。
[0065]在本發(fā)明的一個(gè)優(yōu)先實(shí)施方式中,所述代理節(jié)點(diǎn)102還可以包括:路由表更新模塊,用于當(dāng)收到元數(shù)據(jù)服務(wù)器的路由表更新通知時(shí),從元數(shù)據(jù)服務(wù)器獲取新的全局路由表信息。當(dāng)出現(xiàn)某個(gè)存儲(chǔ)節(jié)點(diǎn)故障或者新增存儲(chǔ)節(jié)點(diǎn)時(shí),元數(shù)據(jù)服務(wù)器上維護(hù)的全局路由表信息都會(huì)發(fā)生變化,因而,此時(shí)可以通過路由表更新模塊更新全局路由表信息。
[0066]需要說明的是,存儲(chǔ)節(jié)點(diǎn)可以采用各種存儲(chǔ)介質(zhì)。例如要求低延遲高并發(fā)的內(nèi)存哈希表存儲(chǔ)引擎,或者容量較高但響應(yīng)延遲尚可、并發(fā)能力一般的固態(tài)硬盤(SSD,SolidState Disk)存儲(chǔ)引擎,或者大容量、但響應(yīng)延遲高、并發(fā)能力差的SAS (Serial attachedSCSI)/SATA(Serial Advanced Technology Attachment)存儲(chǔ)引擎。本發(fā)明的存儲(chǔ)節(jié)點(diǎn)作為“引擎”而言,可以具有接受請(qǐng)求和返回?cái)?shù)據(jù)的執(zhí)行能力,當(dāng)然,還可以具有新增、查找、更新、刪除(CRUD)數(shù)據(jù)等的執(zhí)行能力。
[0067]在本發(fā)明的一個(gè)優(yōu)選實(shí)現(xiàn)中,建議采用多級(jí)混合存儲(chǔ)引擎。具體的,所述至少一個(gè)存儲(chǔ)節(jié)點(diǎn)包括:用于存儲(chǔ)熱點(diǎn)數(shù)據(jù)的高速存儲(chǔ)節(jié)點(diǎn),和用于存儲(chǔ)非熱點(diǎn)數(shù)據(jù)的其他類型存儲(chǔ)節(jié)點(diǎn);其中,所述高速存儲(chǔ)節(jié)點(diǎn)包括內(nèi)存節(jié)點(diǎn)或者固態(tài)硬盤節(jié)點(diǎn),所述其他類型存儲(chǔ)節(jié)點(diǎn)包括SAS/SATA硬盤節(jié)點(diǎn)。即基于不同數(shù)據(jù)的情況,采用不同的存儲(chǔ)介質(zhì)來組成多級(jí)混合存儲(chǔ)引擎,以達(dá)到最優(yōu)效果。
[0068]下面本發(fā)明給出一種具體的針對(duì)客戶端請(qǐng)求查詢、定位和轉(zhuǎn)發(fā)的實(shí)現(xiàn)。其中,所述查詢轉(zhuǎn)發(fā)模塊具體可以包括:哈希子模塊,用于基于所接收的包括目標(biāo)KEY的客戶端請(qǐng)求,通過哈希算法計(jì)算目標(biāo)KEY所在的數(shù)據(jù)區(qū)塊;定位子模塊,用于依據(jù)計(jì)算得到的目標(biāo)KEY所在的數(shù)據(jù)區(qū)塊的標(biāo)識(shí),查詢所述全局路由表信息,定位相應(yīng)的存儲(chǔ)節(jié)點(diǎn);轉(zhuǎn)發(fā)子模塊,用于將客戶端請(qǐng)求轉(zhuǎn)發(fā)至相應(yīng)存儲(chǔ)節(jié)點(diǎn)。
[0069]與采用直接映射-查表的方式相比,固定哈希的方法可以有效減少路由表的大小,提高查詢效率。具體的,通常KEY的取值范圍很大,假設(shè)KEY的組成為128位MD5哈希值,如果使用直接映射-查表方法,路由表最多需要由2~128條“KEY-存儲(chǔ)節(jié)點(diǎn)”映射關(guān)系組成,這個(gè)是實(shí)現(xiàn)中是不現(xiàn)實(shí)的。采用哈希算法計(jì)算數(shù)據(jù)區(qū)塊,再通過數(shù)據(jù)區(qū)塊定位存儲(chǔ)節(jié)點(diǎn)這種間接映射的方法,可以有效減少路由表的大小。
[0070]在某些情況下,存儲(chǔ)節(jié)點(diǎn)可能需要增加。則為了在該情形下更好的管理路由,所述元數(shù)據(jù)服務(wù)器還可以包括:數(shù)據(jù)同步模塊,用于通知所述新增的存儲(chǔ)節(jié)點(diǎn)從所選定的存儲(chǔ)節(jié)點(diǎn)中同步N個(gè)數(shù)據(jù)區(qū)塊;所述N由所述新增存儲(chǔ)節(jié)點(diǎn)的屬性參數(shù)計(jì)算得到;路由表變更模塊,用于當(dāng)所述新增的存儲(chǔ)節(jié)點(diǎn)完成數(shù)據(jù)同步后,生成新的全局路由表信息;第一更新通知模塊,用于向代理節(jié)點(diǎn)發(fā)送路由表更新通知。
[0071]在實(shí)際應(yīng)用中,也可能出現(xiàn)某個(gè)存儲(chǔ)節(jié)點(diǎn)出現(xiàn)故障失效的情況,則為了及時(shí)應(yīng)對(duì)這種情況,所述元數(shù)據(jù)服務(wù)器還包括:監(jiān)控模塊,用于監(jiān)控各存儲(chǔ)節(jié)點(diǎn)的存活狀態(tài),當(dāng)監(jiān)測(cè)到一個(gè)存儲(chǔ)節(jié)點(diǎn)失效時(shí),修改全局路由表信息;所述修改包括:針對(duì)以該失效的存儲(chǔ)節(jié)點(diǎn)作為主節(jié)點(diǎn)的數(shù)據(jù)區(qū)塊,將其主節(jié)點(diǎn)重新映射到另一個(gè)冗余節(jié)點(diǎn)上;第二更新通知模塊,用于向代理節(jié)點(diǎn)發(fā)送路由表更新通知。
[0072]參照?qǐng)D2,示出了本發(fā)明一種分布式鍵-值查詢方法實(shí)施例,具體可以包括:
[0073]步驟201、接收客戶端指向當(dāng)前代理節(jié)點(diǎn)的包括目標(biāo)KEY的請(qǐng)求;
[0074]步驟202、當(dāng)前代理節(jié)點(diǎn)通過查詢?nèi)致酚杀硇畔?,將客戶端?qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的存儲(chǔ)節(jié)點(diǎn);
[0075]步驟203、當(dāng)前代理節(jié)點(diǎn)將相應(yīng)存儲(chǔ)節(jié)點(diǎn)返回的包括目標(biāo)Value的回應(yīng)包傳送給客戶端。
[0076]在該方法中,全局路由表信息可以存儲(chǔ)在其他的服務(wù)器上,也可以直接存儲(chǔ)在代理節(jié)點(diǎn)上,例如,針對(duì)數(shù)據(jù)量不是特別海量的情況,采用少量甚至一個(gè)代理節(jié)點(diǎn)的情況,直接由代理節(jié)點(diǎn)來維護(hù)全局路由表信息也是可行的;在各個(gè)代理節(jié)點(diǎn)之間進(jìn)行同步維護(hù)即可。
[0077]當(dāng)然,優(yōu)選的,為了提高代理節(jié)點(diǎn)處理并發(fā)訪問的能力,還是采用在另外的服務(wù)器上單獨(dú)維護(hù)全局路由表信息為佳。此時(shí),當(dāng)前代理節(jié)點(diǎn)可以通過異步線程將維護(hù)在服務(wù)器上的全局路由表信息同步至本地,在本地進(jìn)行對(duì)全局路由表信息的查詢。
[0078]優(yōu)選的,在存儲(chǔ)節(jié)點(diǎn)自身或者所存儲(chǔ)位置變更時(shí),上面的方法實(shí)施例還可以包括:當(dāng)收到路由表更新通知時(shí),獲取新的全局路由表信息。
[0079]在本發(fā)明的一個(gè)優(yōu)選實(shí)現(xiàn)中,全局路由表信息并非直接存儲(chǔ)目標(biāo)KEY —存儲(chǔ)節(jié)點(diǎn)的直接映射關(guān)系,而是存儲(chǔ)了一個(gè)間接映射關(guān)系“目標(biāo)KEY所在的數(shù)據(jù)區(qū)塊一存儲(chǔ)節(jié)點(diǎn)”的,但是可以直接由目標(biāo)KEY計(jì)算得到其所在的數(shù)據(jù)區(qū)塊的標(biāo)識(shí),這樣可以更好的提高全局路由表的查詢速度。因?yàn)榇蠖鄶?shù)情況下,標(biāo)識(shí)查詢要比“目標(biāo)KEY”的查詢要快的多。
[0080]在該實(shí)現(xiàn)方案中,所述當(dāng)前代理節(jié)點(diǎn)通過查詢?nèi)致酚杀硇畔ⅲ瑢⒖蛻舳苏?qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的存儲(chǔ)節(jié)點(diǎn)的過程具體包括:基于所接收的包括目標(biāo)KEY的客戶端請(qǐng)求,通過哈希算法計(jì)算目標(biāo)KEY所在的數(shù)據(jù)區(qū)塊;依據(jù)計(jì)算得到的目標(biāo)KEY所在的數(shù)據(jù)區(qū)塊標(biāo)識(shí),查詢所述全局路由表信息,定位相應(yīng)的存儲(chǔ)節(jié)點(diǎn);將客戶端請(qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的存儲(chǔ)節(jié)點(diǎn)。
[0081]相應(yīng)的,參照?qǐng)D3,本發(fā)明還提供了一種分布式鍵-值(Key-Value)查詢引擎系統(tǒng)的故障轉(zhuǎn)移方法,專用于解決存儲(chǔ)節(jié)點(diǎn)出現(xiàn)故障的情況,包括:
[0082]步驟301、監(jiān)測(cè)各存儲(chǔ)節(jié)點(diǎn)是否存活;其中,同一個(gè)數(shù)據(jù)區(qū)塊存儲(chǔ)在一個(gè)存儲(chǔ)主節(jié)點(diǎn)和至少一個(gè)存儲(chǔ)冗余節(jié)點(diǎn)上;
[0083]步驟302、當(dāng)監(jiān)測(cè)到一個(gè)存儲(chǔ)節(jié)點(diǎn)失效時(shí),修改全局路由表信息;所述修改包括:針對(duì)以該失效的存儲(chǔ)節(jié)點(diǎn)作為主節(jié)點(diǎn)的數(shù)據(jù)區(qū)塊,將其主節(jié)點(diǎn)重新映射到另一個(gè)冗余節(jié)點(diǎn)上;
[0084]步驟303、將新的全局路由表信息更新至各代理節(jié)點(diǎn);所述代理節(jié)點(diǎn)用于響應(yīng)客戶端發(fā)出的包括目標(biāo)KEY的請(qǐng)求,基于所述全局路由表信息,將客戶端請(qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的存儲(chǔ)節(jié)點(diǎn);以及將相應(yīng)存儲(chǔ)節(jié)點(diǎn)返回的包括目標(biāo)Value的回應(yīng)包傳送給客戶端。
[0085]傳統(tǒng)的關(guān)系型數(shù)據(jù)庫,例如MySQL,若數(shù)據(jù)庫服務(wù)器出現(xiàn)故障,一般都需要數(shù)據(jù)庫管理人員將對(duì)數(shù)據(jù)庫的訪問請(qǐng)求切換到備份服務(wù)器上。而本發(fā)明可以實(shí)現(xiàn)故障的平滑轉(zhuǎn)移。
[0086]另外,參照?qǐng)D4,本發(fā)明還提供一種分布式鍵-值(Key-Value)查詢引擎系統(tǒng)的增加物理存儲(chǔ)節(jié)點(diǎn)方法,可以包括:
[0087]步驟401、接收新增存儲(chǔ)節(jié)點(diǎn)的注冊(cè)請(qǐng)求;
[0088]步驟402、依據(jù)新增存儲(chǔ)節(jié)點(diǎn)的屬性參數(shù),通知所述新增的存儲(chǔ)節(jié)點(diǎn)從所選定的存儲(chǔ)節(jié)點(diǎn)中同步N個(gè)數(shù)據(jù)區(qū)塊;所述N由所述新增存儲(chǔ)節(jié)點(diǎn)的屬性參數(shù)計(jì)算得到;
[0089]步驟403、當(dāng)所述新增的存儲(chǔ)節(jié)點(diǎn)完成數(shù)據(jù)同步后,生成新的全局路由表信息;
[0090]步驟404、將新的全局路由表信息更新至代理節(jié)點(diǎn);所述代理節(jié)點(diǎn)用于響應(yīng)客戶端發(fā)出的包括目標(biāo)KEY的請(qǐng)求,基于所述全局路由表信息,將客戶端請(qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的存儲(chǔ)節(jié)點(diǎn);以及將相應(yīng)存儲(chǔ)節(jié)點(diǎn)返回的包括目標(biāo)Value的回應(yīng)包傳送給客戶端。
[0091]當(dāng)然,為了保證對(duì)存儲(chǔ)節(jié)點(diǎn)的管理和控制,還可以增加對(duì)存儲(chǔ)節(jié)點(diǎn)的注冊(cè)審核。例如,在接收新增存儲(chǔ)節(jié)點(diǎn)的注冊(cè)請(qǐng)求之后,還包括:如果所述新增存儲(chǔ)節(jié)點(diǎn)為合法工作節(jié)點(diǎn),則進(jìn)入下一步,否則,拒絕所述新增存儲(chǔ)節(jié)點(diǎn)的加入。
[0092]需要說明的是,如果已經(jīng)將某些數(shù)據(jù)區(qū)塊轉(zhuǎn)移到新增的存儲(chǔ)節(jié)點(diǎn)上了,則原存儲(chǔ)節(jié)點(diǎn)上的這些數(shù)據(jù)區(qū)塊則可以作為其冗余備份存在,并更新在全局路由表信息中。當(dāng)然,原存儲(chǔ)節(jié)點(diǎn)上的這些數(shù)據(jù)區(qū)塊在冗余備份數(shù)量足夠的情況下,也可以作為無效數(shù)據(jù)而刪除,降低原存儲(chǔ)節(jié)點(diǎn)的負(fù)荷。
[0093]例如,在將新的全局路由表信息更新至代理節(jié)點(diǎn)之后,還包括:在所選定的存儲(chǔ)節(jié)點(diǎn)的空閑時(shí)間,逐步刪除其所存儲(chǔ)的已同步到所述新增存儲(chǔ)節(jié)點(diǎn)的所述N個(gè)數(shù)據(jù)區(qū)塊。
[0094]總之,對(duì)于圖3和圖4所提供的故障轉(zhuǎn)移方法和增加物理存儲(chǔ)節(jié)點(diǎn)方法,可以幫助本發(fā)明在分布式鍵-值(Key-Value)查詢引擎系統(tǒng)中平滑增加或者減少機(jī)器個(gè)數(shù),無須停止服務(wù)。增減機(jī)器后,數(shù)據(jù)會(huì)自動(dòng)在多臺(tái)機(jī)器之間重新達(dá)到平滑點(diǎn)(例如通過主節(jié)點(diǎn)和冗余節(jié)點(diǎn)的配置實(shí)現(xiàn)平滑)。
[0095]參照?qǐng)D5,示出了本發(fā)明一種優(yōu)選的分布式KEY-VALUE查詢引擎系統(tǒng)的結(jié)構(gòu)示意圖。
[0096]其中,示出了多個(gè)并發(fā)請(qǐng)求的客戶端??蛻舳?Client)主要是用于發(fā)起請(qǐng)求。具體的,本發(fā)明可以支持多種語言的客戶端(C/C++/Python/PHP等)。
[0097]元數(shù)據(jù)服務(wù)器(Config Server):負(fù)責(zé)維護(hù)全局路由表信息,并監(jiān)控所有存儲(chǔ)節(jié)點(diǎn)的存活狀態(tài),在存儲(chǔ)節(jié)點(diǎn)失效和新增存儲(chǔ)節(jié)點(diǎn)時(shí),元數(shù)據(jù)服務(wù)器起著關(guān)鍵的協(xié)調(diào)作用。
[0098]代理節(jié)點(diǎn)(Storage Proxy):負(fù)責(zé)響應(yīng)客戶端的請(qǐng)求和請(qǐng)求的轉(zhuǎn)發(fā)。根據(jù)元數(shù)據(jù)服務(wù)器上的路由表信息,代理節(jié)點(diǎn)可以將客戶端的請(qǐng)求轉(zhuǎn)發(fā)給下游的存儲(chǔ)節(jié)點(diǎn),并將存儲(chǔ)節(jié)點(diǎn)的回應(yīng)包遞給客戶端。
[0099]存儲(chǔ)節(jié)點(diǎn)(Storage Node):負(fù)責(zé)數(shù)據(jù)的實(shí)際存儲(chǔ),可以有多種存儲(chǔ)引擎供選擇,例如要求低延遲高并發(fā)的內(nèi)存哈希表存儲(chǔ)引擎,或者容量較高但響應(yīng)延遲尚可、并發(fā)能力一般的固態(tài)硬盤(SSD)存儲(chǔ)引擎,或者大容量、但響應(yīng)延遲高、并發(fā)能力差的SAS/SATA存儲(chǔ)引擎,或者定制化的多級(jí)混合存儲(chǔ)引擎。
[0100]在圖5中,在客戶端和存儲(chǔ)節(jié)點(diǎn)之間,包括Nginx/UDP服務(wù)器和代理節(jié)點(diǎn),當(dāng)然,Nginx/UDP服務(wù)器通常只是分布式通訊系統(tǒng)中所需要的一個(gè)傳輸設(shè)備而已,本領(lǐng)域技術(shù)人員也可以采用其他設(shè)備,甚至不采用。Nginx/UDP服務(wù)器和代理節(jié)點(diǎn)之間也不一定是一一對(duì)應(yīng)的關(guān)系。
[0101]需要說明的是,在一個(gè)實(shí)體硬件中可能存在多個(gè)代理節(jié)點(diǎn),本發(fā)明對(duì)此無需加以限制。并且在圖5中還示出了數(shù)據(jù)區(qū)塊冗余備份存儲(chǔ)的情況。
[0102]具體的,圖5給出了 4個(gè)存儲(chǔ)節(jié)點(diǎn),其中,
[0103]存儲(chǔ)節(jié)點(diǎn)a是數(shù)據(jù)區(qū)塊_0的主節(jié)點(diǎn),數(shù)據(jù)區(qū)塊_1的主節(jié)點(diǎn),數(shù)據(jù)區(qū)塊_6的冗余節(jié)點(diǎn),數(shù)據(jù)區(qū)塊_7的冗余節(jié)點(diǎn);
[0104]存儲(chǔ)節(jié)點(diǎn)b是數(shù)據(jù)區(qū)塊_0的冗余節(jié)點(diǎn),數(shù)據(jù)區(qū)塊_1的冗余節(jié)點(diǎn),數(shù)據(jù)區(qū)塊_2的主節(jié)點(diǎn),數(shù)據(jù)區(qū)塊_3的主節(jié)點(diǎn);
[0105]存儲(chǔ)節(jié)點(diǎn)c是數(shù)據(jù)區(qū)塊_2的冗余節(jié)點(diǎn),數(shù)據(jù)區(qū)塊_3的冗余節(jié)點(diǎn),數(shù)據(jù)區(qū)塊_4的主節(jié)點(diǎn),數(shù)據(jù)區(qū)塊_5的主節(jié)點(diǎn);
[0106]存儲(chǔ)節(jié)點(diǎn)d是數(shù)據(jù)區(qū)塊_4的冗余節(jié)點(diǎn),數(shù)據(jù)區(qū)塊_5的冗余節(jié)點(diǎn),數(shù)據(jù)區(qū)塊_6的主節(jié)點(diǎn),數(shù)據(jù)區(qū)塊_7的主節(jié)點(diǎn);
[0107]這樣的存儲(chǔ)方式,包括保證在均勻分布的情況下,每個(gè)數(shù)據(jù)區(qū)塊都可以存儲(chǔ)在一個(gè)主節(jié)點(diǎn)上,也同時(shí)存儲(chǔ)在一個(gè)冗余節(jié)點(diǎn)上。
[0108]S卩,各個(gè)物理存儲(chǔ)節(jié)點(diǎn)都可以即做某幾個(gè)VBucket (Virtual Bucket ;數(shù)據(jù)邏輯分區(qū)區(qū)間,即數(shù)據(jù)區(qū)塊的一種)的主節(jié)點(diǎn),又做另外幾個(gè)VBucket的冗余節(jié)點(diǎn)。存儲(chǔ)節(jié)點(diǎn)上有獨(dú)立線程,從主節(jié)點(diǎn)上同步所負(fù)責(zé)冗余VBucket的新增/修改數(shù)據(jù)。
[0109]在圖5中,元數(shù)據(jù)服務(wù)器還可以配置有一個(gè)備份的服務(wù)器。
[0110]下面針對(duì)圖5所示系統(tǒng),描述一個(gè)從客戶端發(fā)起請(qǐng)求到收到查詢引擎響應(yīng)的完整流程的示例。
[0111]I)以GET請(qǐng)求為例,客戶端向代理節(jié)點(diǎn)(Storage Proxy)發(fā)起單個(gè)KEY的GET請(qǐng)求,也可以是批量KEY的GET請(qǐng)求。
[0112]2)代理節(jié)點(diǎn)收到上游客戶端的請(qǐng)求后,通過固定哈希算法(例如MD5)計(jì)算KEY所在的VBucket序號(hào),即數(shù)據(jù)區(qū)塊區(qū)號(hào)。
[0113]3)代理節(jié)點(diǎn)通過KEY所屬的VBucket序號(hào),查找全局路由表,定位物理存儲(chǔ)節(jié)點(diǎn)(Storage Node) 0實(shí)現(xiàn)上,查找全局路由表的過程不需要每次都請(qǐng)求元數(shù)據(jù)服務(wù)器(ConfigServer),而是代理節(jié)點(diǎn)通過一個(gè)異步線程將路由信息同步到本地。
[0114]4)代理服務(wù)器通過VBucket序號(hào)定位到的是一組物理存儲(chǔ)節(jié)點(diǎn),其中第一個(gè)節(jié)點(diǎn)是主節(jié)點(diǎn),負(fù)責(zé)該VBucket的所有讀取和寫入請(qǐng)求,后續(xù)為冗余備份節(jié)點(diǎn)。代理服務(wù)器將客戶端的GET請(qǐng)求轉(zhuǎn)發(fā)給主節(jié)點(diǎn)。
[0115]5)物理存儲(chǔ)節(jié)點(diǎn)接收到GET請(qǐng)求后,從本地存儲(chǔ)引擎中取出KEY對(duì)應(yīng)的數(shù)據(jù),發(fā)送應(yīng)答包給代理節(jié)點(diǎn)。
[0116]6)代理節(jié)點(diǎn)接收到物理存儲(chǔ)節(jié)點(diǎn)的應(yīng)答包后,將應(yīng)答包返回給客戶端。
[0117]參照?qǐng)D6,示出了 KEY和VBucket之間,VBucket和物理存儲(chǔ)節(jié)點(diǎn)之間的映射關(guān)系示意圖。在KEY和VBucket之間,通過固定哈希的方式獲取映射關(guān)系,在VBucket和物理存儲(chǔ)節(jié)點(diǎn)之間,通過查表的方式獲取映射關(guān)系。
[0118]下面描述一個(gè)物理存儲(chǔ)節(jié)點(diǎn)失效的故障轉(zhuǎn)移流程的示例。
[0119]I) A節(jié)點(diǎn)失效。
[0120]2)元數(shù)據(jù)服務(wù)器上有對(duì)所有物理存儲(chǔ)節(jié)點(diǎn)存活狀態(tài)的實(shí)時(shí)監(jiān)控進(jìn)程。當(dāng)發(fā)現(xiàn)A節(jié)點(diǎn)失效時(shí),即會(huì)修改路由表,將A節(jié)點(diǎn)作為主節(jié)點(diǎn)的VBucket,其主節(jié)點(diǎn)重新映射到下一個(gè)冗余節(jié)點(diǎn)上。
[0121]3)所有代理節(jié)點(diǎn),都會(huì)從元數(shù)據(jù)服務(wù)器同步路由表信息。當(dāng)發(fā)現(xiàn)路由表變更后,后續(xù)的請(qǐng)求將依據(jù)新的路由表來做路由。
[0122]下面描述一個(gè)增加一個(gè)物理存儲(chǔ)節(jié)點(diǎn)的流程的示例。
[0123]I)新增物理存儲(chǔ)節(jié)點(diǎn)B,B會(huì)向元數(shù)據(jù)服務(wù)器發(fā)送一個(gè)注冊(cè)請(qǐng)求。
[0124]2)元數(shù)據(jù)服務(wù)器收到注冊(cè)請(qǐng)求后,確認(rèn)B是否是工作節(jié)點(diǎn),若不是合法工作節(jié)點(diǎn)則拒絕,若是則進(jìn)入下面新節(jié)點(diǎn)數(shù)據(jù)準(zhǔn)備的流程。
[0125]3)假設(shè)之前有m個(gè)物理存儲(chǔ)節(jié)點(diǎn),而VBucket總數(shù)為vt,元數(shù)據(jù)服務(wù)器計(jì)算新加入節(jié)點(diǎn)可以承載的VBucket個(gè)數(shù)為number = abs (vt/m+1)。元數(shù)據(jù)服務(wù)器發(fā)起指令通知B從當(dāng)前活躍的存儲(chǔ)節(jié)點(diǎn)中同步number個(gè)(N個(gè))VBucket。
[0126]4)新存儲(chǔ)節(jié)點(diǎn)B完成VBucket數(shù)據(jù)同步,通知元數(shù)據(jù)服務(wù)器其準(zhǔn)備完畢。
[0127]5)元數(shù)據(jù)服務(wù)器生成一張新的路由表。
[0128]6)代理節(jié)點(diǎn)收到元數(shù)據(jù)服務(wù)器的路由表更新通知,將后續(xù)請(qǐng)求依據(jù)新的路由表路由,至此,新物理節(jié)點(diǎn)B正式加到集群當(dāng)中服務(wù)。
[0129]因?yàn)樾略龃鎯?chǔ)節(jié)點(diǎn)分擔(dān)了 VBucket,增加了系統(tǒng)容量。在空閑時(shí)間,當(dāng)前活躍的存儲(chǔ)節(jié)點(diǎn)會(huì)逐步淘汰已經(jīng)不屬于自身的VBucket。
[0130]本發(fā)明實(shí)現(xiàn)了一個(gè)由多臺(tái)機(jī)器組成,可容納海量數(shù)據(jù),并可以通過增加集群機(jī)器數(shù)量擴(kuò)大集群數(shù)據(jù)規(guī)模,穩(wěn)定可靠的鍵-值存儲(chǔ)系統(tǒng),以及存儲(chǔ)之上的適應(yīng)高并發(fā)訪問的網(wǎng)絡(luò)模型。本發(fā)明具有以下的一些創(chuàng)新點(diǎn):
[0131]本發(fā)明實(shí)現(xiàn)了基于一致性哈希算法的數(shù)據(jù)分布策略。集群內(nèi)部有輕量級(jí)的元數(shù)據(jù)服務(wù)器,只存儲(chǔ)全局路由表信息,即數(shù)據(jù)區(qū)塊區(qū)號(hào)和存儲(chǔ)物理節(jié)點(diǎn)的映射關(guān)系,對(duì)鍵的訪問請(qǐng)求,會(huì)先根據(jù)哈希算法計(jì)算出數(shù)據(jù)區(qū)塊區(qū)號(hào),再通過全局路由表找到所負(fù)責(zé)的存儲(chǔ)物理節(jié)點(diǎn)。
[0132]本發(fā)明的集群內(nèi)部可以平滑增加或者減少機(jī)器個(gè)數(shù),無須停止服務(wù)。增減機(jī)器后,數(shù)據(jù)會(huì)自動(dòng)在多臺(tái)機(jī)器之間重新達(dá)到平滑點(diǎn)。
[0133]本發(fā)明支持?jǐn)?shù)據(jù)冗余存儲(chǔ)。所有數(shù)據(jù)節(jié)點(diǎn)均可以同時(shí)作為其他節(jié)點(diǎn)的冗余節(jié)點(diǎn)。
[0134]本發(fā)明的集群對(duì)外可以采用支持高并發(fā)的網(wǎng)絡(luò)訪問接口,并可以通過增加代理節(jié)點(diǎn)和存儲(chǔ)節(jié)點(diǎn)的數(shù)量提高整個(gè)集群的并發(fā)能力。代理節(jié)點(diǎn)對(duì)外通訊,代理節(jié)點(diǎn)和存儲(chǔ)節(jié)點(diǎn)之間的內(nèi)部通訊可以優(yōu)選采用基于1復(fù)用的TCP網(wǎng)絡(luò)模型。
[0135]本發(fā)明還支持存儲(chǔ)引擎的定制化??梢愿鶕?jù)應(yīng)用需求,選用內(nèi)存存儲(chǔ)引擎、或者固態(tài)硬盤存儲(chǔ)引擎、或者SAS/SATA硬盤的存儲(chǔ)引擎;或者可以選用混用的多級(jí)存儲(chǔ)引擎,將熱數(shù)據(jù)在高速設(shè)備(內(nèi)存、固態(tài)硬盤)上緩存。
[0136]總之,本發(fā)明可以實(shí)現(xiàn)自動(dòng)化的集群擴(kuò)容,通過增加集群內(nèi)部物理存儲(chǔ)節(jié)點(diǎn)的數(shù)量,內(nèi)部數(shù)據(jù)會(huì)自動(dòng)轉(zhuǎn)移到新的存儲(chǔ)節(jié)點(diǎn)上,從而達(dá)到擴(kuò)大集群的存儲(chǔ)容量和并發(fā)訪問能力的目的。本發(fā)明可以承載海量數(shù)據(jù)的存儲(chǔ)和每日千億級(jí)別的高并發(fā)訪問。由其適用于木馬云查殺服務(wù)、網(wǎng)址云查殺服務(wù)、云安全中心數(shù)據(jù)索引中心等相關(guān)安全產(chǎn)品和后臺(tái)應(yīng)用服務(wù)中。
[0137]參照?qǐng)D7示出了本發(fā)明一種元數(shù)據(jù)服務(wù)器實(shí)施例,作為本發(fā)明方案中的關(guān)鍵部件,其可以包括:
[0138]存儲(chǔ)模塊701,用于存儲(chǔ)反映目標(biāo)KEY和存儲(chǔ)節(jié)點(diǎn)映射關(guān)系的全局路由表信息;
[0139]全局路由表信息同步模塊702,用于將所述全局路由表信息同步到至少一個(gè)代理節(jié)點(diǎn);所述代理節(jié)點(diǎn)用于響應(yīng)客戶端發(fā)出的包括目標(biāo)KEY的請(qǐng)求,基于所述全局路由表信息,將客戶端請(qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的存儲(chǔ)節(jié)點(diǎn);以及將相應(yīng)存儲(chǔ)節(jié)點(diǎn)返回的包括目標(biāo)Value的回應(yīng)包傳送給客戶端。
[0140]在優(yōu)選實(shí)現(xiàn)中,元數(shù)據(jù)服務(wù)器還可以包括:數(shù)據(jù)同步模塊703,用于依據(jù)新增存儲(chǔ)節(jié)點(diǎn)的屬性參數(shù),通知所述新增的存儲(chǔ)節(jié)點(diǎn)從所選定的存儲(chǔ)節(jié)點(diǎn)中同步N個(gè)數(shù)據(jù)區(qū)塊;所述N由所述新增存儲(chǔ)節(jié)點(diǎn)的屬性參數(shù)計(jì)算得到;路由表變更模塊704,用于當(dāng)所述新增的存儲(chǔ)節(jié)點(diǎn)完成數(shù)據(jù)同步后,生成新的全局路由表信息;第一更新通知模塊705,用于向代理節(jié)點(diǎn)發(fā)送路由表更新通知。
[0141]對(duì)于具有故障轉(zhuǎn)移功能的元數(shù)據(jù)服務(wù)器而言,其還可以包括:監(jiān)控模塊706,用于監(jiān)控各存儲(chǔ)節(jié)點(diǎn)的存活狀態(tài),當(dāng)監(jiān)測(cè)到一個(gè)存儲(chǔ)節(jié)點(diǎn)失效時(shí),修改全局路由表信息;所述修改包括:針對(duì)以該失效的存儲(chǔ)節(jié)點(diǎn)作為主節(jié)點(diǎn)的數(shù)據(jù)區(qū)塊,將其主節(jié)點(diǎn)重新映射到另一個(gè)冗余節(jié)點(diǎn)上;第二更新通知模塊707,用于向代理節(jié)點(diǎn)發(fā)送路由表更新通知。
[0142]參照?qǐng)D8,示出了本發(fā)明一種代理節(jié)點(diǎn)實(shí)施例,作為本發(fā)明方案中的關(guān)鍵部件,其可以包括:
[0143]查詢轉(zhuǎn)發(fā)模塊801,用于響應(yīng)客戶端發(fā)出的包括目標(biāo)KEY的請(qǐng)求,通過查詢?nèi)致酚杀硇畔?,將客戶端?qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的存儲(chǔ)節(jié)點(diǎn);
[0144]數(shù)據(jù)轉(zhuǎn)發(fā)模塊802,用于將相應(yīng)存儲(chǔ)節(jié)點(diǎn)返回的包括目標(biāo)Value的回應(yīng)包傳送給客戶端。
[0145]在優(yōu)選實(shí)現(xiàn)中,代理節(jié)點(diǎn)還可以包括:路由表同步模塊803,用于將服務(wù)器上的全局路由表信息同步至本地;其中,所述查詢轉(zhuǎn)發(fā)模塊基于本地的全局路由表信息進(jìn)行查詢。
[0146]在優(yōu)選實(shí)現(xiàn)中,代理節(jié)點(diǎn)還可以包括:路由表更新模塊804,用于當(dāng)收到路由表更新通知時(shí),獲取新的全局路由表信息。當(dāng)然,在具體實(shí)現(xiàn)中,也可以直接將路由表更新模塊804的功能集成到路由表同步模塊803中。
[0147]在本發(fā)明的一個(gè)優(yōu)選實(shí)現(xiàn)方案中,所述查詢轉(zhuǎn)發(fā)模塊801具體可以包括:
[0148]哈希子模塊8011,用于基于所接收的包括目標(biāo)KEY的客戶端請(qǐng)求,通過哈希算法計(jì)算目標(biāo)KEY所在的數(shù)據(jù)區(qū)塊;
[0149]定位子模塊8012,用于依據(jù)計(jì)算得到的目標(biāo)KEY所在的數(shù)據(jù)區(qū)塊標(biāo)識(shí),查詢所述全局路由表信息,定位相應(yīng)的存儲(chǔ)節(jié)點(diǎn);
[0150]轉(zhuǎn)發(fā)子模塊8013,用于將客戶端請(qǐng)求轉(zhuǎn)發(fā)至相應(yīng)存儲(chǔ)節(jié)點(diǎn)。
[0151]本說明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見即可。對(duì)于裝置實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實(shí)施例的部分說明即可。
[0152]以上對(duì)本申請(qǐng)所提供的一種分布式鍵-值查詢引擎系統(tǒng)、分布式鍵-值查詢方法、代理節(jié)點(diǎn)、元數(shù)據(jù)服務(wù)器、增加物理存儲(chǔ)節(jié)點(diǎn)的方法和一種故障轉(zhuǎn)移方法進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本申請(qǐng)的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本申請(qǐng)的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請(qǐng)的思想,在【具體實(shí)施方式】及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對(duì)本申請(qǐng)的限制。
【權(quán)利要求】
1.一種分布式信息查詢方法,用于查詢存儲(chǔ)節(jié)點(diǎn)中存儲(chǔ)的信息,該方法包括: 接收客戶端發(fā)送的包括目標(biāo)KEY的請(qǐng)求; 基于所接收的包括目標(biāo)KEY的請(qǐng)求,通過哈希算法計(jì)算目標(biāo)KEY所在的數(shù)據(jù)區(qū)塊; 依據(jù)計(jì)算得到的目標(biāo)KEY所在的數(shù)據(jù)區(qū)塊標(biāo)識(shí),查詢所述全局路由表信息以定位相應(yīng)的存儲(chǔ)節(jié)點(diǎn),其中,所述全局路由表信息包括目標(biāo)KEY所在的數(shù)據(jù)區(qū)塊到存儲(chǔ)節(jié)點(diǎn)的映射關(guān)系; 將客戶端請(qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的存儲(chǔ)節(jié)點(diǎn); 將相應(yīng)存儲(chǔ)節(jié)點(diǎn)返回的包括目 標(biāo)Value的回應(yīng)包傳送給客戶端。
2.如權(quán)利要求1所述的方法,還包括: 監(jiān)控各存儲(chǔ)節(jié)點(diǎn)的存活狀態(tài); 當(dāng)監(jiān)測(cè)到一個(gè)存儲(chǔ)節(jié)點(diǎn)失效時(shí),修改全局路由表信息。
3.如權(quán)利要求2所述的方法,其中,所述修改包括:更新所述全局路由表信息中存儲(chǔ)的目標(biāo)KEY所在的數(shù)據(jù)區(qū)塊到存儲(chǔ)節(jié)點(diǎn)的映射關(guān)系,針對(duì)以該失效的存儲(chǔ)節(jié)點(diǎn)作為主節(jié)點(diǎn)的數(shù)據(jù)區(qū)塊,將其主節(jié)點(diǎn)重新映射到另一個(gè)冗余節(jié)點(diǎn)上。
4.如權(quán)利要求1至3中任一項(xiàng)所述的方法,還包括:通過異步線程將維護(hù)在服務(wù)器上的全局路由表信息同步至本地,在本地進(jìn)行對(duì)全局路由表信息的查詢。
5.如權(quán)利要求1至4中任一項(xiàng)所述的方法,還包括: 當(dāng)收到路由表更新通知時(shí),獲取新的全局路由表信息。
6.如權(quán)利要求1至5中任一項(xiàng)所述的方法,還包括: 接收新增存儲(chǔ)節(jié)點(diǎn)的注冊(cè)請(qǐng)求; 依據(jù)新增存儲(chǔ)節(jié)點(diǎn)的屬性參數(shù),通知所述新增的存儲(chǔ)節(jié)點(diǎn)從所選定的存儲(chǔ)節(jié)點(diǎn)中同步N個(gè)數(shù)據(jù)區(qū)塊,其中,所述N由所述新增存儲(chǔ)節(jié)點(diǎn)的屬性參數(shù)計(jì)算得到; 當(dāng)所述新增的存儲(chǔ)節(jié)點(diǎn)完成數(shù)據(jù)同步后,生成新的全局路由表信息。
7.如權(quán)利要求6所述的方法,其中,在接收新增存儲(chǔ)節(jié)點(diǎn)的注冊(cè)請(qǐng)求之后,還包括: 如果所述新增存儲(chǔ)節(jié)點(diǎn)為非法工作節(jié)點(diǎn),拒絕所述新增存儲(chǔ)節(jié)點(diǎn)的加入。
8.如權(quán)利要求6所述的方法,還包括: 在所選定的存儲(chǔ)節(jié)點(diǎn)的空閑時(shí)間,逐步刪除其所存儲(chǔ)的已同步到所述新增存儲(chǔ)節(jié)點(diǎn)的所述N個(gè)數(shù)據(jù)區(qū)塊。
9.一種分布式查詢引擎系統(tǒng),其包括: 元數(shù)據(jù)服務(wù)器,用于維護(hù)指向存儲(chǔ)節(jié)點(diǎn)的全局路由表信息; 至少一個(gè)代理節(jié)點(diǎn),包括: 查詢轉(zhuǎn)發(fā)模塊,用于響應(yīng)客戶端發(fā)出的包括目標(biāo)KEY的請(qǐng)求,基于所述全局路由表信息,將客戶端請(qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的存儲(chǔ)節(jié)點(diǎn); 數(shù)據(jù)轉(zhuǎn)發(fā)模塊,用于將相應(yīng)存儲(chǔ)節(jié)點(diǎn)返回的包括目標(biāo)Value的回應(yīng)包傳送給客戶端;至少一個(gè)存儲(chǔ)節(jié)點(diǎn),用于基于接收到的客戶端請(qǐng)求,從本地存儲(chǔ)中獲取所需數(shù)據(jù),并發(fā)送包括目標(biāo)Value的回應(yīng)包給代理節(jié)點(diǎn); 其中,所述元數(shù)據(jù)服務(wù)器包括: 數(shù)據(jù)同步模塊,用于通知所述新增的存儲(chǔ)節(jié)點(diǎn)從所選定的存儲(chǔ)節(jié)點(diǎn)中同步N個(gè)數(shù)據(jù)區(qū)塊,所述N由所述新增存儲(chǔ)節(jié)點(diǎn)的屬性參數(shù)計(jì)算得到;路由表變更模塊,用于當(dāng)所述新增的存儲(chǔ)節(jié)點(diǎn)完成數(shù)據(jù)同步后,生成新的全局路由表信息; 第一更新通知模塊,用于向代理節(jié)點(diǎn)發(fā)送路由表更新通知。
10.根據(jù)權(quán)利要求9所述的系統(tǒng),其中,所述代理節(jié)點(diǎn)還包括: 路由表同步模塊,用于將元數(shù)據(jù)服務(wù)器的全局路由表信息同步至本地; 其中,所述查詢轉(zhuǎn)發(fā)模炔基于本地的全局路由表信息進(jìn)行查詢。
11.根據(jù)權(quán)利要求10所述的系統(tǒng),其中,所述代理節(jié)點(diǎn)還包括: 路由表更新模塊,用于當(dāng)收到元數(shù)據(jù)服務(wù)器的路由表更新通知時(shí),從元數(shù)據(jù)服務(wù)器獲取新的全局路由表信息。
12.根據(jù)權(quán)利要求9所述的系統(tǒng),其中,所述查詢轉(zhuǎn)發(fā)模塊具體包括: 哈希子模塊,用于基于所接收的包括目標(biāo)KEY的客戶端請(qǐng)求,通過哈希算法計(jì)算目標(biāo)KEY所在的數(shù)據(jù)區(qū)塊; 定位子模塊,用于依據(jù)計(jì)算得到的目標(biāo)KEY所在的數(shù)據(jù)區(qū)塊的標(biāo)識(shí),查詢所述全局路由表信息,定位相應(yīng)的存儲(chǔ)節(jié)點(diǎn); 轉(zhuǎn)發(fā)子模塊,用于將客戶端請(qǐng)求轉(zhuǎn)發(fā)至相應(yīng)存儲(chǔ)節(jié)點(diǎn)。
13.根據(jù)權(quán)利要求9至12中任一項(xiàng)所述的系統(tǒng),其中,所述元數(shù)據(jù)服務(wù)器還包括: 監(jiān)控模塊,用于監(jiān)控各存儲(chǔ)節(jié)點(diǎn)的存活狀態(tài),當(dāng)監(jiān)測(cè)到一個(gè)存儲(chǔ)節(jié)點(diǎn)失效時(shí),修改全局路由表信息;所述修改包括:針對(duì)以該失效的存儲(chǔ)節(jié)點(diǎn)作為主節(jié)點(diǎn)的數(shù)據(jù)區(qū)塊,將其主節(jié)點(diǎn)重新映射到另一個(gè)冗余節(jié)點(diǎn)上; 第二更新通知模塊,用于向代理節(jié)點(diǎn)發(fā)送路由表更新通知。
14.根據(jù)權(quán)利要求9至13中任一項(xiàng)所述的系統(tǒng),其中,所述至少一個(gè)存儲(chǔ)節(jié)點(diǎn)包括: 用于存儲(chǔ)熱點(diǎn)數(shù)據(jù)的高速存儲(chǔ)節(jié)點(diǎn),和用于存儲(chǔ)非熱點(diǎn)數(shù)據(jù)的其他類型存儲(chǔ)節(jié)點(diǎn); 其中,所述高速存儲(chǔ)節(jié)點(diǎn)包括內(nèi)存節(jié)點(diǎn)或者固態(tài)硬盤節(jié)點(diǎn),所述其他類型存儲(chǔ)節(jié)點(diǎn)包括SAS/SATA硬盤節(jié)點(diǎn)。
15.一種元數(shù)據(jù)服務(wù)器,其包括: 存儲(chǔ)模塊,用于存儲(chǔ)反映目標(biāo)KEY和存儲(chǔ)節(jié)點(diǎn)映射關(guān)系的全局路由表信息; 全局路由表信息同步模塊,用于將所述全局路由表信息同步到至少一個(gè)代理節(jié)點(diǎn),其中,所述代理節(jié)點(diǎn)用于響應(yīng)客戶端發(fā)出的包括目標(biāo)KEY的請(qǐng)求,基于所述全局路由表信息,將客戶端請(qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的存儲(chǔ)節(jié)點(diǎn),以及將相應(yīng)存儲(chǔ)節(jié)點(diǎn)返回的包括目標(biāo)Value的回應(yīng)包傳送給客戶端; 數(shù)據(jù)同步模塊,用于依據(jù)新增存儲(chǔ)節(jié)點(diǎn)的屬性參數(shù),通知所述新增的存儲(chǔ)節(jié)點(diǎn)從所選定的存儲(chǔ)節(jié)點(diǎn)中同步N個(gè)數(shù)據(jù)區(qū)塊;所述N由所述新增存儲(chǔ)節(jié)點(diǎn)的屬性參數(shù)計(jì)算得到; 路由表變更模塊,用于當(dāng)所述新增的存儲(chǔ)節(jié)點(diǎn)完成數(shù)據(jù)同步后,生成新的全局路由表信息。
16.根據(jù)權(quán)利要求15所述的元數(shù)據(jù)服務(wù)器,還包括: 監(jiān)控模塊,用于監(jiān)控各存儲(chǔ)節(jié)點(diǎn)的存活狀態(tài),當(dāng)監(jiān)測(cè)到一個(gè)存儲(chǔ)節(jié)點(diǎn)失效時(shí),修改全局路由表信息;所述修改包括:針對(duì)以該失效的存儲(chǔ)節(jié)點(diǎn)作為主節(jié)點(diǎn)的數(shù)據(jù)區(qū)塊,將其主節(jié)點(diǎn)重新映射到另一個(gè)冗余節(jié)點(diǎn)上。
17.根據(jù)權(quán)利要求15或16所述的元數(shù)據(jù)服務(wù)器,還包括:第一更新通知模塊,用于向代理節(jié)點(diǎn)發(fā)送路由表更新通知。
【文檔編號(hào)】G06F17/30GK104050249SQ201410256090
【公開日】2014年9月17日 申請(qǐng)日期:2011年12月31日 優(yōu)先權(quán)日:2011年12月31日
【發(fā)明者】楊康, 謝冉 申請(qǐng)人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司