《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 通信與網(wǎng)絡(luò) > 設(shè)計(jì)應(yīng)用 > 基于數(shù)據(jù)庫(kù)集群的動(dòng)態(tài)負(fù)載均衡研究與實(shí)現(xiàn)
基于數(shù)據(jù)庫(kù)集群的動(dòng)態(tài)負(fù)載均衡研究與實(shí)現(xiàn)
來(lái)源:微型機(jī)與應(yīng)用2011年第2期
何 駿1,熊 偉1,陳 犖1,殷佳欣2
(1.國(guó)防科學(xué)技術(shù)大學(xué) 電子科學(xué)與工程學(xué)院,湖南 長(zhǎng)沙410073; 2.中國(guó)科學(xué)院 軟件所,北京1
摘要: 針對(duì)數(shù)據(jù)庫(kù)集群負(fù)載問(wèn)題,提出了一種動(dòng)態(tài)負(fù)載均衡方法,并進(jìn)一步設(shè)計(jì)、實(shí)現(xiàn)了包括CPU使用率、磁盤存儲(chǔ)量、磁盤響應(yīng)效率、網(wǎng)絡(luò)延時(shí)、內(nèi)存使用率等在內(nèi)的多指標(biāo)的節(jié)點(diǎn)負(fù)載測(cè)量和實(shí)時(shí)監(jiān)控。該算法根據(jù)各節(jié)點(diǎn)的負(fù)載反饋信息進(jìn)行任務(wù)分配,實(shí)現(xiàn)了負(fù)載均衡。性能分析和實(shí)驗(yàn)表明,該算法具有較高的負(fù)載均衡度和較低的系統(tǒng)開(kāi)銷。
Abstract:
Key words :

摘  要: 針對(duì)數(shù)據(jù)庫(kù)集群負(fù)載問(wèn)題,提出了一種動(dòng)態(tài)負(fù)載均衡方法,并進(jìn)一步設(shè)計(jì)、實(shí)現(xiàn)了包括CPU使用率、磁盤存儲(chǔ)量、磁盤響應(yīng)效率、網(wǎng)絡(luò)延時(shí)、內(nèi)存使用率等在內(nèi)的多指標(biāo)的節(jié)點(diǎn)負(fù)載測(cè)量實(shí)時(shí)監(jiān)控。該算法根據(jù)各節(jié)點(diǎn)的負(fù)載反饋信息進(jìn)行任務(wù)分配,實(shí)現(xiàn)了負(fù)載均衡。性能分析和實(shí)驗(yàn)表明,該算法具有較高的負(fù)載均衡度和較低的系統(tǒng)開(kāi)銷。
關(guān)鍵詞: 動(dòng)態(tài)負(fù)載均衡;數(shù)據(jù)庫(kù)集群;負(fù)載測(cè)量;實(shí)時(shí)監(jiān)控

    隨著數(shù)據(jù)庫(kù)技術(shù)的發(fā)展和各種數(shù)據(jù)庫(kù)產(chǎn)品的產(chǎn)生,數(shù)據(jù)庫(kù)系統(tǒng)在各行各業(yè)應(yīng)用廣泛,隨著應(yīng)用需求的不斷增加,越來(lái)越多的用戶希望能夠透明地訪問(wèn)和處理來(lái)自多個(gè)數(shù)據(jù)庫(kù)的數(shù)據(jù)。同時(shí),電子商務(wù)和信息技術(shù)的迅猛發(fā)展使數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)不堪重負(fù),將這些數(shù)據(jù)庫(kù)有機(jī)地連接起來(lái),統(tǒng)一管理,協(xié)調(diào)工作,不但能提高數(shù)據(jù)庫(kù)的性能和可用性,而且解決了遺留系統(tǒng)的問(wèn)題。對(duì)于這些通過(guò)網(wǎng)絡(luò)連接起來(lái)的數(shù)據(jù)庫(kù)而言,必須能夠?qū)崟r(shí)處理大量的用戶請(qǐng)求,而且必須能向客戶提供高質(zhì)量服務(wù)。但是這些系統(tǒng)潛在性能的實(shí)際利用率通常僅為1%~10%[1],導(dǎo)致系統(tǒng)運(yùn)行效率低下。如何才能提高由網(wǎng)絡(luò)連接起來(lái)的數(shù)據(jù)庫(kù)的響應(yīng)速度、穩(wěn)定性和擴(kuò)展性,并且保護(hù)最初的硬件投資;如何避免大量用戶請(qǐng)求對(duì)系統(tǒng)帶來(lái)的沖擊,負(fù)載均衡為設(shè)計(jì)者提供了一條途徑,它是提高系統(tǒng)資源利用率的一個(gè)關(guān)鍵技術(shù)[2-3],它在后端數(shù)據(jù)庫(kù)間分發(fā)客戶請(qǐng)求,以達(dá)到減少系統(tǒng)瓶頸、增強(qiáng)系統(tǒng)響應(yīng)能力。
