1.一種zedis分布式緩存方法,其特征在于:提供zookeeper核心處理器、服務(wù)器集群監(jiān)控模塊、節(jié)點(diǎn)數(shù)據(jù)處理模塊、數(shù)據(jù)恢復(fù)模塊、客戶端、服務(wù)端及數(shù)據(jù)存儲(chǔ)服務(wù)器,所述zookeeper核心處理器包括服務(wù)器判斷模塊及服務(wù)器顯示模塊,所述zedis分布式緩存方法包括以下步驟:
S1:所述服務(wù)器判斷模塊讀取所述服務(wù)器集群監(jiān)控模塊的redis服務(wù)器集群所需的完整信息;
S2:所述服務(wù)器判斷模塊將讀取到的信息發(fā)送給所述客戶端,所述客戶端將讀取redis服務(wù)器集群所需的完整信息,從每一個(gè)物理節(jié)點(diǎn)的完整信息抽取相對(duì)于其他物理節(jié)點(diǎn)唯一的信息,其中,所述信息包括ip地址與端口號(hào);
S3:所述客戶端通過接收到的信息生成固定的多個(gè)key,通過負(fù)載均衡核心類ConsistentHash算法生成對(duì)應(yīng)多個(gè)hash碼,同一個(gè)信息生成的哈希碼全都映射到同一個(gè)物理節(jié)點(diǎn),用哈希碼到物理節(jié)點(diǎn)的映射填充ConsistentHash的核心變量映射表形成哈希環(huán);
S4:所述哈希環(huán)與所述數(shù)據(jù)存儲(chǔ)服務(wù)器連接完成數(shù)據(jù)備份與故障規(guī)避的讀寫過程;
S5:所述故障轉(zhuǎn)移處理模塊、服務(wù)器集群監(jiān)控模塊及zookeeper核心處理器通過數(shù)據(jù)備份、規(guī)避故障節(jié)點(diǎn)和數(shù)據(jù)恢復(fù)實(shí)現(xiàn)故障轉(zhuǎn)移;
所述步驟“數(shù)據(jù)備份與故障規(guī)避的讀過程”的實(shí)現(xiàn)步驟包括:
S401:所述讀寫代理模塊根據(jù)key參數(shù),通過哈希環(huán)找出主節(jié)點(diǎn),并以此找到備節(jié)點(diǎn);
S402:判斷主節(jié)點(diǎn)是否可用,如果主節(jié)點(diǎn)可用,則執(zhí)行步驟S403,如果主節(jié)點(diǎn)不可用但備節(jié)點(diǎn)可用,執(zhí)行步驟S404,如果主節(jié)點(diǎn)及備節(jié)點(diǎn)均不可用;
S403:往主節(jié)點(diǎn)主數(shù)據(jù)庫(kù)寫并往備節(jié)點(diǎn)的主數(shù)據(jù)庫(kù)寫入;
S404:往備節(jié)點(diǎn)的備用數(shù)據(jù)庫(kù)和臨時(shí)數(shù)據(jù)庫(kù)寫入;
S405:寫入其他可用節(jié)點(diǎn)的數(shù)據(jù)庫(kù);
所述步驟“數(shù)據(jù)備份與故障規(guī)避的寫過程”的實(shí)現(xiàn)步驟包括:
S406:所述讀寫代理模塊根據(jù)key參數(shù)獲取主節(jié)點(diǎn)及備份節(jié)點(diǎn);
S407:判斷主節(jié)點(diǎn)是否可用,如果主節(jié)點(diǎn)可用,執(zhí)行步驟S408,如果主節(jié)點(diǎn)不可用但備節(jié)點(diǎn)可用,執(zhí)行步驟S409,如果主節(jié)點(diǎn)及備節(jié)點(diǎn)均不可用,執(zhí)行步驟S410;
S408:從主節(jié)點(diǎn)讀??;
S409:從備節(jié)點(diǎn)讀取;
S410:從其他節(jié)點(diǎn)讀取;
其中,所述數(shù)據(jù)存儲(chǔ)服務(wù)器的數(shù)據(jù)存儲(chǔ)方式如下表所示:
其中,所述主節(jié)點(diǎn)為通過負(fù)載均衡核心類ConsistentHash算法找到的最近的物理節(jié)點(diǎn),備節(jié)點(diǎn)是主節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)。
2.根據(jù)權(quán)利要求1所述的zedis分布式緩存方法,其特征在于:所述客戶端包括負(fù)載均衡處理模塊,所述步驟S3中的“負(fù)載均衡核心類ConsistentHash算法”包括:
所述負(fù)載均衡處理模塊通過MurMurHash2算法接收參數(shù)key,生成并返回哈希碼;
所述負(fù)載均衡處理模塊通過void_addNode算法接收節(jié)點(diǎn)S和一個(gè)原始參數(shù)key,用參數(shù)key生成多個(gè)哈希碼,并將所有的哈希碼全部映射到所述節(jié)點(diǎn)S,將映射存入TreeMap;
所述負(fù)載均衡處理模塊通過S_getClosestNode算法接收參數(shù)key,根據(jù)key生成hashCode,用TreeMap的tailMap算法,找到最近的節(jié)點(diǎn)并返回。
3.根據(jù)權(quán)利要求1所述的zedis分布式緩存方法,其特征在于:所述服務(wù)器集群監(jiān)控模塊包括連接redis服務(wù)器所需的信息、表明節(jié)點(diǎn)可用性狀態(tài)的表量及檢測(cè)redis服務(wù)器是否可用的策略。
4.根據(jù)權(quán)利要求3所述的zedis分布式緩存方法,其特征在于:所述檢測(cè)redis服務(wù)器是否可用的策略包括:初始化所述服務(wù)器集群監(jiān)控模塊并根據(jù)信息與redis服務(wù)器建立連接;
通過客戶端的ping方法檢測(cè)節(jié)點(diǎn)是否存活,再通過客戶端的set方法,檢查是否能正常存入數(shù)據(jù),如果檢查均通過則返回服務(wù)器可用,否則返回服務(wù)器不可用;
連續(xù)N次調(diào)用pingOnce(),記錄調(diào)用成功或失敗比率并返回;
所述服務(wù)器集群監(jiān)控模塊先調(diào)用一次pingOnce(),若返回結(jié)果與所述服務(wù)器集群監(jiān)控模塊一致,則redis服務(wù)器可用性狀態(tài)無變化,并返回檢測(cè)結(jié)果,若首次檢測(cè)結(jié)果與所述服務(wù)器集群監(jiān)控模塊不一致,則調(diào)用checkStateRatio進(jìn)行判斷,以checkStateRatio返回結(jié)果為準(zhǔn),返回檢測(cè)結(jié)果。
5.根據(jù)權(quán)利要求3所述的zedis分布式緩存方法,其特征在于:所述哈希環(huán)包括Redis節(jié)點(diǎn),Redis節(jié)點(diǎn)標(biāo)號(hào)到Redis節(jié)點(diǎn)本身的映射表、集群的最大標(biāo)號(hào)和最小標(biāo)號(hào)。
6.根據(jù)權(quán)利要求3所述的zedis分布式緩存方法,其特征在于:還包括步驟:所述服務(wù)器集群監(jiān)控模塊對(duì)集群服務(wù)器進(jìn)行監(jiān)控,并將監(jiān)控得出的結(jié)果發(fā)送給zookeeper核心處理器,該步驟的實(shí)現(xiàn)步驟包括:
讀取zedis集群配置,建立物理節(jié)點(diǎn)對(duì)應(yīng)的檢測(cè)任務(wù),把檢測(cè)出的可用性變化情況通過發(fā)送給客戶端;
初始化集群,構(gòu)造服務(wù)器集群監(jiān)控模塊傳入客戶端的集群信息,所述服務(wù)器集群監(jiān)控模塊根據(jù)固定的配置規(guī)范讀取所述集群信息并初始化;
所述服務(wù)器集群監(jiān)控模塊對(duì)每個(gè)讀取到的不同的物理節(jié)點(diǎn)構(gòu)造一個(gè)線程內(nèi)部類RedisPing任務(wù),調(diào)用所述“檢測(cè)redis服務(wù)器是否可用”的策略的ping方法,檢測(cè)物理節(jié)點(diǎn)的可用性;
根據(jù)監(jiān)控結(jié)果,判斷物理節(jié)點(diǎn)是否出現(xiàn)可用性變化,若物理節(jié)點(diǎn)出現(xiàn)可用性變化,從可用變?yōu)椴豢捎?,修改所述zookeeper核心處理器配置并通知客戶端;若物理節(jié)點(diǎn)出現(xiàn)不可用性變化,從不可用變?yōu)榭捎茫葦?shù)據(jù)恢復(fù),然后再修改zookeeper核心處理器配置并通知所述客戶端。
7.根據(jù)權(quán)利要求1所述的zedis分布式緩存方法,其特征在于:所述步驟S5的實(shí)現(xiàn)步驟包括:
所述故障轉(zhuǎn)移處理模塊根據(jù)key參數(shù)生成哈希碼并找到主節(jié)點(diǎn),然后找到主節(jié)點(diǎn)的備節(jié)點(diǎn),對(duì)主備節(jié)點(diǎn)進(jìn)行相同的寫操作,主節(jié)點(diǎn)=n,則備節(jié)點(diǎn)=n+1,寫操作在主節(jié)點(diǎn)主數(shù)據(jù)庫(kù)空間和備節(jié)點(diǎn)的備數(shù)據(jù)庫(kù)空間一起進(jìn)行。
8.根據(jù)權(quán)利要求1所述的zedis分布式緩存方法,其特征在于:所述步驟S5的“規(guī)避故障節(jié)點(diǎn)步驟”的實(shí)現(xiàn)步驟包括:
所述故障轉(zhuǎn)移處理模塊根據(jù)java代理攔截接口調(diào)用的數(shù)據(jù),并通過key參數(shù)找到主節(jié)點(diǎn),判斷主節(jié)點(diǎn)是否可用,如果可用則在主節(jié)點(diǎn)上與數(shù)據(jù)存儲(chǔ)服務(wù)器進(jìn)行數(shù)據(jù)交換的工作;如果主節(jié)點(diǎn)不可用,則在備節(jié)點(diǎn)與數(shù)據(jù)存儲(chǔ)服務(wù)器進(jìn)行數(shù)據(jù)交換的工作;如果主節(jié)點(diǎn)和備節(jié)點(diǎn)均不可用,則在剩余的物理節(jié)點(diǎn)中,尋找可用的節(jié)點(diǎn)與數(shù)據(jù)存儲(chǔ)服務(wù)器進(jìn)行數(shù)據(jù)交換的工作。
9.根據(jù)權(quán)利要求1所述的zedis分布式緩存方法,其特征在于:所述步驟S5的“數(shù)據(jù)恢復(fù)”的實(shí)現(xiàn)步驟包括:
判斷故障節(jié)點(diǎn)規(guī)避是否已經(jīng)完成,如果已經(jīng)完成,則進(jìn)行數(shù)據(jù)恢復(fù),否則續(xù)費(fèi)進(jìn)行故障節(jié)點(diǎn)規(guī)避;
找出恢復(fù)正常的節(jié)點(diǎn)相對(duì)的主節(jié)點(diǎn)和備節(jié)點(diǎn),假設(shè)主數(shù)據(jù)庫(kù)=n,恢復(fù)節(jié)點(diǎn)=n+2,恢復(fù)節(jié)點(diǎn)為目標(biāo)節(jié)點(diǎn),主節(jié)點(diǎn)=n+1,備節(jié)點(diǎn)=n+3;從備節(jié)點(diǎn)臨時(shí)數(shù)據(jù)庫(kù)空間恢復(fù)數(shù)據(jù)到目標(biāo)節(jié)點(diǎn)主數(shù)據(jù)庫(kù)空間,然后清空備節(jié)點(diǎn)臨時(shí)數(shù)據(jù)庫(kù)空間,從主節(jié)點(diǎn)主數(shù)據(jù)庫(kù)空間恢復(fù)數(shù)據(jù)到目標(biāo)節(jié)點(diǎn)備用數(shù)據(jù)庫(kù)空間。