本發(fā)明涉及存儲(chǔ)技術(shù)領(lǐng)域,特別是涉及一種多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡的方法及裝置。
背景技術(shù):
隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展和數(shù)字化時(shí)代的到來,在日常生活、科研研究以及公司業(yè)務(wù)中越來越多的開始使用數(shù)字化和網(wǎng)絡(luò)化技術(shù),使得數(shù)據(jù)呈現(xiàn)爆炸式增長(zhǎng),而數(shù)據(jù)的產(chǎn)生往往是需要承載或記錄的,這就迫使存儲(chǔ)技術(shù)快速發(fā)展以容納快速增長(zhǎng)的數(shù)據(jù),分布式存儲(chǔ)系統(tǒng)應(yīng)用而生。
分布式存儲(chǔ)系統(tǒng),是將數(shù)據(jù)分散存儲(chǔ)在多臺(tái)獨(dú)立的設(shè)備上。傳統(tǒng)的網(wǎng)絡(luò)存儲(chǔ)系統(tǒng)采用集中的存儲(chǔ)服務(wù)器存儲(chǔ)所有數(shù)據(jù),存儲(chǔ)服務(wù)器成為系統(tǒng)性能的瓶頸,也是可靠性和安全性的焦點(diǎn),不能滿足大規(guī)模存儲(chǔ)應(yīng)用的需要。分布式網(wǎng)絡(luò)存儲(chǔ)系統(tǒng)采用可擴(kuò)展的系統(tǒng)結(jié)構(gòu),利用多臺(tái)存儲(chǔ)服務(wù)器分擔(dān)存儲(chǔ)負(fù)荷,利用位置服務(wù)器定位存儲(chǔ)信息,它不但提高了系統(tǒng)的可靠性、可用性和存取效率,還易于擴(kuò)展。由于其良好的擴(kuò)展性、較高的可靠性和高的性價(jià)比,受到越來越多的公司和科研機(jī)構(gòu)尤其是互聯(lián)網(wǎng)領(lǐng)域的公司的青睞。
在分布式存儲(chǔ)系統(tǒng)中由于有多個(gè)存儲(chǔ)節(jié)點(diǎn)可以儲(chǔ)存客戶數(shù)據(jù),這就引發(fā)一個(gè)問題即數(shù)據(jù)存在哪個(gè)節(jié)點(diǎn)或哪些節(jié)點(diǎn),并且保證在讀取的時(shí)候可以快速找到存儲(chǔ)的節(jié)點(diǎn),這就需要在存儲(chǔ)和讀取時(shí)滿足單調(diào)性、分散性要求。
現(xiàn)有技術(shù)中,往往通過一致性的哈希算法解決上述問題。所述哈希算法就是單向散列算法,它把某個(gè)較大的集合P映射到另一個(gè)較小的集合Q中,假如這個(gè)算法叫H,那么就有Q=H(P)。對(duì)于P中任何一個(gè)值p都有唯一確定的q與之對(duì)應(yīng),但是一個(gè)q可以對(duì)應(yīng)多個(gè)p。應(yīng)用在分布式存儲(chǔ)領(lǐng)域,如圖1所示,哈希算法具體為首先計(jì)算出各存儲(chǔ)節(jié)點(diǎn)的哈希值,并將其配置到0~232-1的圓上;然后采用同樣的方法求出存儲(chǔ)數(shù)據(jù)的鍵的哈希值,并映射到相同的圓上;然后從數(shù)據(jù)映射到的位置開始順時(shí)針查找,將數(shù)據(jù)保存到找到的第一個(gè)存儲(chǔ)節(jié)點(diǎn)上,如果超過232仍然找不到存儲(chǔ)節(jié)點(diǎn),就會(huì)保存到第一個(gè)存儲(chǔ)節(jié)點(diǎn)上。
一致性哈希算法盡管解決了多個(gè)存儲(chǔ)節(jié)點(diǎn)間數(shù)據(jù)分布問題,但是由于每個(gè)節(jié)點(diǎn)的性能或容量可能是不同的,而一致性哈希算法平等無(wú)差別的對(duì)待環(huán)上的每一個(gè)存儲(chǔ)節(jié)點(diǎn),這就導(dǎo)致對(duì)于性能高的節(jié)點(diǎn)沒有很好的有效利用,而性能低的節(jié)點(diǎn)可能會(huì)由于存儲(chǔ)太多導(dǎo)致運(yùn)行太慢甚至崩潰。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例的目的是提供一種多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡的方法及裝置,根據(jù)節(jié)點(diǎn)的性能和容量充分有效的利用各存儲(chǔ)節(jié)點(diǎn),有效的解決了容量和性能異構(gòu)的多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡的問題。
為解決上述技術(shù)問題,本發(fā)明實(shí)施例提供以下技術(shù)方案:
本發(fā)明實(shí)施例一方面提供了一種多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡的方法,包括:
獲取存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)容量信息和性能信息;
根據(jù)所述存儲(chǔ)容量信息和所述性能信息對(duì)所述存儲(chǔ)節(jié)點(diǎn)進(jìn)行量化,得到量化值;
根據(jù)所述量化值確定所述存儲(chǔ)節(jié)點(diǎn)分配基本節(jié)點(diǎn)的個(gè)數(shù),所述基本節(jié)點(diǎn)的個(gè)數(shù)隨著所述量化值的升高而增多;
將所述存儲(chǔ)節(jié)點(diǎn)加入集群,接收讀寫請(qǐng)求;
根據(jù)一致性哈希算法從所述存儲(chǔ)節(jié)點(diǎn)進(jìn)行讀寫數(shù)據(jù)。
優(yōu)選的,所述將所述存儲(chǔ)節(jié)點(diǎn)加入集群具體為:
從當(dāng)前基本節(jié)點(diǎn)Ni的映射位置查找下一個(gè)基本節(jié)點(diǎn)N1;
判斷所述基本節(jié)點(diǎn)N1是否屬于所述當(dāng)前基本節(jié)點(diǎn)Ni對(duì)應(yīng)的所述存儲(chǔ)節(jié)點(diǎn);
當(dāng)判定所述基本節(jié)點(diǎn)N1不屬于所述存儲(chǔ)節(jié)點(diǎn)時(shí),將所述當(dāng)前基本節(jié)點(diǎn)Ni與所述基本節(jié)點(diǎn)N1的映射關(guān)系移動(dòng)到與所述當(dāng)前基本節(jié)點(diǎn)Ni對(duì)應(yīng)的所述存儲(chǔ)節(jié)點(diǎn);
當(dāng)判定所述基本節(jié)點(diǎn)N1屬于所述存儲(chǔ)節(jié)點(diǎn)時(shí),繼續(xù)執(zhí)行下述步驟;
繼續(xù)查找下一個(gè)基本節(jié)點(diǎn)N2,執(zhí)行相同的判斷操作;
當(dāng)所述存儲(chǔ)節(jié)點(diǎn)對(duì)應(yīng)的所述基本節(jié)點(diǎn)都查找結(jié)束,將所述存儲(chǔ)節(jié)點(diǎn)加入所述集群。
優(yōu)選的,還包括:
當(dāng)所述存儲(chǔ)節(jié)點(diǎn)的所述量化值發(fā)生變化時(shí),將所述存儲(chǔ)節(jié)點(diǎn)移出所述集群。
優(yōu)選的,所述將所述存儲(chǔ)節(jié)點(diǎn)移出所述集群為:
獲取所述存儲(chǔ)節(jié)點(diǎn)對(duì)應(yīng)的各基本節(jié)點(diǎn)信息;
從當(dāng)前基本節(jié)點(diǎn)Nj的映射位置查找不屬于所述存儲(chǔ)節(jié)點(diǎn)的基本節(jié)點(diǎn)Na,將所述當(dāng)前基本節(jié)點(diǎn)Nj與所述基本節(jié)點(diǎn)Na的映射關(guān)系移動(dòng)到與所述基本節(jié)點(diǎn)Na對(duì)應(yīng)的所述存儲(chǔ)節(jié)點(diǎn)上,將所述當(dāng)前基本節(jié)點(diǎn)Nj從所述一致性哈希算法的圓空間上移除;
繼續(xù)查找下一個(gè)基本節(jié)點(diǎn)Nb,執(zhí)行相同的操作;
當(dāng)所述存儲(chǔ)節(jié)點(diǎn)對(duì)應(yīng)的所述基本節(jié)點(diǎn)都查找結(jié)束,將所述存儲(chǔ)節(jié)點(diǎn)移出所述集群。
優(yōu)選的,所述根據(jù)一致性哈希算法從所述存儲(chǔ)節(jié)點(diǎn)進(jìn)行讀寫數(shù)據(jù)為:
根據(jù)所述一致性哈希算法計(jì)算待讀寫數(shù)據(jù)的哈希值,并將所述哈希值映射到所述一致性哈希算法的圓空間上;
從所述哈希值映射到所述一致性哈希算法的圓空間上的位置處找到第一個(gè)基本節(jié)點(diǎn);
尋找所述基本節(jié)點(diǎn)對(duì)應(yīng)的所述存儲(chǔ)節(jié)點(diǎn);
發(fā)送讀寫請(qǐng)求到所述存儲(chǔ)節(jié)點(diǎn);
從所述存儲(chǔ)節(jié)點(diǎn)對(duì)所述數(shù)據(jù)進(jìn)行讀寫。
優(yōu)選的,所述根據(jù)所述存儲(chǔ)容量信息和所述性能信息對(duì)所述存儲(chǔ)節(jié)點(diǎn)進(jìn)行量化,得到量化值為:
根據(jù)所述存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)容量信息以及所述性能信息,利用公式max{容量值*性能值,1}確定所述量化值;
式中,容量值*性能值表示對(duì)容量值與性能值的乘積取下整數(shù)。
本發(fā)明實(shí)施例另一方面提供了一種多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡的裝置,包括:
獲取信息模塊,用于獲取存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)容量信息和性能信息;
獲取量化值模塊,用于根據(jù)所述存儲(chǔ)容量信息和所述性能信息對(duì)所述存儲(chǔ)節(jié)點(diǎn)進(jìn)行量化,得到量化值;
基本節(jié)點(diǎn)分配模塊,用于根據(jù)所述量化值確定所述存儲(chǔ)節(jié)點(diǎn)分配基本節(jié)點(diǎn)的個(gè)數(shù),所述基本節(jié)點(diǎn)的個(gè)數(shù)隨著所述量化值的升高而增多;
存儲(chǔ)節(jié)點(diǎn)加入集群模塊,用于將所述存儲(chǔ)節(jié)點(diǎn)加入集群,接收讀寫請(qǐng)求;
讀寫數(shù)據(jù)模塊,用于根據(jù)一致性哈希算法從所述存儲(chǔ)節(jié)點(diǎn)進(jìn)行讀寫數(shù)據(jù)。
優(yōu)選的,所述存儲(chǔ)節(jié)點(diǎn)加入集群模塊具體為:
從當(dāng)前基本節(jié)點(diǎn)Ni的映射位置查找下一個(gè)基本節(jié)點(diǎn)N1;
判斷所述基本節(jié)點(diǎn)N1是否屬于所述當(dāng)前基本節(jié)點(diǎn)Ni對(duì)應(yīng)的所述存儲(chǔ)節(jié)點(diǎn);
當(dāng)判定所述基本節(jié)點(diǎn)N1不屬于所述存儲(chǔ)節(jié)點(diǎn)時(shí),將所述當(dāng)前基本節(jié)點(diǎn)Ni與所述基本節(jié)點(diǎn)N1的映射關(guān)系移動(dòng)到與所述當(dāng)前基本節(jié)點(diǎn)Ni對(duì)應(yīng)的所述存儲(chǔ)節(jié)點(diǎn);
當(dāng)判定所述基本節(jié)點(diǎn)N1屬于所述存儲(chǔ)節(jié)點(diǎn)時(shí),繼續(xù)執(zhí)行下述步驟;
繼續(xù)查找下一個(gè)基本節(jié)點(diǎn)N2,執(zhí)行相同的判斷操作;
當(dāng)所述存儲(chǔ)節(jié)點(diǎn)對(duì)應(yīng)的所述基本節(jié)點(diǎn)都查找完,將所述存儲(chǔ)節(jié)點(diǎn)加入所述集群。
優(yōu)選的,當(dāng)所述存儲(chǔ)節(jié)點(diǎn)的所述量化值發(fā)生變化時(shí),還包括:
存儲(chǔ)節(jié)點(diǎn)移出集群模塊,用于當(dāng)所述存儲(chǔ)節(jié)點(diǎn)的所述量化值發(fā)生變化時(shí),將所述存儲(chǔ)節(jié)點(diǎn)移出所述集群;
所述存儲(chǔ)節(jié)點(diǎn)移出集群模塊具體為:
從當(dāng)前基本節(jié)點(diǎn)Nj的映射位置查找不屬于所述存儲(chǔ)節(jié)點(diǎn)的基本節(jié)點(diǎn)Na,將所述當(dāng)前基本節(jié)點(diǎn)Nj與所述基本節(jié)點(diǎn)Na的映射關(guān)系移動(dòng)到與所述基本節(jié)點(diǎn)Na對(duì)應(yīng)的所述存儲(chǔ)節(jié)點(diǎn)上,將所述當(dāng)前基本節(jié)點(diǎn)Nj從所述一致性哈希算法的圓空間上移除;
繼續(xù)查找下一個(gè)基本節(jié)點(diǎn)Nb,執(zhí)行相同的操作;
當(dāng)所述存儲(chǔ)節(jié)點(diǎn)對(duì)應(yīng)的所述基本節(jié)點(diǎn)都查找完,將所述存儲(chǔ)節(jié)點(diǎn)移出所述集群。
優(yōu)選的,讀寫數(shù)據(jù)模塊包括:
計(jì)算單元,用于根據(jù)所述一致性哈希算法計(jì)算待讀寫數(shù)據(jù)的哈希值,并將所述哈希值映射到所述一致性哈希算法的圓空間上;
查找單元,用于從所述哈希值映射到所述一致性哈希算法的圓空間上的位置處找到第一個(gè)基本節(jié)點(diǎn);
確定存儲(chǔ)單元,用于尋找所述基本節(jié)點(diǎn)對(duì)應(yīng)的所述存儲(chǔ)節(jié)點(diǎn);
發(fā)送單元,用于發(fā)送讀寫請(qǐng)求到所述存儲(chǔ)節(jié)點(diǎn);
讀寫單元,用于從所述存儲(chǔ)節(jié)點(diǎn)對(duì)所述數(shù)據(jù)進(jìn)行讀寫。
本發(fā)明實(shí)施例提供了一種多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡的方法,根據(jù)存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)容量信息和性能信息對(duì)存儲(chǔ)節(jié)點(diǎn)進(jìn)行量化得到量化值,根據(jù)量化值的大小分配基本節(jié)點(diǎn),基本節(jié)點(diǎn)的個(gè)數(shù)隨著量化值的升高而增多。然后將存儲(chǔ)節(jié)點(diǎn)加入集群,接收數(shù)據(jù)請(qǐng)求,根據(jù)一致性哈希算法從所述存儲(chǔ)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)的讀寫。
本發(fā)明的優(yōu)點(diǎn)在于引進(jìn)基本節(jié)點(diǎn),根據(jù)量化值的大小分配基本節(jié)點(diǎn),所述基本節(jié)點(diǎn)的個(gè)數(shù)隨著所述量化值的升高而增多,也就是說所述存儲(chǔ)節(jié)點(diǎn)的性能越好、容量越高對(duì)應(yīng)分配的基本節(jié)點(diǎn)就越多;反之,則越少。充分有效的利用了高性能高容量的存儲(chǔ)節(jié)點(diǎn)并且避免了低性能低容量的存儲(chǔ)節(jié)點(diǎn)可能由于負(fù)載太大而造成系統(tǒng)運(yùn)行太慢甚至癱瘓,有效的解決了容量和性能異構(gòu)的多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡的問題。
此外,本發(fā)明實(shí)施例還針對(duì)多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡的方法提供了相應(yīng)的實(shí)現(xiàn)裝置,進(jìn)一步使得所述方法更具有實(shí)用性,所述裝置具有相應(yīng)的優(yōu)點(diǎn)。
附圖說明
為了更清楚的說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為一致性哈希算法的原理圖;
圖2為本發(fā)明實(shí)施例提供的一種多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡方法的流程示意圖;
圖3為本發(fā)明實(shí)施例提供的另一種多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡方法的流程示意圖;
圖4為本發(fā)明實(shí)施例提供的另一種多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡方法的原理示意圖;
圖5為本發(fā)明實(shí)施例提供的一種多存儲(chǔ)節(jié)點(diǎn)移出集群的原理示意圖;
圖6為本發(fā)明實(shí)施例提供的一種多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡裝置的結(jié)構(gòu)圖;
圖7為本發(fā)明實(shí)施例提供的另一種多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡裝置的結(jié)構(gòu)圖。
具體實(shí)施方式
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面結(jié)合附圖和具體實(shí)施方式對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說明。顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本申請(qǐng)的說明書和權(quán)利要求書及上述附圖中的術(shù)語(yǔ)“第一”、“第二”、“第三”“第四”等是用于區(qū)別不同的對(duì)象,而不是用于描述特定的順序。此外術(shù)語(yǔ)“包括”和“具有”以及他們?nèi)魏巫冃危鈭D在于覆蓋不排他的包含。例如包含了一系列步驟或單元的過程、方法、系統(tǒng)、產(chǎn)品或設(shè)備沒有限定于已列出的步驟或單元,而是可包括沒有列出的步驟或單元。
本申請(qǐng)的發(fā)明人經(jīng)過研究發(fā)現(xiàn),現(xiàn)有技術(shù)中對(duì)于分布式存儲(chǔ)系統(tǒng)中存儲(chǔ)節(jié)點(diǎn)的讀取數(shù)據(jù)一般采用一致性哈希算法,盡管解決了多個(gè)存儲(chǔ)節(jié)點(diǎn)間數(shù)據(jù)分布問題,由于每個(gè)節(jié)點(diǎn)的性能或容量可能是不同的,一致性哈希算法平等無(wú)差別的對(duì)待環(huán)上的每一個(gè)存儲(chǔ)節(jié)點(diǎn)的,這就導(dǎo)致對(duì)于性能高的節(jié)點(diǎn)就沒很好的有效利用,而性能低的節(jié)點(diǎn)可能會(huì)由于存儲(chǔ)太多導(dǎo)致運(yùn)行太慢甚至崩潰。鑒于此,本申請(qǐng)通過提出基本節(jié)點(diǎn)的概念,根據(jù)存儲(chǔ)節(jié)點(diǎn)的性能和容量對(duì)每個(gè)存儲(chǔ)節(jié)點(diǎn)分配不同的個(gè)數(shù)的基本節(jié)點(diǎn),高效利用了存儲(chǔ)節(jié)點(diǎn),有效的解決了容量和性能異構(gòu)的多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡的問題。
在介紹了本發(fā)明實(shí)施例的技術(shù)方案后,下面詳細(xì)的說明本申請(qǐng)的各種非限制性實(shí)施方式。
實(shí)施例一:
首先參見圖2,圖2為本發(fā)明實(shí)施例提供的一種多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡方法的流程示意圖,本發(fā)明實(shí)施例可包括以下內(nèi)容:
S201:獲取存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)容量信息和性能信息。
S202:根據(jù)所述存儲(chǔ)容量信息和所述性能信息對(duì)所述存儲(chǔ)節(jié)點(diǎn)進(jìn)行量化,得到量化值。
獲取存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)容量信息和性能信息,在對(duì)所述存儲(chǔ)容量信息和性能信息進(jìn)行量化之前,可預(yù)先設(shè)置基準(zhǔn)點(diǎn),舉例來說,1TB的容量對(duì)應(yīng)1,1GB/s的性能對(duì)應(yīng)1,若獲取的存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)容量為4TB,性能為1.5GB/s,那么該存儲(chǔ)節(jié)點(diǎn)量化之后相對(duì)應(yīng)的值為4,1.5。當(dāng)然,也可不預(yù)先設(shè)置基準(zhǔn)點(diǎn),在同一個(gè)系統(tǒng)內(nèi),可按照一定的規(guī)律人為規(guī)定所述存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)容量信息對(duì)應(yīng)的容量值,和性能信息對(duì)應(yīng)的性能值。
對(duì)所述存儲(chǔ)容量信息和性能信息進(jìn)行量化之后,該存儲(chǔ)節(jié)點(diǎn)的量化值可根據(jù)max{容量值*性能值,1}來取,容量值*性能值表示對(duì)容量值與性能值的乘積取下整數(shù)。例如,容量值為4,性能值為1.3,容量值*性能值為5.2,對(duì)該乘積進(jìn)行下取整即為5,此時(shí)的量化值即為5;又例如容量值為1,性能值為0.6,對(duì)其下取整即為0,則該存儲(chǔ)節(jié)點(diǎn)的量化值為1。
S203:根據(jù)所述量化值確定所述存儲(chǔ)節(jié)點(diǎn)分配基本節(jié)點(diǎn)的個(gè)數(shù),所述基本節(jié)點(diǎn)的個(gè)數(shù)隨著所述量化值的升高而增多。
對(duì)于同一個(gè)系統(tǒng),對(duì)存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)容量信息和性能信息進(jìn)行量化選用的是同一個(gè)參考系,所以所述量化值在一定程度上可準(zhǔn)確的反應(yīng)對(duì)應(yīng)的存儲(chǔ)節(jié)點(diǎn)的性能好壞和容量大小,即可對(duì)系統(tǒng)內(nèi)各個(gè)存儲(chǔ)節(jié)點(diǎn)質(zhì)量?jī)?yōu)劣的綜合評(píng)價(jià),量值越大,該存儲(chǔ)節(jié)點(diǎn)的質(zhì)量越好,可負(fù)載越重;反之,則負(fù)載較輕,可能會(huì)由于太重的負(fù)載影響運(yùn)行甚至導(dǎo)致系統(tǒng)崩潰癱瘓。
S204:將所述存儲(chǔ)節(jié)點(diǎn)加入集群,接收讀寫請(qǐng)求。
具體的,將所述存儲(chǔ)節(jié)點(diǎn)加入集群的過程可為:
從當(dāng)前基本節(jié)點(diǎn)Ni的映射位置查找下一個(gè)基本節(jié)點(diǎn)N1;
判斷所述基本節(jié)點(diǎn)N1是否屬于所述當(dāng)前基本節(jié)點(diǎn)Ni對(duì)應(yīng)的所述存儲(chǔ)節(jié)點(diǎn);
當(dāng)判定所述基本節(jié)點(diǎn)N1不屬于所述存儲(chǔ)節(jié)點(diǎn)時(shí),將所述當(dāng)前基本節(jié)點(diǎn)Ni與所述基本節(jié)點(diǎn)N1的映射關(guān)系移動(dòng)到與所述當(dāng)前基本節(jié)點(diǎn)Ni對(duì)應(yīng)的所述存儲(chǔ)節(jié)點(diǎn);
當(dāng)判定所述基本節(jié)點(diǎn)N1屬于所述存儲(chǔ)節(jié)點(diǎn)時(shí),繼續(xù)執(zhí)行下述步驟;
繼續(xù)查找下一個(gè)基本節(jié)點(diǎn)N2,執(zhí)行相同的判斷操作;
當(dāng)所述存儲(chǔ)節(jié)點(diǎn)對(duì)應(yīng)的所述基本節(jié)點(diǎn)都查找完,將所述存儲(chǔ)節(jié)點(diǎn)加入所述集群。
當(dāng)對(duì)存儲(chǔ)節(jié)點(diǎn)的所有基本節(jié)點(diǎn)都執(zhí)行完后,將該存儲(chǔ)節(jié)點(diǎn)加入到集群,即對(duì)系統(tǒng)內(nèi)個(gè)存儲(chǔ)節(jié)點(diǎn)進(jìn)行配置基本節(jié)點(diǎn)之后需重新加入集群,才可接受IO(輸入輸出)的請(qǐng)求。
需要說明的是,在查找基本節(jié)點(diǎn)時(shí),可按照一個(gè)方向進(jìn)行查找,例如逆時(shí)針查找或順時(shí)針查找。
S205:根據(jù)一致性哈希算法從所述存儲(chǔ)節(jié)點(diǎn)進(jìn)行讀寫數(shù)據(jù)。
具體的,根據(jù)所述一致性哈希算法計(jì)算待讀寫數(shù)據(jù)的哈希值,并將所述哈希值映射到所述一致性哈希算法的圓空間上;
從所述哈希值映射到所述一致性哈希算法的圓空間上的位置處找到第一個(gè)基本節(jié)點(diǎn);
尋找所述基本節(jié)點(diǎn)對(duì)應(yīng)的所述存儲(chǔ)節(jié)點(diǎn);
發(fā)送讀寫請(qǐng)求到所述存儲(chǔ)節(jié)點(diǎn);
從所述存儲(chǔ)節(jié)點(diǎn)對(duì)所述數(shù)據(jù)進(jìn)行讀寫,以完成所述數(shù)據(jù)的讀寫。
需要說明的是,在查找基本節(jié)點(diǎn)時(shí),可按照一個(gè)方向進(jìn)行查找,例如逆時(shí)針查找或順時(shí)針查找。優(yōu)選的,在時(shí)S204中查找基本節(jié)點(diǎn)的方向與本步驟中查找基本節(jié)點(diǎn)的方向可為相反的方向,例如,S204中逆時(shí)針查找,則本步驟應(yīng)該為順時(shí)針查找。
需要說明的是,對(duì)于每一個(gè)基本節(jié)點(diǎn)需要進(jìn)行處理,具體的如下:
利用隨機(jī)化算法計(jì)算得到所述存儲(chǔ)節(jié)點(diǎn)包含的各所述基本節(jié)點(diǎn)的隨機(jī)值,這些隨機(jī)值對(duì)應(yīng)基本節(jié)點(diǎn)的下標(biāo),根據(jù)一致性哈希算法將各所述基本節(jié)點(diǎn)映射到圓空間上。
本發(fā)明實(shí)施例提供了一種多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡的方法,根據(jù)存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)容量信息和性能信息對(duì)存儲(chǔ)節(jié)點(diǎn)進(jìn)行量化得到量化值,根據(jù)量化值的大小分配基本節(jié)點(diǎn),所述基本節(jié)點(diǎn)的個(gè)數(shù)隨著所述量化值的升高而增多。然后將存儲(chǔ)節(jié)點(diǎn)加入集群,接收數(shù)據(jù)請(qǐng)求,根據(jù)一致性哈希算法從所述存儲(chǔ)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)的讀寫。引進(jìn)基本節(jié)點(diǎn),充分有效的利用了高性能高容量的存儲(chǔ)節(jié)點(diǎn)并且避免了低性能低容量的存儲(chǔ)節(jié)點(diǎn)可能由于負(fù)載太大而造成系統(tǒng)運(yùn)行太慢甚至癱瘓,有效的解決了容量和性能異構(gòu)的多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡的問題。
考慮在實(shí)際操作過程中,為了更方便的使用該方法,基于上述實(shí)施例做了部分改進(jìn)。
實(shí)施例二:
參見圖3,圖3為本發(fā)明實(shí)施例提供的另一種多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡方法的流程示意圖,圖4為圖3相應(yīng)的原理圖,例如可應(yīng)用于分布式存儲(chǔ)系統(tǒng),具體的可包括以下內(nèi)容:
S301:獲取存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)容量信息和性能信息。
S302:計(jì)算存儲(chǔ)節(jié)點(diǎn)的性能值P和容量值C,并得到總的量化值S=max{P*C,1}。
具體的,參見實(shí)施例一相應(yīng)的介紹。
S303:根據(jù)隨機(jī)化算法,計(jì)算得出S個(gè)整型隨機(jī)數(shù),對(duì)應(yīng)到基本節(jié)點(diǎn)的空間N1,N2…Ns,如果有基本節(jié)點(diǎn)已經(jīng)分配,則重新計(jì)算隨機(jī)數(shù)。
所述整型隨機(jī)數(shù)即為所述存儲(chǔ)節(jié)點(diǎn)的每個(gè)基本節(jié)點(diǎn)的隨機(jī)值,這些隨機(jī)值對(duì)應(yīng)著基本節(jié)點(diǎn)的下標(biāo)。
S304:對(duì)于每一個(gè)基本節(jié)點(diǎn)Ni,利用哈希算法,將其映射到圓空間。
將S303得到的隨機(jī)值利用哈希算法得到對(duì)應(yīng)的哈希值,然后在將其映射在哈希算法的圓空間上。
S305:從Ni所在的位置查找到第一個(gè)基本節(jié)點(diǎn)Np,如果Np不屬于待加入的存儲(chǔ)節(jié)點(diǎn),則將之前映射到Np和Ni之間的數(shù)據(jù)移動(dòng)到Ni所對(duì)應(yīng)的存儲(chǔ)節(jié)點(diǎn)上;如果Np屬于待加入的存儲(chǔ)節(jié)點(diǎn),則繼續(xù)執(zhí)行。
在S304中將每一個(gè)基本節(jié)點(diǎn)映射到哈希算法的圓空間后,需要將其基本節(jié)點(diǎn)加入到相應(yīng)的存儲(chǔ)節(jié)點(diǎn)內(nèi),并建立存儲(chǔ)節(jié)點(diǎn)內(nèi)的每一個(gè)基本節(jié)點(diǎn)之間的關(guān)系,使其明確同屬一個(gè)存儲(chǔ)節(jié)點(diǎn),在進(jìn)行讀寫時(shí),這些基本節(jié)點(diǎn)處于同一級(jí)別。
S306:判斷存儲(chǔ)節(jié)點(diǎn)對(duì)應(yīng)的基本節(jié)點(diǎn)處理完,如果是,則進(jìn)入S307;反之,則返回S305。
可以通過設(shè)計(jì)計(jì)數(shù)器對(duì)存儲(chǔ)節(jié)點(diǎn)對(duì)應(yīng)的基本節(jié)點(diǎn)是否處理完做判斷,如果處理的基本節(jié)點(diǎn)的個(gè)數(shù)和所述存儲(chǔ)節(jié)點(diǎn)的分配節(jié)點(diǎn)個(gè)數(shù)相同,則判斷完成,否則,返回S305,繼續(xù)執(zhí)行。
S307:將所述存儲(chǔ)節(jié)點(diǎn)加入集群,接收讀寫請(qǐng)求。
S308:根據(jù)一致性哈希算法從所述存儲(chǔ)節(jié)點(diǎn)進(jìn)行讀寫數(shù)據(jù)。
具體的介紹請(qǐng)參閱實(shí)施例一S204和S205。
由上可知,本發(fā)明實(shí)施例在實(shí)施例一的基礎(chǔ)上進(jìn)行了細(xì)化,使得實(shí)施例一更加實(shí)用,引進(jìn)基本節(jié)點(diǎn),充分有效的利用了高性能高容量的存儲(chǔ)節(jié)點(diǎn)并且避免了低性能低容量的存儲(chǔ)節(jié)點(diǎn)可能由于負(fù)載太大而造成系統(tǒng)運(yùn)行太慢甚至癱瘓,有效的解決了容量和性能異構(gòu)的多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡的問題。
針對(duì)實(shí)施例一和實(shí)施例二,存儲(chǔ)節(jié)點(diǎn)的性能不可能在系統(tǒng)內(nèi)一直穩(wěn)定不變,隨著時(shí)間的推移,系統(tǒng)內(nèi)硬件的老化或壞掉等等,性能優(yōu)良的存儲(chǔ)節(jié)點(diǎn)的性能會(huì)變化;隨著存儲(chǔ)的數(shù)據(jù)越來越多,容量也逐漸減少,這樣原本質(zhì)量好的存儲(chǔ)節(jié)點(diǎn)的量化值就會(huì)變低。對(duì)于之前質(zhì)量不好的,系統(tǒng)可能進(jìn)行修復(fù),或進(jìn)行清零,使其容量變大;或相應(yīng)的硬件設(shè)備更換導(dǎo)致整體性能較高,這是量化值就會(huì)變高。鑒于上述列舉的例子,實(shí)際操作中必然會(huì)涉及到對(duì)存儲(chǔ)節(jié)點(diǎn)的再分配,優(yōu)選的,應(yīng)該每隔固定的時(shí)間對(duì)系統(tǒng)內(nèi)各個(gè)存儲(chǔ)節(jié)點(diǎn)進(jìn)行一次量化。
存儲(chǔ)節(jié)點(diǎn)的再分配過程無(wú)疑會(huì)涉及到將存儲(chǔ)節(jié)點(diǎn)清零,即將其所屬的基本節(jié)點(diǎn)進(jìn)行移出,即將存儲(chǔ)節(jié)點(diǎn)移出集群,請(qǐng)參見圖5,圖5為本發(fā)明實(shí)施例提供的一種多存儲(chǔ)節(jié)點(diǎn)移出集群的原理示意圖,具體的過程如下:
獲取所述存儲(chǔ)節(jié)點(diǎn)對(duì)應(yīng)的各基本節(jié)點(diǎn)信息;
從當(dāng)前基本節(jié)點(diǎn)Nj的映射位置查找不屬于所述存儲(chǔ)節(jié)點(diǎn)的基本節(jié)點(diǎn)Na,將所述當(dāng)前基本節(jié)點(diǎn)Nj與所述基本節(jié)點(diǎn)Na的映射關(guān)系移動(dòng)到與所述基本節(jié)點(diǎn)Na對(duì)應(yīng)的所述存儲(chǔ)節(jié)點(diǎn)上,將所述當(dāng)前基本節(jié)點(diǎn)Nj從所述一致性哈希算法的圓空間上移除;
繼續(xù)查找下一個(gè)基本節(jié)點(diǎn)Nb,執(zhí)行相同的操作;
當(dāng)所述存儲(chǔ)節(jié)點(diǎn)對(duì)應(yīng)的所述基本節(jié)點(diǎn)都查找完,將所述存儲(chǔ)節(jié)點(diǎn)移除所述集群。
需要說明的是,在查找基本節(jié)點(diǎn)時(shí),可按照一個(gè)方向進(jìn)行查找,例如逆時(shí)針查找或順時(shí)針查找。優(yōu)選的,在時(shí)S204中查找基本節(jié)點(diǎn)的方向與本步驟中查找基本節(jié)點(diǎn)的方向可為相反的方向,例如,S204中逆時(shí)針查找,則本步驟應(yīng)該為順時(shí)針查找。
本發(fā)明實(shí)施例還針對(duì)多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡的方法提供了相應(yīng)的實(shí)現(xiàn)裝置,進(jìn)一步使得所述方法更具有實(shí)用性。下面對(duì)本發(fā)明實(shí)施例提供的多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡的裝置進(jìn)行介紹,下文描述的多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡的裝置與上文描述的多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡的方法可相互對(duì)應(yīng)參照。
實(shí)施例三:
參見圖6,圖6為本發(fā)明實(shí)施例提供的一種多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡裝置的結(jié)構(gòu)圖,該裝置可包括:
獲取信息模塊601,用于獲取存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)容量信息和性能信息。
獲取量化值模塊602,用于根據(jù)所述存儲(chǔ)容量信息和所述性能信息對(duì)所述存儲(chǔ)節(jié)點(diǎn)進(jìn)行量化,得到量化值。
基本節(jié)點(diǎn)分配模塊603,用于根據(jù)所述量化值確定所述存儲(chǔ)節(jié)點(diǎn)分配基本節(jié)點(diǎn)的個(gè)數(shù),所述基本節(jié)點(diǎn)的個(gè)數(shù)隨著所述量化值的升高而增多。
存儲(chǔ)點(diǎn)加入集群模塊604,用于將所述存儲(chǔ)節(jié)點(diǎn)加入集群,接收讀寫請(qǐng)求。
讀寫數(shù)據(jù)模塊605,用于根據(jù)一致性哈希算法從所述存儲(chǔ)節(jié)點(diǎn)進(jìn)行讀寫數(shù)據(jù)。
具體的,讀寫數(shù)據(jù)模塊包括:
計(jì)算單元,用于根據(jù)所述一致性哈希算法計(jì)算待讀寫數(shù)據(jù)的哈希值,并將所述哈希值映射到所述一致性哈希算法的圓空間上;
查找單元,用于從所述哈希值映射到所述一致性哈希算法的圓空間上的位置處找到第一個(gè)基本節(jié)點(diǎn);
確定存儲(chǔ)單元,用于尋找所述基本節(jié)點(diǎn)對(duì)應(yīng)的所述存儲(chǔ)節(jié)點(diǎn);
發(fā)送單元,用于發(fā)送讀寫請(qǐng)求到所述存儲(chǔ)節(jié)點(diǎn);
讀寫單元,用于從所述存儲(chǔ)節(jié)點(diǎn)對(duì)所述數(shù)據(jù)進(jìn)行讀寫。
可選的,在本實(shí)施例的一些實(shí)施方式中,請(qǐng)參閱圖7,所述裝置例如還可以包括:
存儲(chǔ)節(jié)點(diǎn)移出集群模塊706,具體為:
獲取所述存儲(chǔ)節(jié)點(diǎn)對(duì)應(yīng)的各基本節(jié)點(diǎn)信息;從當(dāng)前基本節(jié)點(diǎn)Nj的映射位置查找不屬于所述存儲(chǔ)節(jié)點(diǎn)的基本節(jié)點(diǎn)Na,將所述當(dāng)前基本節(jié)點(diǎn)Nj與所述基本節(jié)點(diǎn)Na的映射關(guān)系移動(dòng)到與所述基本節(jié)點(diǎn)Na對(duì)應(yīng)的所述存儲(chǔ)節(jié)點(diǎn)上,將所述當(dāng)前基本節(jié)點(diǎn)Nj從所述一致性哈希算法的圓空間上移除;繼續(xù)查找下一個(gè)基本節(jié)點(diǎn)Nb,執(zhí)行相同的操作;當(dāng)所述存儲(chǔ)節(jié)點(diǎn)對(duì)應(yīng)的所述基本節(jié)點(diǎn)都查找完,將所述存儲(chǔ)節(jié)點(diǎn)移出所述集群。
本發(fā)明實(shí)施例所述多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡裝置的各功能模塊的功能可根據(jù)上述方法實(shí)施例中的方法具體實(shí)現(xiàn),其具體實(shí)現(xiàn)過程可以參照上述方法實(shí)施例的相關(guān)描述,此處不再贅述。
本發(fā)明實(shí)施提供了一種多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡的裝置根據(jù)存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)容量信息和性能信息對(duì)存儲(chǔ)節(jié)點(diǎn)進(jìn)行量化得到量化值,根據(jù)量化值的大小分配基本節(jié)點(diǎn),基本節(jié)點(diǎn)的個(gè)數(shù)隨著量化值的升高而增多。然后將所述存儲(chǔ)節(jié)點(diǎn)加入集群,接收數(shù)據(jù)請(qǐng)求,根據(jù)一致性哈希算法從所述存儲(chǔ)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)的讀寫。充分有效的利用了高性能高容量的存儲(chǔ)節(jié)點(diǎn)并且避免了低性能低容量的存儲(chǔ)節(jié)點(diǎn)可能由于負(fù)載太大而造成系統(tǒng)運(yùn)行太慢甚至癱瘓,有效的解決了容量和性能異構(gòu)的多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡的問題。
本說明書中各個(gè)實(shí)施例采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其它實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同或相似部分互相參見即可。對(duì)于實(shí)施例公開的裝置而言,由于其與實(shí)施例公開的方法相對(duì)應(yīng),所以描述的比較簡(jiǎn)單,相關(guān)之處參見方法部分說明即可。
專業(yè)人員還可以進(jìn)一步意識(shí)到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、計(jì)算機(jī)軟件或者二者的結(jié)合來實(shí)現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來使用不同方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
結(jié)合本文中所公開的實(shí)施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實(shí)施。軟件模塊可以置于隨機(jī)存儲(chǔ)器(RAM)、內(nèi)存、只讀存儲(chǔ)器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動(dòng)磁盤、CD-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲(chǔ)介質(zhì)中。
以上對(duì)本發(fā)明所提供的多存儲(chǔ)節(jié)點(diǎn)負(fù)載均衡方法以及裝置進(jìn)行了詳細(xì)介紹。本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想。應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以對(duì)本發(fā)明進(jìn)行若干改進(jìn)和修飾,這些改進(jìn)和修飾也落入本發(fā)明權(quán)利要求的保護(hù)范圍內(nèi)。