1 負(fù)載均衡
    對(duì)于一個(gè)分布式計(jì)算機(jī)系統(tǒng),由于任務(wù)到達(dá)的隨機(jī)性,以及各處理節(jié)點(diǎn)處理能力上的差異,當(dāng)系統(tǒng)運(yùn)行一段時(shí)間后,某些節(jié)點(diǎn)分配的任務(wù)還很多(稱之為超載),而另一些節(jié)點(diǎn)卻是空閑的(稱之為輕載)。一方面,使超載節(jié)點(diǎn)盡可能快地完成任務(wù)是當(dāng)務(wù)之急;另一方面,使某些節(jié)點(diǎn)空閑是一種浪費(fèi)。如何避免這種空閑與忙等待并存的情況,從而有效地提高系統(tǒng)的資源利用率,減少任務(wù)的平均響應(yīng)時(shí)間,促使負(fù)載均衡的產(chǎn)生與發(fā)展。
    負(fù)載均衡設(shè)法對(duì)分配給各節(jié)點(diǎn)的任務(wù)進(jìn)行重新調(diào)度,并通過(guò)進(jìn)程遷移(又稱為任務(wù)遷移),使各節(jié)點(diǎn)負(fù)載大致相等。
    目前普遍使用的數(shù)據(jù)庫(kù)集群系統(tǒng)負(fù)載均衡方法包括:
    (1)Random:即隨機(jī)選擇法。在后端中隨機(jī)選擇一個(gè)節(jié)點(diǎn)來(lái)執(zhí)行用戶查詢請(qǐng)求;
    (2)Round Robin:即輪詢法。第一個(gè)請(qǐng)求發(fā)送到第一個(gè)后端,第二個(gè)請(qǐng)求發(fā)送到第二個(gè)后端,依此類推。不斷地循環(huán),直到請(qǐng)求又從第一個(gè)后端開(kāi)始;
    (3)Weight Round Robin:即加權(quán)輪詢法。與輪詢方法相同,但是給每個(gè)后端數(shù)據(jù)庫(kù)分配了一個(gè)權(quán)重值。這個(gè)值決定了這個(gè)后端相對(duì)于其他后端接受負(fù)載的比例。例如,一個(gè)后端的權(quán)重值為2,那么其負(fù)載的請(qǐng)求數(shù)是權(quán)重為1的后端的兩倍。
    然而,上述負(fù)載均衡方法均沒(méi)有考慮到不同計(jì)算機(jī)節(jié)點(diǎn)的差異性。隨機(jī)選擇法總是隨機(jī)選擇數(shù)據(jù)庫(kù)節(jié)點(diǎn),完全不了解后端狀態(tài)也完全沒(méi)有可控性。而輪詢法和加權(quán)輪詢法在各個(gè)后端數(shù)據(jù)庫(kù)之間按順序循環(huán)執(zhí)行,這雖然可以使每個(gè)后端都有任務(wù),但并不能做到各個(gè)后端任務(wù)的最優(yōu)分配。
    因此,需要提供一種數(shù)據(jù)庫(kù)集群系統(tǒng)中進(jìn)行動(dòng)態(tài)負(fù)載均衡的方法和系統(tǒng),通過(guò)對(duì)數(shù)據(jù)庫(kù)后端節(jié)點(diǎn)的運(yùn)行狀態(tài)進(jìn)行測(cè)量,實(shí)時(shí)獲得后端節(jié)點(diǎn)的響應(yīng)效率評(píng)價(jià)值,當(dāng)集群控制器收到用戶請(qǐng)求時(shí),選擇效率評(píng)價(jià)值最高的后端節(jié)點(diǎn)來(lái)執(zhí)行,以避免后端節(jié)點(diǎn)的過(guò)熱和故障。
