一種均衡服務(wù)器負(fù)載的方法和系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于數(shù)據(jù)處理領(lǐng)域,尤其涉及一種均衡服務(wù)器負(fù)載的方法和系統(tǒng)。
【背景技術(shù)】
[0002]在大數(shù)據(jù)時(shí)代,隨著云存儲(chǔ)技術(shù)的成熟,當(dāng)數(shù)據(jù)量達(dá)到T級(jí)別時(shí),如何有效地存儲(chǔ)、處理海量數(shù)據(jù)成了一個(gè)非常嚴(yán)峻的問(wèn)題。對(duì)于數(shù)據(jù)庫(kù)的并發(fā)性、可擴(kuò)展性能力的要求也變的越來(lái)越高,傳統(tǒng)數(shù)據(jù)庫(kù)暴露了很多難以解決的問(wèn)題。例如,對(duì)大并發(fā)量的訪(fǎng)問(wèn)需求、對(duì)大數(shù)據(jù)量的存儲(chǔ)效率和快速訪(fǎng)問(wèn)的需求等等。在這種情況下,非傳統(tǒng)數(shù)據(jù)庫(kù)NoSQL由于其更靈活的存儲(chǔ)模式以及彈性可擴(kuò)展性等特點(diǎn)開(kāi)始走入人們的視線(xiàn),MongoDB(—種非傳統(tǒng)數(shù)據(jù)庫(kù))是其中比較出色的一款。MongoDB在進(jìn)行分布式存儲(chǔ)時(shí),會(huì)先將數(shù)據(jù)集進(jìn)行分片,之后在多個(gè)服務(wù)器上對(duì)片進(jìn)行管理。
[0003]在多個(gè)服務(wù)器集群中進(jìn)行數(shù)據(jù)分片的管理就必然會(huì)涉及到服務(wù)器之間的負(fù)載均衡問(wèn)題。MongoDB已有的負(fù)載均衡的實(shí)現(xiàn)主要來(lái)自于其內(nèi)部Balancer進(jìn)程的運(yùn)行,但該進(jìn)程只會(huì)移動(dòng)在分片中片鍵較小的塊,只考慮到了各個(gè)分片的存儲(chǔ)平衡而未考慮到數(shù)據(jù)讀寫(xiě)平衡,有可能使得某些分片成為單純的“數(shù)據(jù)載體”。若在存儲(chǔ)平衡的基礎(chǔ)上進(jìn)一步考慮數(shù)據(jù)塊的讀寫(xiě)平衡可以使整個(gè)集群更全面地實(shí)現(xiàn)負(fù)載均衡。
【發(fā)明內(nèi)容】
[0004]鑒于此,本發(fā)明提供一種均衡服務(wù)器負(fù)載的方法和系統(tǒng),以解決現(xiàn)有技術(shù)MongoDB系統(tǒng)中負(fù)載不均衡的技術(shù)問(wèn)題。
[0005]本發(fā)明實(shí)施例是這樣實(shí)現(xiàn)的,一種均衡服務(wù)器負(fù)載的方法,所述方法包括以下步驟:
[0006]通過(guò)Balancer進(jìn)程對(duì)MongoDB系統(tǒng)的所有存儲(chǔ)服務(wù)器中的存儲(chǔ)的數(shù)據(jù)塊進(jìn)行掃描,根據(jù)所述數(shù)據(jù)塊的數(shù)量確定需要進(jìn)行負(fù)載均衡的存儲(chǔ)服務(wù)器和每個(gè)數(shù)據(jù)塊的訪(fǎng)問(wèn)操作的類(lèi)型和次數(shù);
[0007]根據(jù)所述類(lèi)型和次數(shù)確定需要進(jìn)行負(fù)載均衡的存儲(chǔ)服務(wù)器的負(fù)載值;
[0008]通過(guò)預(yù)設(shè)的負(fù)載均衡算法和所述負(fù)載值均衡所述存儲(chǔ)服務(wù)器的負(fù)載。
[0009]本發(fā)明實(shí)施例還提供一種均衡服務(wù)器負(fù)載的系統(tǒng),所述系統(tǒng)包括:
[0010]確定單元,用于通過(guò)Balancer進(jìn)程對(duì)MongoDB系統(tǒng)的所有存儲(chǔ)服務(wù)器中的存儲(chǔ)的數(shù)據(jù)塊進(jìn)行掃描,根據(jù)所述數(shù)據(jù)塊的數(shù)量確定需要進(jìn)行負(fù)載均衡的存儲(chǔ)服務(wù)器和每個(gè)數(shù)據(jù)塊的訪(fǎng)問(wèn)操作的類(lèi)型和次數(shù);
[0011]負(fù)載值確定單元,用于根據(jù)所述確定單元確定的類(lèi)型和次數(shù)確定需要進(jìn)行負(fù)載均衡的存儲(chǔ)服務(wù)器的負(fù)載值;
[0012]負(fù)載均衡單元,用于通過(guò)預(yù)設(shè)的負(fù)載均衡算法和所述負(fù)載值確定子單元確定的負(fù)載值均衡所述存儲(chǔ)服務(wù)器的負(fù)載。
[0013]本發(fā)明實(shí)施例,通過(guò)Balancer進(jìn)程對(duì)MongoDB系統(tǒng)的所有存儲(chǔ)服務(wù)器中的存儲(chǔ)的數(shù)據(jù)塊進(jìn)行掃描,根據(jù)數(shù)據(jù)塊的數(shù)量確定需要進(jìn)行負(fù)載均衡的存儲(chǔ)服務(wù)器和每個(gè)數(shù)據(jù)塊的訪(fǎng)問(wèn)操作的類(lèi)型和次數(shù),根據(jù)類(lèi)型和次數(shù)確定需要進(jìn)行負(fù)載均衡的存儲(chǔ)服務(wù)器的負(fù)載值,通過(guò)預(yù)設(shè)的負(fù)載均衡算法和負(fù)載值均衡存儲(chǔ)服務(wù)器的負(fù)載,可以使MongoDB系統(tǒng)的所有存儲(chǔ)服務(wù)器的負(fù)載均衡。
【附圖說(shuō)明】
[0014]為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0015]圖1是本發(fā)明實(shí)施例提供的均衡服務(wù)器負(fù)載方法的流程圖;
[0016]圖2是本發(fā)明實(shí)施例提供的均衡服務(wù)器負(fù)載系統(tǒng)的結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0017]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0018]為了說(shuō)明本發(fā)明所述的技術(shù)方案,下面通過(guò)具體實(shí)施例來(lái)進(jìn)行說(shuō)明。
[0019]實(shí)施例一
[0020]如圖1所示為本發(fā)明實(shí)施例提供的均衡服務(wù)器負(fù)載方法的流程圖,所述方法包括以下步驟:
[0021 ] 步驟SlOl,通過(guò)Balancer進(jìn)程對(duì)MongoDB系統(tǒng)的所有存儲(chǔ)服務(wù)器中的存儲(chǔ)的數(shù)據(jù)塊進(jìn)行掃描,根據(jù)所述數(shù)據(jù)塊的數(shù)量確定需要進(jìn)行負(fù)載均衡的存儲(chǔ)服務(wù)器和每個(gè)數(shù)據(jù)塊的訪(fǎng)問(wèn)操作的類(lèi)型和次數(shù)。
[0022]在本發(fā)明實(shí)施例中,MongoDB系統(tǒng)是一種分布式存儲(chǔ)系統(tǒng),在MongoDB系統(tǒng)中可以有多個(gè)存儲(chǔ)服務(wù)器存儲(chǔ)數(shù)據(jù)塊,通過(guò)Balancer進(jìn)程對(duì)MongoDB系統(tǒng)中存儲(chǔ)的數(shù)據(jù)塊進(jìn)行掃描,確定需要進(jìn)行負(fù)載均衡的存儲(chǔ)服務(wù)器和每個(gè)數(shù)據(jù)塊的訪(fǎng)問(wèn)操作,該訪(fǎng)問(wèn)操作的類(lèi)型包括但不限于:增加操作、減少操作、修改操作和查看操作中的一種或多種。所述通過(guò)Balancer進(jìn)程對(duì)MongoDB系統(tǒng)的所有存儲(chǔ)服務(wù)器中的存儲(chǔ)的數(shù)據(jù)塊進(jìn)行掃描,根據(jù)所述數(shù)據(jù)塊的數(shù)量確定需要進(jìn)行負(fù)載均衡的存儲(chǔ)服務(wù)器和每個(gè)數(shù)據(jù)塊的訪(fǎng)問(wèn)操作的類(lèi)型和次數(shù)的步驟,包括:
[0023]1、通過(guò)Balancer進(jìn)程獲取每個(gè)存儲(chǔ)服務(wù)器中數(shù)據(jù)塊的數(shù)量,以及所述數(shù)據(jù)塊的訪(fǎng)問(wèn)操作的類(lèi)型和次數(shù)。
[0024]在本發(fā)明實(shí)施例中,首先通過(guò)Balancer進(jìn)程對(duì)每一個(gè)存儲(chǔ)服務(wù)器進(jìn)行掃描,從每個(gè)存儲(chǔ)服務(wù)器中獲取數(shù)據(jù)塊的數(shù)量,如:存儲(chǔ)服務(wù)器a有8塊、存儲(chǔ)服務(wù)器b有9塊、存儲(chǔ)服務(wù)器c有10塊。
[0025]2、將所述數(shù)據(jù)塊數(shù)量之差大于預(yù)設(shè)的最大數(shù)量閾值的兩個(gè)存儲(chǔ)服務(wù)器確定為需要進(jìn)行負(fù)載均衡的存儲(chǔ)服務(wù)器。
[0026]在本發(fā)明實(shí)施例中,獲取任意兩個(gè)存儲(chǔ)服務(wù)器之間的數(shù)據(jù)塊的數(shù)量之差,如果這兩個(gè)存儲(chǔ)服務(wù)器中存儲(chǔ)的數(shù)據(jù)塊的數(shù)量之差大于預(yù)設(shè)的最大數(shù)量閾值,則表示這兩個(gè)存儲(chǔ)服務(wù)器的負(fù)載不平衡了,需要對(duì)這兩個(gè)存儲(chǔ)服務(wù)器進(jìn)行負(fù)載均衡。
[0027]步驟S102,根據(jù)所述類(lèi)型和次數(shù)確定需要進(jìn)行負(fù)載均衡的存儲(chǔ)服務(wù)器的負(fù)載值。
[0028]在本發(fā)明實(shí)施例中,根據(jù)對(duì)數(shù)據(jù)塊的訪(fǎng)問(wèn)操作的類(lèi)型和次數(shù),獲取存儲(chǔ)服務(wù)器的負(fù)載值。根據(jù)對(duì)數(shù)據(jù)塊的訪(fǎng)問(wèn)操作的類(lèi)型和次數(shù),獲取存儲(chǔ)服務(wù)器的負(fù)載值,具體為:獲取每個(gè)數(shù)據(jù)塊的塊負(fù)載值,將所述塊負(fù)載值相加獲取負(fù)載值,獲取每個(gè)數(shù)據(jù)塊的塊負(fù)載值具體為:將所述次數(shù)確定為基礎(chǔ)負(fù)載值,根據(jù)所述類(lèi)型的不同對(duì)所述基礎(chǔ)負(fù)載值進(jìn)行不同加權(quán),將經(jīng)過(guò)加權(quán)的基礎(chǔ)負(fù)載值確定為塊負(fù)載值。
[0029]舉例說(shuō)明:
[0030]假設(shè)存儲(chǔ)服務(wù)器a有8塊數(shù)據(jù)塊,則基礎(chǔ)負(fù)載值為8,假設(shè)增加操作的加權(quán)值為4、減少操作的加權(quán)值為3、修改操作的加權(quán)值為2、查看操作的加權(quán)值為1,有2塊數(shù)據(jù)塊進(jìn)行了增加操作、有2塊數(shù)據(jù)塊進(jìn)行了減少操作、有2塊數(shù)據(jù)塊進(jìn)行了修改操作、有2塊數(shù)據(jù)塊進(jìn)行了查看操作,則存儲(chǔ)服務(wù)器a的最終負(fù)載值為:8+4*2+3*2+2*2+1*2 = 27。
[0031]步驟S103,通過(guò)預(yù)設(shè)的負(fù)載均衡算法和所述負(fù)載值均衡所述存儲(chǔ)服務(wù)器的負(fù)載。
[0032]在本發(fā)明實(shí)施例中,負(fù)載均衡算法具體為:
[0033]1、根據(jù)存儲(chǔ)服務(wù)器中數(shù)據(jù)塊的數(shù)量和負(fù)載值獲取平均負(fù)載值A(chǔ) ;
[0034]2、將仏與A 2進(jìn)行比較:如果A P A 2,則將A1所屬的存儲(chǔ)服務(wù)器中塊負(fù)載值最大的數(shù)據(jù)塊迀移到A2所屬的存儲(chǔ)服務(wù)器;如果Ai< A2,則將仏所屬的存儲(chǔ)服務(wù)器中塊負(fù)載值最小的數(shù)據(jù)塊迀移到A2所屬的存儲(chǔ)服務(wù)器,所述A i為數(shù)據(jù)塊數(shù)量多的存儲(chǔ)服務(wù)器,A 2為數(shù)據(jù)塊數(shù)量少的存儲(chǔ)服務(wù)器。
[0035]本發(fā)明實(shí)施例,通過(guò)Balancer進(jìn)程對(duì)MongoDB系統(tǒng)的所有存儲(chǔ)服務(wù)器中的存儲(chǔ)的數(shù)據(jù)塊進(jìn)行掃描,根據(jù)數(shù)據(jù)塊的數(shù)量確定需要進(jìn)行負(fù)載均衡的存儲(chǔ)服務(wù)器和每個(gè)數(shù)據(jù)塊的訪(fǎng)問(wèn)操作的類(lèi)型和次數(shù),根據(jù)類(lèi)型和次數(shù)確定需要進(jìn)行負(fù)載均衡的存儲(chǔ)服務(wù)器的負(fù)載值,通過(guò)預(yù)設(shè)的負(fù)載均衡算法和負(fù)載值均衡存儲(chǔ)服務(wù)器的負(fù)載,可以使MongoDB系統(tǒng)的所有存儲(chǔ)服務(wù)器的負(fù)載均衡。
[0036]作為本發(fā)明一個(gè)可選實(shí)施例,在所述通過(guò)預(yù)設(shè)的負(fù)載均衡算法和所述負(fù)載值均衡所述存儲(chǔ)服務(wù)器的負(fù)載的步驟之后,所述方法還包括:
[0037]當(dāng)進(jìn)行負(fù)載均衡的存儲(chǔ)服務(wù)器的數(shù)據(jù)塊的數(shù)量差小于預(yù)設(shè)的最小數(shù)量閾值時(shí),停止所述負(fù)載均衡。
[0038]實(shí)施例二
[0039]如圖2所示為本發(fā)明實(shí)施例提供的均衡服務(wù)器負(fù)載系統(tǒng)的結(jié)構(gòu)圖,為了便于說(shuō)明,僅不出與本發(fā)明實(shí)施例相關(guān)的部分,包括:
[0040]確定單元201,用于通過(guò)Balancer進(jìn)程對(duì)MongoDB系統(tǒng)的所有存儲(chǔ)服務(wù)器中的存儲(chǔ)的數(shù)據(jù)塊進(jìn)行掃描,根據(jù)所述數(shù)據(jù)塊的數(shù)量確定需要進(jìn)行負(fù)載均衡的存儲(chǔ)服務(wù)器和每個(gè)數(shù)據(jù)