亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種分布式數(shù)據(jù)庫的負載均衡方法

文檔序號:6438943閱讀:332來源:國知局
專利名稱:一種分布式數(shù)據(jù)庫的負載均衡方法
技術(shù)領(lǐng)域
本發(fā)明涉及計算機技術(shù)領(lǐng)域,特別涉及一種分布式數(shù)據(jù)庫的負載均衡方法。
背景技術(shù)
在一些數(shù)據(jù)量大的應(yīng)用系統(tǒng)中,需要將海量數(shù)據(jù)按照一定的算法分布在多個數(shù)據(jù)庫中。隨著時間的推移和數(shù)據(jù)的增多,可能數(shù)據(jù)的分布不再均衡,導(dǎo)致有些數(shù)據(jù)庫壓力過大,有些數(shù)據(jù)庫壓力偏小。需要將數(shù)據(jù)從壓力大的數(shù)據(jù)庫遷移一些到壓力小的數(shù)據(jù)庫中?;蛘咝枰略鰯?shù)據(jù)庫,將原來數(shù)據(jù)庫中的數(shù)據(jù)遷移一些到新增的數(shù)據(jù)庫中。在一些承載大量用戶數(shù)據(jù)的應(yīng)用系統(tǒng)中,如即時通訊系統(tǒng)中,為節(jié)約運營成本充分利用服務(wù)器硬件資源,往往將海量的用戶數(shù)據(jù)按照“服務(wù)器的承載量”平均分配到各個數(shù)據(jù)庫服務(wù)器中。在這種方式下,通過判斷各數(shù)據(jù)庫服務(wù)器中的用戶數(shù)量,把用戶數(shù)據(jù)從用戶數(shù)量多的數(shù)據(jù)庫服務(wù)器中遷移到用戶數(shù)量較少的數(shù)據(jù)庫服務(wù)器中,從而減輕各數(shù)據(jù)庫服務(wù)器的壓力,實現(xiàn)負載均衡。上述傳統(tǒng)的按“用戶數(shù)量”作為指標的數(shù)據(jù)庫負載均衡方式,存在如下缺陷(1) 雖然根據(jù)用戶數(shù)量將用戶數(shù)據(jù)均衡分布在多臺數(shù)據(jù)庫服務(wù)器中,但這種方式的主要出發(fā)點僅僅是對存儲資源的考量,隨著存儲介質(zhì)成本的走低,對數(shù)據(jù)庫服務(wù)器的其他資源(如 CPU、內(nèi)存、網(wǎng)絡(luò)帶寬等)的利用率就顯得尤為重要。這種方式對數(shù)據(jù)庫服務(wù)器硬件資源利用情況考慮不全。將“用戶數(shù)量”作為衡量標準的負載均衡方式容易造成部分數(shù)據(jù)庫服務(wù)器的CPU、內(nèi)存、網(wǎng)絡(luò)帶寬等資源的占用居高不下,而其他數(shù)據(jù)庫服務(wù)器則處于較空閑狀態(tài)。 (2)在實際的用戶數(shù)據(jù)遷移過程中,會造成大量的較低使用頻率的用戶數(shù)據(jù)遷移,不僅占用額外的系統(tǒng)資源和時間開銷,也為用戶的使用帶來一定的風險。此外,現(xiàn)有技術(shù)中還有采用“地域劃分”作為指標的數(shù)據(jù)庫服務(wù)器負載均衡方式, 這種方式本質(zhì)上是按“用戶數(shù)量”作為指標的數(shù)據(jù)庫服務(wù)器負載均衡方式的變形。這種方式按照“所在地域”的不同將用戶數(shù)據(jù)分配在不同的數(shù)據(jù)庫服務(wù)器或數(shù)據(jù)庫服務(wù)器集群上, 用戶較多的地區(qū)配置多臺數(shù)據(jù)庫服務(wù)器或較大規(guī)模的數(shù)據(jù)庫服務(wù)器集群,反之則配置較少的數(shù)據(jù)庫服務(wù)器或較小規(guī)模的數(shù)據(jù)庫服務(wù)器集群。本質(zhì)上該種均衡方式仍然是按照“用戶數(shù)量”來分配資源,存在同樣的諸多弊端。

發(fā)明內(nèi)容
本發(fā)明提供了一種分布式數(shù)據(jù)庫負載均衡方法,該方法綜合考慮了數(shù)據(jù)庫服務(wù)器的硬件資源的使用頻率,保證了在存儲資源成本降低的趨勢中高效地利用數(shù)據(jù)庫服務(wù)器的其他硬件資源。為達到上述目的,本發(fā)明的技術(shù)方案是這樣實現(xiàn)的一種分布式數(shù)據(jù)庫的負載均衡方法,該方法包括獲取各數(shù)據(jù)庫中的活躍用戶數(shù)量;根據(jù)所述獲取的各數(shù)據(jù)庫中的活躍用戶數(shù)量,以及按照活躍用戶均衡分布在各個數(shù)據(jù)庫中的原則,確定各數(shù)據(jù)庫需要遷出或遷入的活躍用戶數(shù)據(jù);
根據(jù)所述確定結(jié)果,在各數(shù)據(jù)庫間進行活躍用戶的數(shù)據(jù)的遷移。
其中,所述活躍用戶為在單位時間內(nèi)進行過業(yè)務(wù)操作,并且操作次數(shù)沒有超過設(shè)定閥值的用戶。
本發(fā)明實施例的有益效果是由于活躍用戶的數(shù)量對數(shù)據(jù)庫服務(wù)器的CPU、內(nèi)存等資源以及網(wǎng)絡(luò)帶寬有極大的影響,因此以活躍用戶為負載均衡指標的方案,有效地均衡了各數(shù)據(jù)庫服務(wù)器的CPU、內(nèi)存等資源以及網(wǎng)絡(luò)帶寬資源的負載;并且僅遷移活躍用戶,無需遷移大量的普通用戶,能夠大量節(jié)省系統(tǒng)資源和時間開銷。