2 動(dòng)態(tài)負(fù)載均衡設(shè)計(jì)
    針對(duì)上面負(fù)載均衡方法的不足,提出了基于節(jié)點(diǎn)狀態(tài)的動(dòng)態(tài)負(fù)載均衡方法可對(duì)存儲(chǔ)節(jié)點(diǎn)的即時(shí)狀態(tài)進(jìn)行動(dòng)態(tài)測(cè)量和計(jì)算,與傳統(tǒng)的節(jié)點(diǎn)狀態(tài)無(wú)關(guān)的均衡方法相比,動(dòng)態(tài)均衡方法可以更有效地均衡負(fù)載、防止熱點(diǎn)和單點(diǎn)故障。
    在如圖1所示的數(shù)據(jù)庫(kù)集群系統(tǒng)中,用戶提出請(qǐng)求后通過(guò)集群控制器對(duì)數(shù)據(jù)庫(kù)后端節(jié)點(diǎn)進(jìn)行操作。集群控制器包含負(fù)載均衡決策組件、后端檢測(cè)組件、用戶請(qǐng)求分發(fā)組件和負(fù)載信息表,其中,負(fù)載均衡決策組件用于執(zhí)行負(fù)載均衡決策過(guò)程;后端檢測(cè)組件用于執(zhí)行后端負(fù)載檢測(cè)過(guò)程;負(fù)載信息表用于保存后端負(fù)載檢測(cè)過(guò)程所得出的測(cè)量值;用戶請(qǐng)求分發(fā)組件用于暫存用戶請(qǐng)求、發(fā)起后端負(fù)載檢測(cè)過(guò)程、發(fā)起負(fù)載均衡決策過(guò)程、并將用戶請(qǐng)求發(fā)至決策結(jié)果所包含的數(shù)據(jù)庫(kù)后端節(jié)點(diǎn)執(zhí)行。

    數(shù)據(jù)庫(kù)后端節(jié)點(diǎn)包含通信組件、數(shù)據(jù)庫(kù)服務(wù)器和負(fù)載測(cè)量組件,其中,通信組件用于接收后端檢測(cè)請(qǐng)求、發(fā)起負(fù)載測(cè)量、將負(fù)載測(cè)量值存入集群控制中的負(fù)載信息表中,并接受集群控制器發(fā)來(lái)的用戶請(qǐng)求,將其發(fā)給數(shù)據(jù)庫(kù)服務(wù)器執(zhí)行,將得到的結(jié)果集返回至集群控制器;數(shù)據(jù)庫(kù)服務(wù)器用于接收通信組件發(fā)來(lái)的用戶請(qǐng)求并作出應(yīng)答;負(fù)載測(cè)量組件用于接收通信組件發(fā)來(lái)的負(fù)載測(cè)量請(qǐng)求并作出應(yīng)答。負(fù)載測(cè)量組件又進(jìn)一步包含:CPU使用率檢測(cè)模塊、內(nèi)存使用率檢測(cè)模塊、磁盤已占用空間比例檢測(cè)模塊、空閑磁盤大小檢測(cè)模塊、磁盤IO延遲檢測(cè)模塊和網(wǎng)絡(luò)延遲檢測(cè)模塊。
    動(dòng)態(tài)負(fù)載均衡算法如下:
    Step1:Measure the load balancing information
         Create load balance table
         Create load balance trigger
    Step2:Compute the load balancing information
         Normalize the load data
         Compute the entropy of the load data
         Compute the weight of the load data based on the entropy
         Compute the sum of the weight to quantify the load
Step3:Select the node to execute
3 動(dòng)態(tài)負(fù)載均衡實(shí)現(xiàn)
3.1 負(fù)載信息測(cè)量

    負(fù)載信息測(cè)量主要解決節(jié)點(diǎn)負(fù)載評(píng)價(jià)問(wèn)題,目的是為了更確切有效地對(duì)節(jié)點(diǎn)負(fù)載情況進(jìn)行評(píng)價(jià),以準(zhǔn)確發(fā)現(xiàn)節(jié)點(diǎn)是否超載,同時(shí)有助于更有效地尋找空閑節(jié)點(diǎn)。
    負(fù)載測(cè)量在動(dòng)態(tài)負(fù)載均衡中起著重要的作用,只有負(fù)載信息測(cè)量準(zhǔn)確,才能為進(jìn)一步的負(fù)載決策提供條件,才可以確定節(jié)點(diǎn)是否超載,是否需要轉(zhuǎn)移新任務(wù)。
    本文中以CPU使用率、內(nèi)存使用率、空閑磁盤占用比例、空閑磁盤大小、網(wǎng)絡(luò)延遲、磁盤IO延遲作為負(fù)載信息的測(cè)量對(duì)象。
3.1.1 CPU使用率測(cè)量CU
      利用Windows API函數(shù)可得知CPU空閑時(shí)間和系統(tǒng)時(shí)間,從而得知CPU空閑使用率,進(jìn)而得知CPU使用率。CPU空閑使用率CurrentCpuIdle=SysPerfInfo.liIdleTime/SysTimeInfo.liKeSystemTime;CPU
使用率CurrentCpuUsage%=100-(CurrentCpuIdle×100)。
3.1.2 內(nèi)存使用率測(cè)量MU
      利用Windows API函數(shù)可直接得知內(nèi)存使用率,GlobalMemoryStatus(&stat);memory_usage%=stat.dwMemoryLoad。
3.1.3 空閑磁盤占用比例測(cè)量DFE
    利用Windows API函數(shù)直接可得知空閑磁盤和整個(gè)磁盤的大小,它們的比值即為空閑磁盤占用比例。
    fResult=pGetDiskFreeSpaceEx(pszDrive,
        (PULARGE_INTEGER)&i64FreeBytesToCaller,
        (PULARGE_INTEGER)&i64TotalBytes,
        (PULARGE_INTEGER)&i64FreeBytes);
    空閑磁盤占用比例disk_usage%=i64FreeBytes×100/i64TotalBytes。
3.1.4 空閑磁盤大小測(cè)量DF
    根據(jù)上面的pGetDiskFreeSpaceEx函數(shù)可直接得出空閑磁盤大小diskfree=i64FreeBytes/(1024×1024)。
3.1.5 磁盤IO延遲測(cè)量IO
    磁盤IO延遲的原理是通過(guò)讀取磁盤上的文件時(shí)間來(lái)得出磁盤IO延遲。
    OutSpeed=(sysafter.wMinute-sysbefore.wMinute)×60000+
    (sysafter.wSecond-sysbefore.wSecond)×1000+
    (sysafter.wMilliseconds-sysbefore.wMilliseconds);
3.1.6 網(wǎng)絡(luò)延遲測(cè)量ND
  網(wǎng)絡(luò)延遲的原理是對(duì)各個(gè)后端節(jié)點(diǎn)執(zhí)行一條SQL語(yǔ)句,SQL語(yǔ)句運(yùn)行的時(shí)間即為網(wǎng)絡(luò)延遲。
    long before=System.currentTimeMillis();
    PreparedStatement pm =conn.prepareStatement("DELETE FROM loadstate");
    pm.executeUpdate();
    long now=System.currentTimeMillis();
    long timegap=now-before;
    圖2所示為在集群管理器中負(fù)載均衡測(cè)量截圖。

3.2 負(fù)載決策
    節(jié)點(diǎn)的負(fù)載決策是負(fù)載均衡的一個(gè)重要因素,因?yàn)橹挥邢到y(tǒng)準(zhǔn)確及時(shí)地對(duì)節(jié)點(diǎn)負(fù)載進(jìn)行評(píng)價(jià)記錄,節(jié)點(diǎn)才可以及時(shí)準(zhǔn)確地確定本身是否超載,是否需要轉(zhuǎn)移新進(jìn)任務(wù),同時(shí)忙節(jié)點(diǎn)也可以有效地尋找空閑節(jié)點(diǎn)以轉(zhuǎn)移自身的超載任務(wù),相反,如果節(jié)點(diǎn)負(fù)載決策不準(zhǔn)確,則節(jié)點(diǎn)無(wú)法及時(shí)準(zhǔn)確定位自己的狀態(tài),以至于忙節(jié)點(diǎn)在超載的狀態(tài)下仍接受新的任務(wù)。
    一般地,某個(gè)屬性的屬性值變異程度越大,信息熵越小,該屬性提供的信息量越大,即該屬性在方案排序中所起的作用越大,從而該屬性的權(quán)重也應(yīng)該越大;反之,某個(gè)屬性的屬性值變異程度越小,信息熵越大,該屬性提供的信息量越小,即該屬性在方案排序中所起的作用越小,從而該屬性的權(quán)重也應(yīng)該越小。
  
計(jì)算節(jié)點(diǎn)p上的模糊效用值z(mì)i;
    步驟5:根據(jù)zi(i∈M)對(duì)節(jié)點(diǎn)進(jìn)行排序和擇優(yōu),zi值最大的為最優(yōu)節(jié)點(diǎn)。
    下面通過(guò)一組測(cè)得的負(fù)載信息數(shù)據(jù)來(lái)說(shuō)明整個(gè)負(fù)載決策的流程。
    從3個(gè)節(jié)點(diǎn)采集到的負(fù)載決策矩陣如表1所示。


    步驟1:根據(jù)式(1)、式(2)規(guī)范化決策矩陣,得到規(guī)范化矩陣R如表2所示。
  

    步驟5:根據(jù)表格5中模糊效用值對(duì)節(jié)點(diǎn)進(jìn)行排序和擇優(yōu),zi最大的為最優(yōu)節(jié)點(diǎn),即第一個(gè)節(jié)點(diǎn)為最優(yōu)節(jié)點(diǎn),這時(shí)將把任務(wù)分配給第一個(gè)節(jié)點(diǎn)。