圖1是本發(fā)明實施例中的一種分布式數(shù)據(jù)庫的負載均衡方法的流程圖2是傳統(tǒng)的數(shù)據(jù)庫負載均衡方式和本發(fā)明中的數(shù)據(jù)庫負載均衡方式的對比示意圖3是圖2中的按活躍用戶進行負載均衡的方式的具體流程圖4是本發(fā)明實施例中的為實現(xiàn)數(shù)據(jù)遷移所設(shè)定的分布式數(shù)據(jù)庫的示意圖5是本發(fā)明實施例中的用戶數(shù)據(jù)從DB_A1和DB_B1遷移到DB_A2和DB_B2的流程圖6是本發(fā)明中的用戶數(shù)據(jù)從DB_A1和DB_B1遷移到DB_A2和DB_B2的一個較佳實施例的流程圖。
具體實施方式
本申請的發(fā)明人在詳細了解數(shù)據(jù)庫服務(wù)器的負載及其硬件資源的使用情況后,確定主營業(yè)務(wù)占用的硬件資源類型,從技術(shù)層面講就是確定系統(tǒng)中需要頻繁使用的硬件資源和成本昂貴的硬件資源。在大量用戶的應(yīng)用系統(tǒng)中(如即時通信系統(tǒng)),用戶的操作行為往往會占用一定的服務(wù)器資源(如CPU、內(nèi)存、網(wǎng)絡(luò)帶寬等)。綜合數(shù)據(jù)庫服務(wù)器各部分硬件資源的成本,本申請的發(fā)明人提出了一種新的負載均衡思想一即按“活躍用戶數(shù)”來進行負載均衡。
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明實施方式作進一步地詳細描述。
圖1是本發(fā)明實施例中的一種分布式數(shù)據(jù)庫的負載均衡方法的流程圖。所述分布式數(shù)據(jù)庫由分布式的數(shù)據(jù)庫服務(wù)器或分布式的服務(wù)器集群實現(xiàn),如圖1所示,該方法包括
101,獲取各數(shù)據(jù)庫中的活躍用戶數(shù)量。
102,根據(jù)所述獲取的各數(shù)據(jù)庫中的活躍用戶數(shù)量,以及按照活躍用戶均衡分布在各個數(shù)據(jù)庫中的原則,確定各數(shù)據(jù)庫需要遷出或遷入的活躍用戶數(shù)據(jù)。
103,根據(jù)所述確定結(jié)果,在各數(shù)據(jù)庫間進行活躍用戶的數(shù)據(jù)的遷移。
在本發(fā)明中,活躍用戶為在單位時間內(nèi)進行過業(yè)務(wù)操作,并且操作次數(shù)沒有超過設(shè)定閥值的用戶。即“活躍用戶”是指使用系統(tǒng)頻率較高的那些正常用戶,注意區(qū)別個別使用頻率超高的以惡意消耗系統(tǒng)資源為目的的惡意用戶。
在本發(fā)明的一個實施例中,活躍用戶的統(tǒng)計規(guī)則為在單位時間內(nèi),凡是進行過系統(tǒng)主營業(yè)務(wù)操作并且是非惡意操作行為的用戶均算作活躍用戶。例如在即時通信系統(tǒng)中, 單位時間內(nèi)如果用戶有登陸、注銷、發(fā)送短消息、語音會話等行為,即認定其為活躍用戶。同時,可以設(shè)置一個或多個合理的閥值來規(guī)定用戶操作行為的次數(shù),在統(tǒng)計活躍用戶的過程中,如果發(fā)現(xiàn)用戶的某一種行為超過設(shè)定的閥值則判定其為惡意用戶并且不會將其計入活躍用戶的統(tǒng)計。
圖2是傳統(tǒng)的數(shù)據(jù)庫負載均衡方式和本發(fā)明中的數(shù)據(jù)庫負載均衡方式的對比示意圖。如圖2所示,豎虛線的左側(cè)為傳統(tǒng)的數(shù)據(jù)庫負載均衡方式,右側(cè)為本發(fā)明中的按活躍用戶進行數(shù)據(jù)庫負載均衡方式。每個類型的負載均衡方式中都含有A、B、C三個數(shù)據(jù)庫服務(wù)器集群,而每個集群中的矩形表示數(shù)據(jù)庫服務(wù)器(沒有填充線的表示數(shù)據(jù)庫服務(wù)器及其網(wǎng)絡(luò)負載較低,填充斜線的表示負載居中,填充橫線的表示負載較高),圓柱形表示其中的用戶數(shù)量(分界的上半部分表示普通用戶,下半部分表示活躍用戶),未分界的圓柱形表示全局數(shù)據(jù)庫。
參見圖2,傳統(tǒng)的數(shù)據(jù)庫負載均衡方式為各個集群中分布等量的用戶數(shù)據(jù),當集群A中活躍用戶較少時,A中的用戶數(shù)據(jù)主要為使用次數(shù)較少的“沉睡數(shù)據(jù)”,此時服務(wù)器及網(wǎng)絡(luò)帶寬均處于低負載狀態(tài)。而在集群B中隨著活躍用戶比例的升高,服務(wù)器及網(wǎng)絡(luò)帶寬負載均處于上升狀態(tài),此時服務(wù)器處于中度負載裝填。在集群C中,活躍用戶比例已居高不下,造成服務(wù)器及網(wǎng)絡(luò)帶寬壓力驟增,處于高負荷狀態(tài)。這個時候,通常的做法是增加服務(wù)器集群數(shù)量,將用戶數(shù)據(jù)遷移到新的集群中,從而使高負載的集群C上的用戶數(shù)量減少已達到負載均衡的目的。
參見圖2,本發(fā)明中,活躍用戶負載均衡方式著重考慮的是活躍用戶的數(shù)量,因為用戶的操作行為會占用服務(wù)器及網(wǎng)絡(luò)帶寬資源,而用戶不進行任何操作的話,他占用的僅僅是磁盤的一塊存儲空間,這在現(xiàn)在的低存儲成本時期不是個問題?;钴S用戶的數(shù)量對服務(wù)器及網(wǎng)絡(luò)帶寬資源有極大的影響,圖2中的活躍用戶部分所展示的是通常的服務(wù)器負載狀況,也就是說大部門情況下活躍用戶是均衡分布在各個服務(wù)器集群中的,這樣各服務(wù)器集群的壓力都比較小。但當在某段時間后或出現(xiàn)突發(fā)情況時,某個集群中出現(xiàn)較多的活躍用戶,這時只要把活躍用戶遷移到負載較輕的服務(wù)器集群上即可,不用增加額外的硬件成本,同時也減少了需要遷移的用戶數(shù)量,進而減少用戶使用風險。
因此,如圖2右側(cè)的活躍用戶遷移所示,集群A、B、C中的用戶總數(shù)不同,A禾Π B中各有300萬活躍用戶,而C中只有100萬活躍用戶,這時從A和B中各遷移50萬活躍用戶到C中使Α、B、C都處于相對較低的負載。
圖3是圖2中的按活躍用戶進行負載均衡的方式的具體流程圖。
如圖3所示,在各數(shù)據(jù)庫服務(wù)器集群上分別配置有統(tǒng)計程序即統(tǒng)計單元1、由各統(tǒng)計程序即統(tǒng)計單元統(tǒng)計對應(yīng)數(shù)據(jù)庫服務(wù)器集群中的活躍用戶,并保存到本集群中;2、各數(shù)據(jù)庫服務(wù)器集群將自身中的活躍用戶數(shù)量上報到全局數(shù)據(jù)庫中;3、通過訪問全局數(shù)據(jù)庫獲取各數(shù)據(jù)庫中的活躍用戶數(shù)量,生成遷移任務(wù);4、執(zhí)行相應(yīng)的遷移任務(wù);5如果遷移成功,則刪除原數(shù)據(jù);6、如果遷移失敗,則刪除目標數(shù)據(jù)。
在圖2和3所示的實施例中,增加了全局數(shù)據(jù)庫用來收集各個集群中的活躍用戶數(shù)量。在本發(fā)明的其他實施例中,也可以沒有全局數(shù)據(jù)庫,此時活躍用戶的統(tǒng)計數(shù)據(jù)需要分別存儲在本地的集群Α、B、C中,通過訪問不同的數(shù)據(jù)庫服務(wù)器集群來獲得活躍用戶信息。當增加了全局數(shù)據(jù)庫之后,全局數(shù)據(jù)庫可以定期和各個集群交換活躍用戶信息,方便實現(xiàn)完全自動化的動態(tài)的負載平衡和用戶遷移機制。若實現(xiàn)了自動負載平衡和用戶遷移機制, 當添加了新的服務(wù)器集群后,該機制會自動將活躍用戶遷移到新的集群設(shè)備上實現(xiàn)“無縫擴容”。
下面給出一個實現(xiàn)上述方案的一個具體的實施例。具體操作包括如下步驟
步驟1、在約定的時刻,統(tǒng)計前一段時間(如前一日)各數(shù)據(jù)庫服務(wù)器集群中的活躍用戶數(shù)量,并將統(tǒng)計結(jié)果計入全局數(shù)據(jù)庫中。
所述約定的時刻通常在服務(wù)器集群較空閑的時刻,例如凌晨1點。統(tǒng)計過程可以通過編寫帶定時功能的程序或服務(wù)實現(xiàn),這些程序或服務(wù)應(yīng)該運行在各服務(wù)器集群之中, 這里稱為統(tǒng)計單元。
步驟2、生成遷移列表。生成遷移列表的操作可采用不同的算法實現(xiàn),這里僅陳述本實施例中采用的一種算法根據(jù)各數(shù)據(jù)庫中的活躍用戶數(shù)量計算平均活躍用戶數(shù)量,根據(jù)該平均活躍用戶數(shù)量確定各數(shù)據(jù)庫的活躍用戶數(shù)據(jù)遷入量、遷出量和遷移關(guān)系;根據(jù)所述確定的各數(shù)據(jù)庫的活躍用戶數(shù)據(jù)遷入量、遷出量和遷移關(guān)系,確定各數(shù)據(jù)庫中的具體要遷移的活躍用戶數(shù)據(jù),以及遷移路徑。該算法具體為
21、在程序啟動時創(chuàng)建一個監(jiān)測線程,該監(jiān)測線程監(jiān)測所述各個數(shù)據(jù)庫服務(wù)器集群上的統(tǒng)計單元是否完成統(tǒng)計工作(如當日的統(tǒng)計工作是否完成),若已完成再執(zhí)行步驟 22,若沒有完成則繼續(xù)監(jiān)測。
22、查詢?nèi)謹?shù)據(jù)庫獲得各數(shù)據(jù)庫服務(wù)器集群中的活躍用戶數(shù)量,根據(jù)查詢結(jié)果在內(nèi)存中創(chuàng)建一張二維表格,其格式為數(shù)據(jù)庫服務(wù)器集群標識,活躍用戶數(shù)量,用戶索引; 其中所述用戶索引的初始值為活躍用戶的標識按遞增排序時的最小值,或活躍用戶的標識按遞減排序時的最大值。
23、根據(jù)所述二維表格中的各活躍用戶數(shù)量計算平均活躍用戶數(shù)量,平均活躍用戶數(shù)量=活躍用戶數(shù)量的總和/數(shù)據(jù)庫服務(wù)器集群的數(shù)量;從各數(shù)據(jù)庫的活躍用戶數(shù)量分別減去平均活躍用戶數(shù)量(即某集群中的活躍用戶數(shù)量-平均活躍用戶數(shù)量=遷移量),并將結(jié)果保存到一個一維數(shù)組中,該一維數(shù)組中的各元素與各數(shù)據(jù)庫一一對應(yīng)表示遷移量, 正數(shù)表示活躍用戶的遷出量,負數(shù)表示活躍用戶的遷入量;
24、從所述一維數(shù)組中找出最大的正數(shù)A和最小的負數(shù)B,并相加,若
結(jié)果為0,則在該一維數(shù)組中將A和B均記為0,轉(zhuǎn)入步驟25 ;
結(jié)果為正數(shù)C,則在該一維數(shù)組中,將A記為C,將B記為0,轉(zhuǎn)入步驟25 ;
結(jié)果為負數(shù)D,則在該一維數(shù)組中,將A記為0,將B記為D,轉(zhuǎn)入步驟25 ;
25、若存在遷移任務(wù)隊列,則根據(jù)步驟M中數(shù)據(jù)創(chuàng)建遷移任務(wù)并添加到任務(wù)隊列中;若遷移任務(wù)隊列不存在,則先創(chuàng)建遷移任務(wù)隊列,再根據(jù)步驟M中數(shù)據(jù)創(chuàng)建遷移任務(wù)并添加到任務(wù)隊列中;所述遷移任務(wù)為一種獨立的數(shù)據(jù)類型,其包含如下三個成員源數(shù)據(jù)庫標識,目標數(shù)據(jù)庫標識,遷移數(shù)量;其中
源數(shù)據(jù)庫標識為步驟M中的初始最大正數(shù)A所對應(yīng)的數(shù)據(jù)庫服務(wù)器集群的標識;
目標數(shù)據(jù)庫標識為步驟M中的初始最小負數(shù)B所對應(yīng)的數(shù)據(jù)庫服務(wù)器集群的標識;
遷移量同樣從步驟M得到,若步驟M中的結(jié)果為0時,遷移量等于最大正數(shù)A ; 若步驟M中的結(jié)果為正數(shù)C,則遷移量等于最大正數(shù)A與C的差值;若步驟M中的結(jié)果為負數(shù)D,則遷移量等于D與最小負數(shù)B的差值。
26、根據(jù)步驟22和25中的結(jié)果生成遷移文本文件(即遷移列表),具體為依次從遷移任務(wù)隊列中出隊遷移任務(wù),每出隊一個遷移任務(wù),按該遷移任務(wù)所示的遷移數(shù)量,在該遷移任務(wù)所示的源數(shù)據(jù)庫中,從該源數(shù)據(jù)庫在所述二維表格中對應(yīng)的用戶索引開始,按活躍用戶的標識的遞增或遞減的排序查找出相應(yīng)數(shù)量的活躍用戶的數(shù)據(jù),并將查找到的最后一個活躍用戶數(shù)據(jù)對應(yīng)的活躍用戶標識寫入所述二維表格的用戶索引中。根據(jù)所找出的活躍用戶的數(shù)據(jù)以及該遷移任務(wù)所示的目標數(shù)據(jù)庫,在遷移文本文件中生成多行遷移數(shù)據(jù); 其中,每個遷移數(shù)據(jù)占一行并用分號分隔,每行遷移數(shù)據(jù)的格式為用戶標識、源數(shù)據(jù)庫標識、目標數(shù)據(jù)庫標識。
然后出隊下一個遷移任務(wù),直到遷移任務(wù)隊列中的所有遷移任務(wù)都已被包含在遷移文本文件中。這樣遷移文本文件就包含的所有要進行遷移的遷移數(shù)據(jù)信息。遷移文本文件是一個臨時的數(shù)據(jù)結(jié)果,可以放在內(nèi)存中以減少執(zhí)行時間。
步驟3、根據(jù)所述遷移文本文件執(zhí)行真正的活躍用戶數(shù)據(jù)遷移操作。
在執(zhí)行真正的活躍用戶數(shù)據(jù)遷移時,需要考慮其他應(yīng)用對這些數(shù)據(jù)的使用,因此本發(fā)明中還給處理執(zhí)行真正的活躍用戶數(shù)據(jù)遷移的具體實現(xiàn)。
本發(fā)明后續(xù)給出的方案主要解決了分布式數(shù)據(jù)庫中的數(shù)據(jù)遷移問題,并能保證在數(shù)據(jù)遷移過程中不影響應(yīng)用系統(tǒng)的使用,保證了數(shù)據(jù)的可用性。具體思路為根據(jù)遷移文本文件,將每一條活躍用戶數(shù)據(jù)從源數(shù)據(jù)庫遷移到目標數(shù)據(jù)庫,在遷移過程中將此活躍用戶數(shù)據(jù)鎖定,保證了該活躍用戶數(shù)據(jù)的一致性。在遷移過程中,此用戶的數(shù)據(jù)仍然指向原始數(shù)據(jù)庫,遷移成功后指向目標數(shù)據(jù)庫;如果遷移失敗,用戶的原始數(shù)據(jù)不會發(fā)生改變,刪除目標數(shù)據(jù)庫的數(shù)據(jù),保證了數(shù)據(jù)的可用性以及不會產(chǎn)生垃圾數(shù)據(jù)。
圖4是本發(fā)明實施例中的為實現(xiàn)數(shù)據(jù)遷移所設(shè)定的分布式數(shù)據(jù)庫的示意圖。如圖 4所示,分布式數(shù)據(jù)庫由一個檢索庫和多個數(shù)據(jù)庫(這里稱為分布式的子庫)組成,其中
分布式的子庫是同質(zhì)同構(gòu)的一組數(shù)據(jù)庫,按照水平分片的方式存儲用戶數(shù)據(jù);例如,DB_A1和DB_B1是一組子數(shù)據(jù)庫、DB_A2和DB_B2是一組子數(shù)據(jù)庫,以此類推。
檢索庫存儲用戶標識和用戶數(shù)據(jù)在子庫中的位置信息之間的對應(yīng)關(guān)系,以及與用戶標識對應(yīng)的鎖標志。這里根據(jù)一定的算法將用戶數(shù)據(jù)分布在不同的字庫中,例如,根據(jù)對用戶標識進行取模的算法,或根據(jù)對用戶標識進行哈希取模的算法,建立用戶標識與用戶數(shù)據(jù)在子庫中的位置信息之間的對應(yīng)關(guān)系。在本實施例中,UserOOl的數(shù)據(jù)存儲在DB_A1和 DB_B1中,User002的數(shù)據(jù)存儲在DB_A2和DB_B2中,以此類推,則在本實施例中,檢索庫中存儲的初始內(nèi)容如下
UserOOlIndex =1Lock =false
User002Index =2Lock =false
User003Index =3Lock =false
User004Index =4Lock =false
其中,Index表示用戶數(shù)據(jù)在字庫中的位置信息,1表示數(shù)據(jù)庫DB_A1和DB_B1,以此類推?!癴alse”表示鎖標志無效,“ Ture ”表示有效。
下面以用戶UserOOl的數(shù)據(jù)從DB_A1和DB_B1遷移到DB_A2和DB_B2為例,對本發(fā)明中的數(shù)據(jù)遷移的流程進行說明。
圖5是本發(fā)明實施例中的用戶數(shù)據(jù)從DB_A1和DB_B1遷移到DB_A2和DB_B2的流程圖。如圖5所示,該流程包括
步驟51.根據(jù)用戶UserOOl的用戶標識查詢檢索庫,獲得該用戶數(shù)據(jù)在原子庫 (DB_A1和DB_B1)中的位置信息,并將與該用戶的用戶標識所對應(yīng)的鎖標志設(shè)置為有效。
這里將對應(yīng)的鎖標志設(shè)置為有效,即設(shè)置對應(yīng)的Lock = True ;這樣,在數(shù)據(jù)遷移過程中所有更新此用戶的數(shù)據(jù)的操作都不被允許。在遷移過程中系統(tǒng)獲取該用戶數(shù)據(jù)仍然指向原數(shù)據(jù)庫,不影響該用戶數(shù)據(jù)的讀取。
步驟52.根據(jù)所獲取的該用戶數(shù)據(jù)在原子庫中的位置信息,從原字庫中讀取用戶數(shù)據(jù),并將所獲取的用戶數(shù)據(jù)寫入目標子庫(DB_A2和DB_B2)中。
步驟53.如果寫入成功,則更新用戶數(shù)據(jù)的位置信息并解除鎖定,即將檢索庫中的與該用戶的標識對應(yīng)的用戶數(shù)據(jù)在子庫中的位置信息,修改為所寫入的目標子庫中的位置信息,并將該指定用戶的用戶標識所對應(yīng)的鎖標志設(shè)置為無效;刪除原子庫中的該用戶的數(shù)據(jù)。
此時,系統(tǒng)獲取該用戶數(shù)據(jù),則已經(jīng)指向目標數(shù)據(jù)庫,可以進行讀取和修改操作。
步驟54.如果寫入失敗,則將該指定用戶的用戶標識所對應(yīng)的鎖標志設(shè)置為無效,并刪除已寫入目標子庫中的該用戶的數(shù)據(jù)。
本步驟,保證了不會產(chǎn)生垃圾數(shù)據(jù),用戶數(shù)據(jù)的位置信息仍指向原數(shù)據(jù)庫,保證了數(shù)據(jù)的可用性。
到此完成了數(shù)據(jù)的遷移過程。
由上述過程可以看出,在本發(fā)明的方案中,訪問分布式數(shù)據(jù)庫時會受到檢索庫中的鎖標志的限制,具體為當需要訪問指定用戶的數(shù)據(jù)時,根據(jù)所述指定用戶的用戶標識查詢檢索庫,獲得該指定用戶數(shù)據(jù)在子庫中的位置信息,并判斷與該指定用戶的用戶標識所對應(yīng)的鎖標志是否為有效;如果為有效,則根據(jù)該指定用戶數(shù)據(jù)在子庫中的位置信息,只對該指定用戶的數(shù)據(jù)進行讀訪問操作,而不能對該指定用戶的數(shù)據(jù)進行更新操作;如果為無效,則可以進行讀取或修改等任何操作。
此外,還有一種情況是有些應(yīng)用根據(jù)指定用戶的用戶標識查詢檢索庫,獲得該指定用戶數(shù)據(jù)在子庫中的位置信息后,緩存該位置信息,之后會根據(jù)所緩存的位置信息訪問所述指定用戶的數(shù)據(jù),而不再查詢檢索庫。此時如果指定用戶的數(shù)據(jù)發(fā)生了遷移,則該應(yīng)用的訪問將會出錯。針對這種情況,在本發(fā)明中對圖5所示意的方法進行了進一步的完善,具體如圖6所示。
圖6是本發(fā)明中的用戶數(shù)據(jù)從DB_A1和DB_B1遷移到DB_A2和DB_B2的一個較佳實施例的流程圖。如圖6所示,其中的“其它應(yīng)用”為用戶^serOOl)數(shù)據(jù)在從原子庫(DB_ Al和DB_B1)遷移到目標子庫(DB_A2和DB_B2)之前,就訪問原子庫(DB_A1和DB_B1)的應(yīng)用,由于這些應(yīng)用在本地緩存的了用戶數(shù)據(jù)在原子庫(DB_A1和DB_B1)中的位置信息,并根據(jù)所緩存的位置信息訪問該用戶數(shù)據(jù),因此本流程相對與圖5所示的流程還增加了如下過程
a、在步驟52中根據(jù)所獲取的該用戶(UserOOl)數(shù)據(jù)在原子庫(DB_A1和DB_B1)中的位置信息,獲取用戶的數(shù)據(jù)之前,向已在該原子庫訪問該用戶的數(shù)據(jù)的其它應(yīng)用發(fā)送該用戶的數(shù)據(jù)將要遷移的第一通知消息;所述其它應(yīng)用接收到第一通知消息后,只對該用戶的數(shù)據(jù)進行讀訪問操作,而不對該指定用戶的數(shù)據(jù)進行更新操作;
b、步驟53中,如果寫入成功,則還向所述其它應(yīng)用發(fā)送該用戶的數(shù)據(jù)已遷移成功的第二通知消息,該第二通知消息中包含該用戶的數(shù)據(jù)在目標庫(DB_A2和DB_B2)中的位置信息;所述其它應(yīng)用接收到第二通知消息后,用第二通知消息中的位置信息更新所緩存的位置信息,并根據(jù)更新后的位置信息訪問所述指定用戶的數(shù)據(jù);
C、步驟M中,如果寫入失敗,則還向所述其它應(yīng)用發(fā)送指定用戶的數(shù)據(jù)遷移失敗的第三通知消息;所述其它應(yīng)用接收到第三通知消息后,仍根據(jù)所之前緩存的位置信息訪問所述指定用戶的數(shù)據(jù)。
經(jīng)過上述方案可以解決有些應(yīng)用根據(jù)本地緩存的位置信息去訪問數(shù)據(jù)庫中的用戶數(shù)據(jù),導(dǎo)致不能感知用戶數(shù)據(jù)遷移的問題。
綜上所述,由于活躍用戶的數(shù)量對數(shù)據(jù)庫服務(wù)器的CPU、內(nèi)存等資源以及網(wǎng)絡(luò)帶寬有極大的影響,因此本發(fā)明中的以活躍用戶為負載均衡指標的方案,有效地均衡了各數(shù)據(jù)庫服務(wù)器的CPU、內(nèi)存等資源以及網(wǎng)絡(luò)帶寬資源的負載;并且僅遷移活躍用戶,無需遷移大量的普通用戶,能夠大量節(jié)省系統(tǒng)資源和時間開銷。并且根據(jù)檢索庫進行實際數(shù)據(jù)遷移的方案,由于在數(shù)據(jù)遷移的過程中對用戶數(shù)據(jù)在子庫中的位置信息的修改機制,以及鎖標志的設(shè)定機制,使得能夠保證用戶數(shù)據(jù)的可用性和一致性,并且不中斷用戶的業(yè)務(wù),使得用戶無感知,提高了用戶體驗。
以上所述僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換、改進等,均包含在本發(fā)明的保護范圍內(nèi)。
權(quán)利要求
1.一種分布式數(shù)據(jù)庫的負載均衡方法,其特征在于,該方法包括 獲取各數(shù)據(jù)庫中的活躍用戶數(shù)量;根據(jù)所述獲取的各數(shù)據(jù)庫中的活躍用戶數(shù)量,以及按照活躍用戶均衡分布在各個數(shù)據(jù)庫中的原則,確定各數(shù)據(jù)庫需要遷出或遷入的活躍用戶數(shù)據(jù);根據(jù)所述確定結(jié)果,在各數(shù)據(jù)庫間進行活躍用戶的數(shù)據(jù)的遷移。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述活躍用戶為在單位時間內(nèi)進行過業(yè)務(wù)操作,并且操作次數(shù)沒有超過設(shè)定閥值的用戶。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,獲取各數(shù)據(jù)庫中的活躍用戶數(shù)據(jù)包括 由設(shè)置在各數(shù)據(jù)庫上的統(tǒng)計單元統(tǒng)計對應(yīng)數(shù)據(jù)庫中的活躍用戶,并將統(tǒng)計結(jié)果保存到各自數(shù)據(jù)庫中;通過分別訪問各數(shù)據(jù)庫獲取各數(shù)據(jù)庫中的活躍用戶數(shù)量;或者,各數(shù)據(jù)庫將自身中的活躍用戶數(shù)量上報到全局數(shù)據(jù)庫中,通過訪問全局數(shù)據(jù)庫獲取各數(shù)據(jù)庫中的活躍用戶數(shù)量。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,該方法進一步包括創(chuàng)建監(jiān)測線程,該監(jiān)測線程監(jiān)測所述各數(shù)據(jù)庫上的統(tǒng)計單元是否完成統(tǒng)計工作,若已完成則執(zhí)行所述通過分別訪問各數(shù)據(jù)庫獲取各數(shù)據(jù)庫中的活躍用戶數(shù)量;或者,各數(shù)據(jù)庫將自身中的活躍用戶數(shù)量上報到全局數(shù)據(jù)庫中,通過訪問全局數(shù)據(jù)庫獲取各數(shù)據(jù)庫中的活躍用戶數(shù)量。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述獲取的各數(shù)據(jù)庫中的活躍用戶數(shù)量,以及按照活躍用戶均衡分布在各個數(shù)據(jù)庫中的原則,確定各數(shù)據(jù)庫需要遷出或遷入的活躍用戶數(shù)據(jù)包括a、根據(jù)各數(shù)據(jù)庫中的活躍用戶數(shù)量計算平均活躍用戶數(shù)量,根據(jù)該平均活躍用戶數(shù)量確定各數(shù)據(jù)庫的活躍用戶數(shù)據(jù)遷入量、遷出量和遷移關(guān)系;b、根據(jù)所述確定的各數(shù)據(jù)庫的活躍用戶數(shù)據(jù)遷入量、遷出量和遷移關(guān)系,確定各數(shù)據(jù)庫中的具體要遷移的活躍用戶數(shù)據(jù),以及遷移路徑。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述步驟a包括根據(jù)各數(shù)據(jù)庫中的活躍用戶數(shù)量計算平均活躍用戶數(shù)量,根據(jù)該平均活躍用戶數(shù)量生成多個遷移任務(wù)并放入遷移任務(wù)隊列中;其中,所述遷移任務(wù)為一種數(shù)據(jù)類型,且包括如下三個成員源數(shù)據(jù)庫標識,目標數(shù)據(jù)庫標識,遷移數(shù)量;所述步驟b包括依次從遷移任務(wù)隊列中取出遷移任務(wù),每取出一個遷移任務(wù),按該遷移任務(wù)所示的遷移數(shù)量,從該遷移任務(wù)所示的源數(shù)據(jù)庫中找出相應(yīng)數(shù)量的活躍用戶的數(shù)據(jù),并根據(jù)所找出的活躍用戶的數(shù)據(jù)以及該遷移任務(wù)所示的目標數(shù)據(jù)庫,在遷移文本文件中生成多行遷移數(shù)據(jù),直到遷移任務(wù)隊列中的所有遷移任務(wù)都已被包含在遷移文本文件中;每行遷移數(shù)據(jù)的格式為用戶標識、源數(shù)據(jù)庫標識、目標數(shù)據(jù)庫標識。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,該方法在步驟a之前進一步包括步驟aO a0、創(chuàng)建一張二維表格,其格式為數(shù)據(jù)庫標識,活躍用戶數(shù)量,用戶索引;其中所述用戶索引的初始值為活躍用戶的標識按遞增排序時的最小值,或活躍用戶的標識按遞減排序時的最大值;所述步驟a中的根據(jù)平均活躍用戶數(shù)量生成多個遷移任務(wù)并放入遷移任務(wù)隊列中包括從各數(shù)據(jù)庫的活躍用戶數(shù)量分別減去平均活躍用戶數(shù)量,并將結(jié)果保存到一個一維數(shù)組中;每次從所述一維數(shù)組中找出最大的正數(shù)和最小的負數(shù)進行相加,根據(jù)相加結(jié)果生成遷移任務(wù)放入遷移隊列中,并將所述一維數(shù)組中的相應(yīng)項置0,直到所述一維數(shù)組中的所有項都為0 ;所述步驟b中的從該遷移任務(wù)所示的源數(shù)據(jù)庫中找出相應(yīng)數(shù)量的活躍用戶的數(shù)據(jù)包括從該源數(shù)據(jù)庫在所述二維表格中對應(yīng)的用戶索引開始,在源數(shù)據(jù)庫中按活躍用戶的標識按遞增或遞減的排序查找出相應(yīng)數(shù)量的活躍用戶的數(shù)據(jù),并將查找到的最后一個活躍用戶數(shù)據(jù)對應(yīng)的活躍用戶標識寫入所述二維表格的用戶索引中。
8.根據(jù)權(quán)利要求1至7中任一項所述的方法,其特征在于,所述根據(jù)所述確定結(jié)果,在各數(shù)據(jù)庫間進行活躍用戶的數(shù)據(jù)的遷移包括設(shè)置一個檢索庫,該檢索庫存儲活躍用戶標識和活躍用戶數(shù)據(jù)在各數(shù)據(jù)庫中的位置信息之間的對應(yīng)關(guān)系,該檢索庫中還存儲與活躍用戶標識對應(yīng)的鎖標志,則對于每一個待遷移的指定活躍用戶的數(shù)據(jù),其從源數(shù)據(jù)庫遷移到目標數(shù)據(jù)庫的過程包括根據(jù)所述指定活躍用戶的用戶標識查詢檢索庫,獲得該指定活躍用戶的數(shù)據(jù)在源數(shù)據(jù)庫中的位置信息,并將與該指定活躍用戶的用戶標識所對應(yīng)的鎖標志設(shè)置為有效;根據(jù)所獲取的指定活躍用戶的數(shù)據(jù)在源數(shù)據(jù)庫中的位置信息,獲取指定活躍用戶的數(shù)據(jù),并將所獲取的數(shù)據(jù)寫入目標數(shù)據(jù)庫中;如果寫入成功,則將檢索庫中的與該指定活躍用戶的標識對應(yīng)的用戶數(shù)據(jù)在數(shù)據(jù)庫中的位置信息,修改為所寫入的目標數(shù)據(jù)庫中的位置信息,并將該指定活躍用戶的用戶標識所對應(yīng)的鎖標志設(shè)置為無效;刪除源數(shù)據(jù)庫中的該指定活躍用戶的數(shù)據(jù);如果寫入失敗,則將該指定活躍用戶的用戶標識所對應(yīng)的鎖標志設(shè)置為無效,并刪除已寫入目標數(shù)據(jù)庫中的該指定活躍用戶的數(shù)據(jù)。
9.根據(jù)權(quán)利要求8所述的方法,其特征在于,該方法進一步包括當有應(yīng)用需要訪問所述指定活躍用戶的數(shù)據(jù)時,根據(jù)所述指定活躍用戶的用戶標識查詢檢索庫,獲得該指定活躍用戶數(shù)據(jù)在數(shù)據(jù)庫中的位置信息,并判斷與該指定活躍用戶的用戶標識所對應(yīng)的鎖標志是否為有效;如果為有效,則根據(jù)該指定活躍用戶數(shù)據(jù)在數(shù)據(jù)庫中的位置信息,只對該指定活躍用戶的數(shù)據(jù)進行讀訪問操作,而不能對該指定活躍用戶的數(shù)據(jù)進行更新操作。
10.根據(jù)權(quán)利要求8所述的方法,其特征在于,當應(yīng)用根據(jù)所述指定活躍用戶的用戶標識查詢檢索庫,獲得該指定活躍用戶數(shù)據(jù)在數(shù)據(jù)庫中的位置信息后,緩存該位置信息,并根據(jù)所緩存的位置信息訪問所述指定活躍用戶的數(shù)據(jù)的情況下,該方法進一步包括在根據(jù)所獲取的指定活躍用戶數(shù)據(jù)在源數(shù)據(jù)庫中的位置信息,獲取指定活躍用戶的數(shù)據(jù)之前,向已在源數(shù)據(jù)庫訪問所述指定活躍用戶的數(shù)據(jù)的應(yīng)用發(fā)送指定活躍用戶的數(shù)據(jù)將要遷移的第一通知消息;所述應(yīng)用接收到第一通知消息后,只對該指定活躍用戶的數(shù)據(jù)進行讀訪問操作,而不對該指定活躍用戶的數(shù)據(jù)進行更新操作;如果寫入成功,則向所述應(yīng)用發(fā)送指定活躍用戶的數(shù)據(jù)已遷移成功的第二通知消息, 該第二通知消息中包含所述指定活躍用戶的數(shù)據(jù)在目標數(shù)據(jù)庫中的位置信息;所述應(yīng)用接收到第二通知消息后,用第二通知消息中的位置信息更新所緩存的位置信息,并根據(jù)更新后的位置信息訪問所述指定活躍用戶的數(shù)據(jù);如果寫入失敗,則向所述應(yīng)用發(fā)送指定活躍用戶的數(shù)據(jù)遷移失敗的第三通知消息;所述應(yīng)用接收到第三通知消息后,仍根據(jù)所緩存的位置信息訪問所述指定活躍用戶的數(shù)據(jù)。
全文摘要
本發(fā)明公開一種分布式數(shù)據(jù)庫的負載均衡方法。該方法包括獲取各數(shù)據(jù)庫中的活躍用戶數(shù)量;根據(jù)所述獲取的各數(shù)據(jù)庫中的活躍用戶數(shù)量,以及按照活躍用戶均衡分布在各個數(shù)據(jù)庫中的原則,確定各數(shù)據(jù)庫需要遷出或遷入的活躍用戶數(shù)據(jù);根據(jù)所述確定結(jié)果,在各數(shù)據(jù)庫間進行活躍用戶的數(shù)據(jù)的遷移。本發(fā)明的技術(shù)方案,綜合考慮了數(shù)據(jù)庫服務(wù)器的硬件資源的使用頻率,保證了在存儲資源成本降低的趨勢中高效地利用數(shù)據(jù)庫服務(wù)器的其他硬件資源。
文檔編號G06F17/30GK102495857SQ20111037239
公開日2012年6月13日 申請日期2011年11月21日 優(yōu)先權(quán)日2011年11月21日
發(fā)明者張鵬, 李春雷 申請人:北京新媒傳信科技有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1