4 性能測(cè)試與分析
    為了驗(yàn)證該負(fù)載均衡算法的有效性和優(yōu)越性[5-6],通過(guò)實(shí)驗(yàn)進(jìn)行了驗(yàn)證。集群由4臺(tái)電腦組成,它們由局域網(wǎng)連接而成,網(wǎng)絡(luò)帶寬100 Mb/s,4臺(tái)電腦配置相同:CPU是Intel(R) Xeon(R) E5405 2.00 GHz,3G內(nèi)存,Windows XP SP3操作系統(tǒng)。在其中的一臺(tái)電腦上配置集群控制器,另外3臺(tái)電腦上裝有SQL Server2005數(shù)據(jù)庫(kù)。
    實(shí)驗(yàn)對(duì)隨機(jī)法、輪詢法、加權(quán)輪詢法和動(dòng)態(tài)負(fù)載均衡算法的效率進(jìn)行對(duì)比,分別讓集群中幾個(gè)節(jié)點(diǎn)的狀態(tài)不同,首先在3個(gè)節(jié)點(diǎn)輕載的情況下對(duì)4種負(fù)載均衡方法進(jìn)行對(duì)比;然后使其中一個(gè)節(jié)點(diǎn)超載對(duì)4種負(fù)載均衡進(jìn)行對(duì)比;使其中兩個(gè)節(jié)點(diǎn)超載再進(jìn)行對(duì)比。
    根據(jù)實(shí)驗(yàn)數(shù)據(jù)得出以上三種實(shí)驗(yàn)的對(duì)比圖如圖3、圖4、圖5所示。

    根據(jù)實(shí)驗(yàn)可以得出:在節(jié)點(diǎn)都很空閑(輕載)的情況下,動(dòng)態(tài)負(fù)載均衡不一定是最優(yōu)的,反而有時(shí)因?yàn)闆Q策運(yùn)算會(huì)花費(fèi)時(shí)間導(dǎo)致其查詢的時(shí)間會(huì)更長(zhǎng)。在節(jié)點(diǎn)輕載和超載不一的時(shí)候,動(dòng)態(tài)負(fù)載均衡體現(xiàn)出它的優(yōu)越性,是幾種負(fù)載策略中效率最高的;加權(quán)輪詢法次之;隨機(jī)法和輪詢法效率較低。
    針對(duì)分布式數(shù)據(jù)庫(kù)集群關(guān)鍵技術(shù)的負(fù)載均衡進(jìn)行研究,提出了一種動(dòng)態(tài)負(fù)載均衡策略,對(duì)于縮短事務(wù)平均響應(yīng)時(shí)間和提高整個(gè)系統(tǒng)資源利用率起了很好的作用,并通過(guò)實(shí)驗(yàn)和其他負(fù)載均衡策略進(jìn)行對(duì)比,證明了它的有效性和高效性。在今后的工作中,將進(jìn)一步完善本文提出的負(fù)載均衡這一數(shù)據(jù)庫(kù)集群關(guān)鍵技術(shù),進(jìn)一步提升分布式集群數(shù)據(jù)庫(kù)系統(tǒng)的可靠性、穩(wěn)定性以及高效性。
參考文獻(xiàn)
[1] YANG X J,DOU Y,HU Q F.Progress and challenges in  high performance computer technology[J].J Comput Sci & Technol,2006,21(5):674-681.
[2] 蔣江,張民選,廖湘科.基于多種資源的負(fù)載均衡算法的研究[J].電子學(xué)報(bào),2002,30(8):1148-1152.
[3] ZHENG G B.Achieving high performance on extremely large parallel machines:Performance Prediction and Load Balancing[D].Urbana:UIUC,2005.
[4] 徐澤水.不確定多屬性決策方法及應(yīng)用[M].北京:清華大學(xué)出版社,2004.
[5] 陳勇.一種高效的分布式反饋流量負(fù)載均衡算法[J].計(jì)算機(jī)工程,2009,35(2):98-102.
[6] 谷鳳娜,張志斌,王麗宏.基于分布式入侵檢測(cè)系統(tǒng)的負(fù)載均衡算法的比較[J].計(jì)算機(jī)科學(xué),2008,35(11):63-73.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。