專利名稱:基于p2p技術(shù)的分布式負(fù)載均衡系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種基于點(diǎn)對點(diǎn)P2P (Peer-to-Peer)技術(shù)的分布式負(fù)載均衡系統(tǒng)和方法,屬于計(jì)算機(jī)網(wǎng)絡(luò)的技術(shù)領(lǐng)域。
背景技術(shù):
隨著網(wǎng)絡(luò)業(yè)務(wù)量、訪問量和數(shù)據(jù)流量的快速增長,服務(wù)器集群技術(shù)得到廣泛的應(yīng)用和研究,而負(fù)載均衡技術(shù)作為服務(wù)器集群技術(shù)中的重要組成部分,也得到了廣泛、深入的研究和應(yīng)用。目前,負(fù)載均衡技術(shù)在商業(yè)化的web服務(wù)的業(yè)務(wù)負(fù)載管理、網(wǎng)格計(jì)算中的計(jì)算任務(wù)負(fù)載管理、并行計(jì)算中的計(jì)算任務(wù)負(fù)載管理、云計(jì)算的計(jì)算資源負(fù)載管理等領(lǐng)域問題都 有大量的研究和實(shí)踐應(yīng)用。按照仲裁方式,負(fù)載均衡技術(shù)主要分為集中式仲裁的負(fù)載均衡和分布式仲裁的負(fù)載均衡。由于集中式仲裁需要設(shè)置一個集中的負(fù)載均衡器,因此容易出現(xiàn)單點(diǎn)失效;并且隨著分布式集群處理節(jié)點(diǎn)的增多,其處理性能也會受到一定的限制,容易成為性能瓶頸。分布式仲裁的負(fù)載均衡已經(jīng)逐漸成為新的研究方向。P2P技術(shù)由于具有全分布、無中心節(jié)點(diǎn)等優(yōu)勢,進(jìn)行負(fù)載決策時不會出現(xiàn)性能瓶頸和單故障點(diǎn)問題,而且,集群的伸縮性比較好,因此成為分布式負(fù)載均衡研究和應(yīng)用的新方向。在P2P技術(shù)中,分布式哈希表DHT(DistributedHashTable)是一種廣泛應(yīng)用的方法。其主要思想是通過哈希函數(shù)建立各個請求和分布式集群處理節(jié)點(diǎn)之間的映射關(guān)系,并在分布式集群處理節(jié)點(diǎn)處于動態(tài)增加和移出時,能夠最小化地改變每個請求和分布式集群處理節(jié)點(diǎn)之間映射關(guān)系?;赑2P技術(shù)的分布式負(fù)載均衡方法的現(xiàn)有技術(shù)存在兩個問題亟待解決節(jié)點(diǎn)動態(tài)變化的管理和節(jié)點(diǎn)請求的負(fù)載均衡?,F(xiàn)有技術(shù)中,基于DHT實(shí)現(xiàn)的負(fù)載均衡經(jīng)典算法方案有兩種Chord算法方案和Kademlia算法方案。這兩種方案都很好地解決了分布式集群環(huán)境下的節(jié)點(diǎn)動態(tài)變化管理和數(shù)據(jù)快速存取的處理過程,但是,它們都沒有很好地解決節(jié)點(diǎn)請求負(fù)載均衡的問題,系統(tǒng)中的節(jié)點(diǎn)可能出現(xiàn)負(fù)載過重或過輕的現(xiàn)象。其中,Chord算法在一致性哈希算法的基礎(chǔ)上,提高了查找指定請求所在節(jié)點(diǎn)的效率,但是,在節(jié)點(diǎn)數(shù)量不多時,很難保證每個節(jié)點(diǎn)在哈希環(huán)上的分布是否具有隨機(jī)性,這個問題又會造成哈希環(huán)上相鄰節(jié)點(diǎn)之間的間隔不夠均勻,從而帶來某些節(jié)點(diǎn)負(fù)載過重或者過輕的后
果OKademlia算法在一致性哈希算法的基礎(chǔ)上,根據(jù)請求的關(guān)鍵字和節(jié)點(diǎn)ID的相似度來選擇為其服務(wù)的節(jié)點(diǎn)。在查詢選擇時,通過異或運(yùn)算來優(yōu)化查詢效率,即查找與請求關(guān)鍵字的異或運(yùn)算結(jié)果最小的節(jié)點(diǎn),用作為其服務(wù)的節(jié)點(diǎn),這個方法具有一定的隨機(jī)性。但是,該方案沒有考慮節(jié)點(diǎn)的負(fù)載情況,而且,系統(tǒng)中每個節(jié)點(diǎn)的負(fù)載分配跟請求的關(guān)鍵字有較大的關(guān)聯(lián),造成系統(tǒng)中每個節(jié)點(diǎn)的負(fù)載出現(xiàn)不均衡的概率比較大,因此,基于Kademlia算法雖然和Chord算法同樣解決了分布式集群環(huán)境下的處理節(jié)點(diǎn)動態(tài)變化和數(shù)據(jù)快速存取過程。但是,它們的共同缺點(diǎn)是均沒有負(fù)載均衡的策略,系統(tǒng)中的節(jié)點(diǎn)都可能出現(xiàn)負(fù)載過重或者過輕的現(xiàn)象。查找現(xiàn)有的論文和專利申請等資料,發(fā)現(xiàn)有2篇專利申請涉及到基于P2P技術(shù)的分布式負(fù)載均衡機(jī)制,分別介紹和對比分析如下?!兑环N集群服務(wù)的負(fù)載均衡方法和裝置》(公開號CN102137128A)介紹一種基于反饋機(jī)制的動態(tài)負(fù)載均衡技術(shù),其方法是首先獲得集群中負(fù)載節(jié)點(diǎn)的負(fù)載能力,再根據(jù)負(fù)載能力獲得負(fù)載節(jié)點(diǎn)的負(fù)載因子,再根據(jù)負(fù)載因子生成負(fù)載分配序列;當(dāng)接收到待分配的服務(wù)請求時,根據(jù)服務(wù)請求生成隨機(jī)數(shù),再把生成的隨機(jī)數(shù)根據(jù)所有節(jié)點(diǎn)負(fù)載因子總和取模余,得到一個參考值,再以負(fù)載節(jié)點(diǎn)的負(fù)載因子為參考值的節(jié)點(diǎn)做為接受請求的節(jié)點(diǎn)。但是,其沒有提供解決節(jié)點(diǎn)動態(tài)變化的管理問題,在分布式集群環(huán)境下應(yīng)用具有一定的局限性。
《一種DHT網(wǎng)絡(luò)負(fù)載均衡裝置及虛節(jié)點(diǎn)劃分的方法》(公開號CN101834897A)介紹了一種DHT網(wǎng)絡(luò)負(fù)載均衡裝置結(jié)構(gòu)組成,以及其虛節(jié)點(diǎn)的劃分方法節(jié)點(diǎn)加入網(wǎng)絡(luò)時,通過性能模型定義自身節(jié)點(diǎn)級別,若本身為弱節(jié)點(diǎn),找到臨近的弱節(jié)點(diǎn),并與鄰近的弱節(jié)點(diǎn)合并;接著,該節(jié)點(diǎn)退出網(wǎng)絡(luò)并與找到的臨近弱節(jié)點(diǎn)建立連接,共同組成一個強(qiáng)虛節(jié)點(diǎn),同時退出節(jié)點(diǎn),通過相鄰弱節(jié)點(diǎn)與系統(tǒng)中的其他節(jié)點(diǎn)進(jìn)行交互,其他節(jié)點(diǎn)將退出節(jié)點(diǎn)看成為強(qiáng)虛節(jié)點(diǎn)的一部分;節(jié)點(diǎn)合并后的調(diào)整,使得節(jié)點(diǎn)查詢裝置只包含強(qiáng)虛節(jié)點(diǎn)ID,由強(qiáng)虛節(jié)點(diǎn)給各弱節(jié)點(diǎn)分配負(fù)載,實(shí)現(xiàn)負(fù)載均衡。該方法有效解決了節(jié)點(diǎn)動態(tài)變化的管理問題,但是,因?yàn)閺?qiáng)虛節(jié)點(diǎn)的數(shù)量少于弱節(jié)點(diǎn)的數(shù)量,不可避免造成弱節(jié)點(diǎn)扎堆和系統(tǒng)整體均衡性不佳的情況。綜合上述兩個專利申請的方技術(shù)案,盡管其在一定程度上解決節(jié)點(diǎn)動態(tài)變化和系統(tǒng)負(fù)載均衡的問題。其系統(tǒng)負(fù)載均衡性是通過三層來保證的第一層是請求到參考值的均衡分布,第二層是參考值到強(qiáng)虛節(jié)點(diǎn)的均衡映射,第三層是強(qiáng)虛節(jié)點(diǎn)將請求均衡分配給其負(fù)責(zé)的各弱節(jié)點(diǎn)。但是,這樣處理仍然不能很好地解決分布式集群環(huán)境中的負(fù)載均衡問題,其原因在于首先因其存在強(qiáng)虛節(jié)點(diǎn)層,當(dāng)一個物理節(jié)點(diǎn)變動時,需要更改弱節(jié)點(diǎn)到強(qiáng)虛節(jié)點(diǎn)的映射關(guān)系和強(qiáng)虛節(jié)點(diǎn)到參考值的映射關(guān)系,一個弱節(jié)點(diǎn)的變動可能還會引起其鄰居強(qiáng)虛節(jié)點(diǎn)的變動;因此當(dāng)系統(tǒng)規(guī)模較大、節(jié)點(diǎn)動態(tài)變化較頻繁時,強(qiáng)虛節(jié)點(diǎn)的變更給系統(tǒng)帶來的開銷會嚴(yán)重影響系統(tǒng)的整體性能和穩(wěn)定性。其次,由于其強(qiáng)虛節(jié)點(diǎn)作為多個弱節(jié)點(diǎn)、即實(shí)際處理節(jié)點(diǎn)的集合,在第二層參考值到強(qiáng)虛節(jié)點(diǎn)的均衡映射只是保證了請求到弱節(jié)點(diǎn)集合的均衡性,并沒有實(shí)現(xiàn)分布式集群系統(tǒng)全局意義上的負(fù)載均衡。因此,如何對現(xiàn)有的分布式負(fù)載均衡技術(shù)繼續(xù)進(jìn)行改進(jìn)和提高,就成為業(yè)內(nèi)科技人員關(guān)注的新課題。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的目的是提供一種基于P2P技術(shù)的分布式負(fù)載均衡系統(tǒng)和方法,本發(fā)明系統(tǒng)用于分布式網(wǎng)絡(luò)環(huán)境下,能夠?qū)崿F(xiàn)具有分布式仲裁功能、有效避免系統(tǒng)出現(xiàn)單點(diǎn)失效情況的負(fù)載均衡,該系統(tǒng)和方法能夠支持分布式集群系統(tǒng)中節(jié)點(diǎn)增加和移出等情況下實(shí)現(xiàn)動態(tài)變化的負(fù)載均衡,并且可以有效保證環(huán)境變化后各節(jié)點(diǎn)的負(fù)載均衡。為了達(dá)到上述目的,本發(fā)明提供了一種基于P2P技術(shù)的分布式負(fù)載均衡系統(tǒng),其特征在于該系統(tǒng)由具有均衡負(fù)載功能的分布式處理集群所組成,該處理集群內(nèi)沒有集中控制的中心節(jié)點(diǎn),只設(shè)有分設(shè)于不同服務(wù)器、并分別用作該系統(tǒng)分布式控制核心的多個同構(gòu)或異構(gòu)的處理節(jié)點(diǎn),每個處理節(jié)點(diǎn)都能獨(dú)立提供分布式仲裁的負(fù)載均衡功能,且各自的處理事件的權(quán)限與均衡負(fù)載的功能都相同,異構(gòu)處理節(jié)點(diǎn)的差異只是其事件的處理速率不同;當(dāng)客戶端向分布式處理集群實(shí)時發(fā)送海量數(shù)據(jù)處理請求時,該系統(tǒng)的某個處理節(jié)點(diǎn)完成請求處理后,將產(chǎn)生的中間結(jié)果封裝為事件,發(fā)往其它處理節(jié)點(diǎn)繼續(xù)處理;各處理節(jié)點(diǎn)在分發(fā)事件過程中,始終采用分布式負(fù)載均衡方法保證事件分發(fā)的負(fù)載均衡,直到產(chǎn)生最終結(jié)果并返還給客戶端;該處理節(jié)點(diǎn)設(shè)有處理層和通信層;其中處理層,由包含多個處理單元的處理單元容器所組成,負(fù)責(zé)進(jìn)行事件處理接收來自通信層的事件,再根據(jù)事件類型和每個事件所設(shè)定屬性的屬性值,將該事件交由特定處理單元進(jìn)行處理,同時負(fù)責(zé)將該事件處理完成后產(chǎn)生的新事件或最終結(jié)果,交給通信層進(jìn)行分發(fā)與發(fā)送;通信層,用于監(jiān)聽、分發(fā)事件及實(shí)現(xiàn)分布式負(fù)載均衡負(fù)責(zé)從網(wǎng)絡(luò)接收事件并轉(zhuǎn)交給處理層;然后接收處理層完成處理后產(chǎn)生的新事件或最終結(jié)果,再使用分布式負(fù)載均衡方法將該新事件或最終結(jié)果分發(fā)給其他處理節(jié)點(diǎn)或客戶端,保證該分布式處理集群中的各 處理節(jié)點(diǎn)負(fù)載均衡;設(shè)有事件監(jiān)聽、事件分發(fā)、事件發(fā)送、負(fù)載管理和分布式集群管理共五個模塊。為了達(dá)到上述目的,本發(fā)明還提供了一種基于P2P技術(shù)的分布式負(fù)載均衡系統(tǒng)的工作方法,其特征在于每個處理節(jié)點(diǎn)的通信層中的事件分發(fā)模塊和負(fù)載管理模塊協(xié)同完成基于虛擬節(jié)點(diǎn)與處理節(jié)點(diǎn)之間映射的事件分發(fā)方法,實(shí)現(xiàn)基于P2P技術(shù)的分布式負(fù)載均衡;所述方法包括下述兩個操作步驟步驟1,每個處理節(jié)點(diǎn)的通信層中的負(fù)載管理模塊創(chuàng)建或更新虛擬節(jié)點(diǎn)映射表和動態(tài)負(fù)載信息表步驟2,每個處理節(jié)點(diǎn)的通信層中的事件分發(fā)模塊與負(fù)載管理模塊交互,根據(jù)虛擬節(jié)點(diǎn)映射表執(zhí)行事件分發(fā)決策操作,將每個事件分發(fā)到相應(yīng)的處理節(jié)點(diǎn),并實(shí)現(xiàn)負(fù)載均衡事件分發(fā)模塊計(jì)算每個事件的關(guān)鍵屬性的哈希值,再將該哈希值除以虛擬節(jié)點(diǎn)總個數(shù)所得到的余數(shù),作為將該事件準(zhǔn)備分發(fā)到的虛擬節(jié)點(diǎn)編號;事件分發(fā)模塊與負(fù)載管理模塊交互,從虛擬節(jié)點(diǎn)映射表查找該虛擬節(jié)點(diǎn)編號及其所對應(yīng)的處理節(jié)點(diǎn)編號,以獲取準(zhǔn)備將該事件分發(fā)到的處理節(jié)點(diǎn)編號。本發(fā)明系統(tǒng)和方法的主要創(chuàng)新技術(shù)是采用在系統(tǒng)的通信層建立虛擬節(jié)點(diǎn)映射表和動態(tài)負(fù)載信息表來實(shí)現(xiàn)分布式負(fù)載均衡。本發(fā)明中的虛擬節(jié)點(diǎn)概念與DHT算法中一致性哈希的哈希環(huán)值有相似之處,但是,本發(fā)明的事件分發(fā)方法是對一致性哈希中的均衡策略的改進(jìn),更具優(yōu)勢。究其原因在于DHT算法中的一致性哈希是將資源映射到哈希環(huán)上的數(shù)值,然后,某段哈希環(huán)上的數(shù)值就與某個處理節(jié)點(diǎn)相對應(yīng);由于處理節(jié)點(diǎn)在哈希環(huán)上是隨機(jī)分布的,在查詢處理節(jié)點(diǎn)時,需要順時針或逆時針遍歷所有處理節(jié)點(diǎn)的集合,這樣就會產(chǎn)生處理節(jié)點(diǎn)扎堆和查詢效率不高的缺陷。本發(fā)明是先用哈希方法獲取虛擬節(jié)點(diǎn)編號,然后再映射到處理節(jié)點(diǎn)。本發(fā)明保證虛擬節(jié)點(diǎn)編號可以均勻地分布在哈希環(huán)上。此外,通過第一階段的哈希方法分散性和第二階段的虛擬節(jié)點(diǎn)映射到處理節(jié)點(diǎn)的均衡性,以保證系統(tǒng)全局意義上的均衡性,并且,在查詢處理節(jié)點(diǎn)時,只需在虛擬節(jié)點(diǎn)映射表中一次查詢便能獲知處理節(jié)點(diǎn),查詢效率高。因而,本發(fā)明分布式負(fù)載均衡方法的實(shí)質(zhì)是一種改進(jìn)的DHT實(shí)現(xiàn)方法。多次的仿真實(shí)施例的試驗(yàn)證明,本發(fā)明具有很好的推廣應(yīng)用前景。
圖I是本發(fā)明基于P2P技術(shù)的分布式負(fù)載均衡系統(tǒng)總體結(jié)構(gòu)組成示意圖。圖2是本發(fā)明分布式負(fù)載均衡系統(tǒng)中的處理節(jié)點(diǎn)組成結(jié)構(gòu)示意圖。圖3是本發(fā)明基于P2P技術(shù)的分布式負(fù)載均衡系統(tǒng)的工作方法流程圖。圖4是本發(fā)明分布式負(fù)載均衡系統(tǒng)中的事件分發(fā)方案示意圖。圖5是本發(fā)明分布式負(fù)載均衡系統(tǒng)中分布式負(fù)載均衡事件分發(fā)時序圖。 圖6是本發(fā)明分布式負(fù)載均衡系統(tǒng)中新增處理節(jié)點(diǎn)表的更新操作時序圖。圖7是本發(fā)明分布式負(fù)載均衡系統(tǒng)中處理節(jié)點(diǎn)動態(tài)移出表的更新操作時序圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖和實(shí)施例對本發(fā)明作進(jìn)一步的詳細(xì)描述。本發(fā)明是一種基于對等P2P (Peer-to-Peer)技術(shù)的分布式負(fù)載均衡系統(tǒng),同時,提供了一種基于該系統(tǒng)的負(fù)載均衡方法。首先介紹系統(tǒng)結(jié)構(gòu)組成參見圖1,本發(fā)明基于P2P技術(shù)的分布式負(fù)載均衡系統(tǒng)由具有均衡負(fù)載功能的分布式處理集群所組成,該處理集群內(nèi)沒有中心節(jié)點(diǎn)(即集中控制節(jié)點(diǎn)),只有分設(shè)于不同服務(wù)器、并分別用作該系統(tǒng)分布式控制核心的多個同構(gòu)或異構(gòu)的處理節(jié)點(diǎn)(實(shí)際環(huán)境部署時,同一臺服務(wù)器也可以設(shè)置多個處理節(jié)點(diǎn)),每個處理節(jié)點(diǎn)都能獨(dú)立提供分布式仲裁的負(fù)載均衡功能,且各自處理事件的權(quán)限與均衡負(fù)載的功能都相同,異構(gòu)處理節(jié)點(diǎn)的差異只是其事件的處理速率不同。當(dāng)客戶端向分布式處理集群實(shí)時發(fā)送海量數(shù)據(jù)處理請求時,該系統(tǒng)的某個處理節(jié)點(diǎn)完成請求處理后,將產(chǎn)生的中間結(jié)果封裝為事件,并發(fā)往其它處理節(jié)點(diǎn)繼續(xù)處理。而且,各處理節(jié)點(diǎn)在分發(fā)事件過程中,始終采用分布式負(fù)載均衡方法保證事件分發(fā)的負(fù)載均衡,直到產(chǎn)生最終結(jié)果并返還給客戶端。參見圖2,介紹處理節(jié)點(diǎn)內(nèi)部功能模塊,其設(shè)有處理層和通信層;其中處理層由包含多個處理單元的處理單元容器所組成,負(fù)責(zé)進(jìn)行事件處理接收來自通信層的事件,再根據(jù)事件類型和每個事件所設(shè)定屬性的屬性值,將該事件交由特定處理單元進(jìn)行處理,同時負(fù)責(zé)將該事件處理完成后產(chǎn)生的新事件或最終結(jié)果,交給通信層進(jìn)行分發(fā)與發(fā)送。處理層的兩種組成部件功能如下處理單元容器,用于管理和控制其內(nèi)部的各個處理單元,采用設(shè)定順序激活相應(yīng)的處理單元來處理不同事件。處理單元,用于處理特定類型和屬性的事件,負(fù)責(zé)藉由通信層的事件分發(fā)模塊和事件發(fā)送模塊,將產(chǎn)生的中間處理結(jié)果作為新事件,發(fā)往其他處理單元繼續(xù)處理;或者將處理的最終結(jié)果返回給客戶端;每個處理單元都是系統(tǒng)預(yù)先設(shè)置的,或者由第三方程序員開發(fā)并部署到處理節(jié)點(diǎn)上。通信層用于監(jiān)聽、分發(fā)事件及實(shí)現(xiàn)分布式負(fù)載均衡(參見第4節(jié)):負(fù)責(zé)從網(wǎng)絡(luò)接收事件并轉(zhuǎn)交給處理層,然后接收處理層完成處理后產(chǎn)生的新事件或最終結(jié)果,再使用分布式負(fù)載均衡方法將該新事件或最終結(jié)果分發(fā)給其他處理節(jié)點(diǎn)或客戶端,保證該分布式處理集群中的各處理節(jié)點(diǎn)負(fù)載均衡。設(shè)有下述五個模塊事件監(jiān)聽、事件分發(fā)、事件發(fā)送、負(fù)載管理和分布式集群管理模塊事件監(jiān)聽模塊,負(fù)責(zé)接收網(wǎng)絡(luò)事件,并交由處理層的處理單元進(jìn)行處理。事件分發(fā)模塊,負(fù)責(zé)接收處理層的新事件或最終結(jié)果,并按照負(fù)載管理模塊提供的負(fù)載均衡信息來分發(fā)新事件或最終結(jié)果,再經(jīng)由事件發(fā)送模塊將其發(fā)送到其他處理節(jié)點(diǎn)或客戶端。事件發(fā)送模塊,用于將來自事件分發(fā)模塊的新事件或最終結(jié)果分別發(fā)送到設(shè)定的處理節(jié)點(diǎn)或客戶端,分發(fā)過程中保證系統(tǒng)負(fù)載均衡。負(fù)載管理模塊,其為處理節(jié)點(diǎn)實(shí)現(xiàn)分布式負(fù)載均衡方法的關(guān)鍵模塊,負(fù)責(zé)創(chuàng)建與維護(hù)事件分發(fā)模塊所需的負(fù)載信息,并為此定義了下述幾個重要概念 (A)虛擬節(jié)點(diǎn)是為了實(shí)現(xiàn)分布式負(fù)載均衡方法而設(shè)置的一個與處理節(jié)點(diǎn)相互映射的邏輯符號,每個虛擬節(jié)點(diǎn)只能映射到一個處理節(jié)點(diǎn),但是,每個處理節(jié)點(diǎn)能夠映射到多個虛擬節(jié)點(diǎn)。虛擬節(jié)點(diǎn)個數(shù)是在系統(tǒng)啟動時設(shè)置的,其數(shù)量遠(yuǎn)大于處理節(jié)點(diǎn)個數(shù);且在系統(tǒng)運(yùn)行后,虛擬節(jié)點(diǎn)個數(shù)保持不變;當(dāng)系統(tǒng)新增或退出處理節(jié)點(diǎn)時,處理節(jié)點(diǎn)及其虛擬節(jié)點(diǎn)之間的映射關(guān)系也要根據(jù)調(diào)整算法作相應(yīng)改變。(B)虛擬節(jié)點(diǎn)映射表是本發(fā)明的重要數(shù)據(jù)結(jié)構(gòu),設(shè)于每個處理節(jié)點(diǎn)的負(fù)載管理模塊,用于表示每個虛擬節(jié)點(diǎn)編號及其對應(yīng)的處理節(jié)點(diǎn)編號,以便在系統(tǒng)分發(fā)事件時,查找該虛擬節(jié)點(diǎn)映射表,根據(jù)虛擬節(jié)點(diǎn)編號獲取其對應(yīng)的處理節(jié)點(diǎn)。虛擬節(jié)點(diǎn)映射表是根據(jù)每個處理節(jié)點(diǎn)的事件處理速率高低降序排列形成的;因每個處理節(jié)點(diǎn)處理事件的速率不同,故每個處理節(jié)點(diǎn)所分配的對應(yīng)虛擬節(jié)點(diǎn)個數(shù)也不相等;且在系統(tǒng)運(yùn)行后,為節(jié)省更新時間,采取增刪處理節(jié)點(diǎn)的動態(tài)負(fù)載信息表和虛擬節(jié)點(diǎn)映射表的更新方法來實(shí)時更新虛擬節(jié)點(diǎn)映射表。下表I就是一個虛擬節(jié)點(diǎn)映射表的示例其中第一項(xiàng)是虛擬節(jié)點(diǎn)編號,第二項(xiàng)是該虛擬節(jié)點(diǎn)對應(yīng)的處理節(jié)點(diǎn)編號。在需要進(jìn)行事件分發(fā)時,即本發(fā)明事件分發(fā)第二階段就是通過根據(jù)虛擬節(jié)點(diǎn)編號查找虛擬節(jié)點(diǎn)映射表的方式,獲取該虛擬節(jié)點(diǎn)對應(yīng)的處理節(jié)點(diǎn)。
虛擬節(jié)點(diǎn)處理節(jié)點(diǎn)
虛擬節(jié)點(diǎn)O處理節(jié)點(diǎn)O
虛擬節(jié)點(diǎn)I處理節(jié)點(diǎn)I
虛擬節(jié)點(diǎn)2......—
虛擬節(jié)點(diǎn)3—處理節(jié)點(diǎn)K
虛擬節(jié)點(diǎn)4處理節(jié)點(diǎn)O
虛擬節(jié)點(diǎn)5處理節(jié)點(diǎn)I
虛擬節(jié)點(diǎn)6......虛擬節(jié)點(diǎn)7處理節(jié)點(diǎn)K
虛擬節(jié)點(diǎn)N處理節(jié)點(diǎn)K本發(fā)明實(shí)施例是根據(jù)每個處理節(jié)點(diǎn)的事件處理速率的高低,采用降序排列方式來初始化虛擬節(jié)點(diǎn)映射表。實(shí)際應(yīng)用時,也可用其它能夠保證按照處理節(jié)點(diǎn)的事件處理速率高低降序排列的方法來初始化虛擬節(jié)點(diǎn)映射表,而且,對于每個處理效率不同的處理節(jié)點(diǎn),可以給其分配數(shù)量不同的虛擬節(jié)點(diǎn)。需要注意的是,虛擬節(jié)點(diǎn)映射表的初始化方法僅適用于初始構(gòu)建的時候。系統(tǒng)運(yùn)行后,為節(jié)省虛擬節(jié)點(diǎn)映射表的更新時間,不再采用該初始化的方法來更新虛擬節(jié)點(diǎn)映射表。在動態(tài)新增或移出處理節(jié)點(diǎn)后,本發(fā)明是采用動態(tài)新增或移出處理節(jié)點(diǎn)的動態(tài)負(fù)載信息表和虛擬節(jié)點(diǎn)映射表的更新方法來實(shí)時更新虛擬節(jié)點(diǎn)映射表。(C)動態(tài)負(fù)載信息表是是本發(fā)明的另一重要數(shù)據(jù)結(jié)構(gòu),設(shè)于每個處理節(jié)點(diǎn)負(fù)載管理模塊,用于表示每個處理節(jié)點(diǎn)編號、按照其事件處理速率在理論上分配的虛擬節(jié)點(diǎn)個數(shù) 與其實(shí)際對應(yīng)的虛擬節(jié)點(diǎn)個數(shù)。本發(fā)明系統(tǒng)中各處理節(jié)點(diǎn)對應(yīng)的虛擬節(jié)點(diǎn)個數(shù)稱為節(jié)點(diǎn)負(fù)載數(shù)。在初始建立虛擬節(jié)點(diǎn)映射表時,為方便維護(hù)每個處理節(jié)點(diǎn)的負(fù)載信息,根據(jù)虛擬節(jié)點(diǎn)映射表信息建立了一張動態(tài)負(fù)載信息表。該動態(tài)負(fù)載信息表是按照每個處理節(jié)點(diǎn)的負(fù)載數(shù)量與其理論上分配的負(fù)載數(shù)量之差的絕對值降序排列形成的,且其信息與虛擬節(jié)點(diǎn)映射表的信息逐一對應(yīng)的。故在虛擬節(jié)點(diǎn)映射表更新時,動態(tài)負(fù)載信息表也要相應(yīng)更新。下表2是一個動態(tài)負(fù)載信息表的示例其中第一項(xiàng)是處理節(jié)點(diǎn)編號,第二項(xiàng)是該處理節(jié)點(diǎn)對應(yīng)的虛擬節(jié)點(diǎn)個數(shù),第三項(xiàng)是一個列表,包含該處理節(jié)點(diǎn)對應(yīng)的各個虛擬節(jié)點(diǎn)編號。動態(tài)負(fù)載信息表中每一項(xiàng)是按照處理節(jié)點(diǎn)負(fù)載數(shù)從大到小降序排列的。同時,為了保證分布式處理集群中增加處理節(jié)點(diǎn)時,新增的處理節(jié)點(diǎn)和虛擬節(jié)點(diǎn)的映射集均勻分開,在創(chuàng)建動態(tài)負(fù)載信息表時,對每個處理節(jié)點(diǎn)對應(yīng)的虛擬節(jié)點(diǎn)編號執(zhí)行亂序操作。
處理節(jié)點(diǎn)節(jié)點(diǎn)負(fù)載數(shù)虛擬節(jié)點(diǎn)列表
處理節(jié)點(diǎn)O25640,4,0,......
處理節(jié)點(diǎn)I2565,41, I,......
處理節(jié)點(diǎn) K25619,7, 3,......一虛擬節(jié)點(diǎn)映射表與動態(tài)負(fù)載信息表之間的關(guān)系在系統(tǒng)啟動時,借助分布式集群管理模塊中的信息創(chuàng)建虛擬節(jié)點(diǎn)映射表;在系統(tǒng)啟動后,利用已經(jīng)建立的虛擬節(jié)點(diǎn)映射表信息創(chuàng)建動態(tài)負(fù)載信息表,且在分布式處理集群中有新增或退出處理節(jié)點(diǎn)時,對虛擬節(jié)點(diǎn)映射表和動態(tài)負(fù)載信息表進(jìn)行實(shí)時更新。分布式集群管理模塊,負(fù)責(zé)管理和維護(hù)分布式處理集群及其中的全部處理節(jié)點(diǎn)與其對應(yīng)的虛擬節(jié)點(diǎn),該分布式處理集群中的各處理節(jié)點(diǎn)也經(jīng)由該分布式集群管理模塊實(shí)時獲取該集群中自身與其他處理節(jié)點(diǎn)的鏈接地址、當(dāng)前存活狀態(tài)、負(fù)載狀態(tài)與相關(guān)信息。本發(fā)明系統(tǒng)的應(yīng)用場景主要有下述三種(I)分發(fā)事件場景客戶端向分布式負(fù)載均衡系統(tǒng)中的分布式處理集群發(fā)送海量數(shù)據(jù)處理請求,分布式處理集群中的每個處理節(jié)點(diǎn)分別獨(dú)立、均等地完成各自的負(fù)載決策,且在處理過程中,保證每個處理節(jié)點(diǎn)的負(fù)載均衡;并實(shí)時向客戶端返回處理結(jié)果;(2)新增處理節(jié)點(diǎn)場景客戶端向分布式處理集群發(fā)送海量數(shù)據(jù)處理請求過程中,為減輕該處理集群中各處理節(jié)點(diǎn)的負(fù)載壓力,向該處理集群中實(shí)時增加新的處理節(jié)點(diǎn);并在盡可能短時間內(nèi),由新增處理節(jié)點(diǎn)分擔(dān)原處理集群中各處理節(jié)點(diǎn)的部分負(fù)載,使得新增 處理節(jié)點(diǎn)和原處理集群中各處理節(jié)點(diǎn)重新實(shí)現(xiàn)負(fù)載均衡。(3)移出處理節(jié)點(diǎn)場景客戶端向該分布式處理集群發(fā)送海量數(shù)據(jù)處理請求過程中,因故障或管理需要等原因,有節(jié)點(diǎn)要遷移離開該處理集群時,由該集群中其它處理節(jié)點(diǎn)承擔(dān)該移出處理節(jié)點(diǎn)的負(fù)載;并在盡可能短時間內(nèi),使得移出一個或多個處理節(jié)點(diǎn)后的處理集群中的每個處理節(jié)點(diǎn)重新達(dá)到負(fù)載均衡。參見圖3,介紹本發(fā)明基于P2P技術(shù)的分布式負(fù)載均衡系統(tǒng)的工作方法每個處理節(jié)點(diǎn)的通信層中的事件分發(fā)模塊和負(fù)載管理模塊協(xié)同完成基于虛擬節(jié)點(diǎn)與處理節(jié)點(diǎn)之間映射的事件分發(fā)方法,實(shí)現(xiàn)基于P2P技術(shù)的分布式負(fù)載均衡。包括下述兩個操作步驟步驟1,每個處理節(jié)點(diǎn)的通信層中的負(fù)載管理模塊創(chuàng)建或更新虛擬節(jié)點(diǎn)映射表和動態(tài)負(fù)載信息表。該步驟I包括下列操作內(nèi)容(11)系統(tǒng)初始建立時,負(fù)載管理模塊根據(jù)每個處理節(jié)點(diǎn)的事件處理速率高低采用降序排列方式創(chuàng)建初始化虛擬節(jié)點(diǎn)映射表,此時對于事件處理速率不同的處理節(jié)點(diǎn),分別設(shè)置相應(yīng)不同的虛擬節(jié)點(diǎn)個數(shù)。該步驟包括下列操作內(nèi)容(IlA)為保證負(fù)載均衡,負(fù)載管理模塊先計(jì)算系統(tǒng)當(dāng)前每個處理節(jié)點(diǎn)理論上獲取
的負(fù)載個數(shù),即其理論負(fù)載個數(shù)IoadAfter (i)為
P Γ4Ρ4Π Υ(Λ= 規(guī)—Μ /篇—式中,VIRTUAL N0DES NUM是
> ^P_(APA(111(ι)- -
虛擬節(jié)點(diǎn)總個數(shù),其數(shù)值遠(yuǎn)大于系統(tǒng)處理節(jié)點(diǎn)總個數(shù)N ;自然數(shù)i是處理節(jié)點(diǎn)編號,其最大值為N;P_CAPACITY(i)是編號為i的處理節(jié)點(diǎn)的事件處理速率,該事件處理速率取決于包
括CPU和內(nèi)存的權(quán)衡因子,或者由專業(yè)測試工具事先測定的-:..>—(週(聊)是系
統(tǒng)當(dāng)前所有處理節(jié)點(diǎn)的事件處理總速率;(IlB)負(fù)載管理模塊順序給每個處理節(jié)點(diǎn)隨機(jī)分配IoadAfter(i)個負(fù)載,直到所有虛擬節(jié)點(diǎn)都有一個與其對應(yīng)的處理節(jié)點(diǎn);且每次分配都要分別在動態(tài)負(fù)載信息表和虛擬節(jié)點(diǎn)映射表執(zhí)行相應(yīng)更新操作。(IlC)負(fù)載管理模塊對動態(tài)負(fù)載信息表中各個處理節(jié)點(diǎn)按照其當(dāng)前的實(shí)際負(fù)載數(shù)與理論負(fù)載數(shù)之差的絕對值進(jìn)行降序排列。( 12)系統(tǒng)運(yùn)行后,當(dāng)新增或移出處理節(jié)點(diǎn)時,為使系統(tǒng)盡快重新達(dá)到負(fù)載均衡,負(fù)載管理模塊實(shí)時更新虛擬節(jié)點(diǎn)映射表和動態(tài)負(fù)載信息表。步驟2 (參見圖4),每個處理節(jié)點(diǎn)的通信層中的事件分發(fā)模塊與負(fù)載管理模塊交互,根據(jù)虛擬節(jié)點(diǎn)映射表執(zhí)行事件分發(fā)決策操作,將每個事件分發(fā)到相應(yīng)的處理節(jié)點(diǎn),并實(shí)現(xiàn)負(fù)載均衡事件分發(fā)模塊計(jì)算每個事件的關(guān)鍵屬性的哈希值,再將該哈希值除以虛擬節(jié)點(diǎn)總個數(shù)所得到的余數(shù),作為將該事件準(zhǔn)備分發(fā)到的虛擬節(jié)點(diǎn)編號;事件分發(fā)模塊與負(fù)載管理模塊交互,從虛擬節(jié)點(diǎn)映射表查找該虛擬節(jié)點(diǎn)編號及其所對應(yīng)的處理節(jié)點(diǎn)編號,以獲取準(zhǔn)備將該事件分發(fā)到的處理節(jié)點(diǎn)編號。圖4所示的系統(tǒng)事件分發(fā)機(jī)制示意圖是本發(fā)明方法的關(guān)鍵,為了更詳細(xì)地介紹其操作流程,下面根據(jù)本發(fā)明三種應(yīng)用場景分別介紹三種不同場景下的分布式負(fù)載均衡事件分發(fā)流程。 參見圖5,說明分發(fā)事件場景的分布式負(fù)載均衡事件分發(fā)操作流程,其對應(yīng)的是本系統(tǒng)進(jìn)行海量數(shù)據(jù)處理的場景。分發(fā)事件場景包括下列操作內(nèi)容(Al)處理節(jié)點(diǎn)的事件監(jiān)聽模塊監(jiān)測到網(wǎng)絡(luò)中新出現(xiàn)需要處理的事件,就根據(jù)該事件類型將其發(fā)送到處理單元容器,交給相應(yīng)的處理單元進(jìn)行處理。需要說明的是,分布式處理集群中每個處理節(jié)點(diǎn)都在時刻監(jiān)聽是否有需處理事件。(A2)該處理單元完成事件處理后,將新產(chǎn)生的事件準(zhǔn)備發(fā)往其他處理節(jié)點(diǎn)或由其自身繼續(xù)處理。(A3)事件分發(fā)模塊先計(jì)算該新事件屬性的哈希值,再利用哈希方法、即將該哈希值除以虛擬節(jié)點(diǎn)總個數(shù)所得到的余數(shù)(啟動時配置,系統(tǒng)啟動后為常量),作為對應(yīng)的虛擬節(jié)點(diǎn)編號。(A4)事件分發(fā)模塊與負(fù)載管理模塊交互,根據(jù)該虛擬節(jié)點(diǎn)編號查詢虛擬節(jié)點(diǎn)映射表(參見表1),得到該新事件準(zhǔn)備分發(fā)到的處理節(jié)點(diǎn)編號;然后,將該新事件與要分發(fā)的對應(yīng)處理節(jié)點(diǎn)編號信息傳給事件發(fā)送模塊。(A5)事件發(fā)送模塊將該新事件發(fā)往其他處理節(jié)點(diǎn)或自身節(jié)點(diǎn)繼續(xù)處理,直到產(chǎn)生事件最終結(jié)果,返回給客戶端。需要注意的是,上述兩個步驟(A3)和(A4)是本發(fā)明負(fù)載均衡方法的核心流程,可以看到各個處理節(jié)點(diǎn)分別執(zhí)行負(fù)載均衡策略,無中心負(fù)載均衡處理節(jié)點(diǎn),是一種典型的基于p2p技術(shù)的分布式負(fù)載均衡方法。參見圖6,介紹新增處理節(jié)點(diǎn)場景時、即系統(tǒng)進(jìn)行海量數(shù)據(jù)處理時,新增一個處理節(jié)點(diǎn)后,其他處理節(jié)點(diǎn)的部分負(fù)載分?jǐn)偨o新處理節(jié)點(diǎn),使得分布式處理集群重新達(dá)到負(fù)載均衡的操作流程。該場景包括下列操作內(nèi)容(BI)處理節(jié)點(diǎn)的分布式集群管理模塊檢測到新增處理節(jié)點(diǎn)加入,就將該信息通知分布式集群中的所有處理節(jié)點(diǎn)的負(fù)載管理模塊,并提供該新增處理節(jié)點(diǎn)的配置信息(包括該新增處理節(jié)點(diǎn)編號、IP地址、事件處理速率和端口號)。(B2)其他各個處理節(jié)點(diǎn)負(fù)載管理模塊接收上述信息,再根據(jù)該新增處理節(jié)點(diǎn)信息對動態(tài)負(fù)載信息表和虛擬節(jié)點(diǎn)映射表進(jìn)行更新。該更新方法借鑒了一致性哈希在節(jié)點(diǎn)加入系統(tǒng)時盡量減少系統(tǒng)拓?fù)渚S護(hù)的思路設(shè)置一個通用場景,用于說明增加一個處理節(jié)點(diǎn)時的動態(tài)負(fù)載信息表和虛擬節(jié)點(diǎn)映射表更新方法。假設(shè)當(dāng)前系統(tǒng)設(shè)有N個處理節(jié)點(diǎn),總共有VIRTUAL_NODES_NUM個虛擬節(jié)點(diǎn)(VIRTUAL_NODES_NUM遠(yuǎn)大于N)?,F(xiàn)在要增加一個處理節(jié)點(diǎn),也就是處理節(jié)點(diǎn)從N個增加到N+1個。具體操作內(nèi)容如下(B2A)為保證負(fù)載均衡,負(fù)載管理模塊先計(jì)算系統(tǒng)當(dāng)前包括新增處理節(jié)點(diǎn)在內(nèi)的所有處理節(jié)點(diǎn)理論上將獲取的負(fù)載個數(shù),即其理論負(fù)載個數(shù)IoadAfter⑴為
ΜΑ·_、= VimAL - NODES - _,式中,自然數(shù)i是處理節(jié)點(diǎn)編號,
其最大值為N ;, VIRTUAL_NODES_NUM是虛擬節(jié)點(diǎn)總個數(shù),其數(shù)值遠(yuǎn)大于系統(tǒng)處理節(jié)點(diǎn)總個數(shù)N ;P_CAPACITY(i)是編號為i的處理節(jié)點(diǎn)的事件處理速率,Σ :;Ρ—(、ΑΡΑαΤΥ( )是系統(tǒng)當(dāng)前所有處理節(jié)點(diǎn)的總事件處理速率;(Β2Β)負(fù)載管理模塊將動態(tài)負(fù)載信息表按照處理節(jié)點(diǎn)的實(shí)際負(fù)載數(shù)與理論負(fù)載數(shù)之差的絕對值進(jìn)行降序排列;
(B2C)負(fù)載管理模塊按照調(diào)整后的動態(tài)負(fù)載信息表的排列順序,從絕對值最大的處理節(jié)點(diǎn)k開始,將(I IoadAfter (k)-IoadActual (k) | )個負(fù)載轉(zhuǎn)移給新增處理節(jié)點(diǎn),式中,IoadActual (k)為處理節(jié)點(diǎn)的實(shí)際負(fù)載個數(shù);直到新增處理節(jié)點(diǎn)i的理論負(fù)載個數(shù)與實(shí)際負(fù)載個數(shù)相等;需要注意的是對于需要轉(zhuǎn)移負(fù)載給新增處理節(jié)點(diǎn)的最后一個處理節(jié)點(diǎn)1,其轉(zhuǎn)移的負(fù)載個數(shù)應(yīng)不多于(IloadAfter(I)-IoadActual(I) | ),以保證該新增處理節(jié)點(diǎn)所分配的實(shí)際負(fù)載個數(shù)不大于其理論分配的負(fù)載個數(shù),且負(fù)載數(shù)多的處理節(jié)點(diǎn)移出更多的負(fù)載(B2D)根據(jù)上述步驟調(diào)整結(jié)果,對虛擬節(jié)點(diǎn)映射表和動態(tài)負(fù)載信息表做相應(yīng)更新遍歷處理節(jié)點(diǎn)的動態(tài)負(fù)載信息表,對于該表中每個處理節(jié)點(diǎn)轉(zhuǎn)移(I IoadAfter (k)-IoadActual (k) | )個負(fù)載給新增處理節(jié)點(diǎn),直到新增處理節(jié)點(diǎn)i理論負(fù)載個數(shù)IoadAfteHi)與實(shí)際負(fù)載個數(shù)相等IoadActual (i);且每次轉(zhuǎn)移都要分別在動態(tài)負(fù)載信息表和虛擬節(jié)點(diǎn)映射表執(zhí)行相應(yīng)更新操作;再在動態(tài)負(fù)載信息表上新建一行,用于表示該新增處理節(jié)點(diǎn)的負(fù)載信息;最后,對動態(tài)負(fù)載信息表中各個處理節(jié)點(diǎn)重新按照其實(shí)際負(fù)載數(shù)與理論負(fù)載數(shù)之差的絕對值進(jìn)行降序排列。(B3)每個處理節(jié)點(diǎn)負(fù)載管理模塊完成虛擬節(jié)點(diǎn)映射表和動態(tài)負(fù)載信息表的更新后,新增處理節(jié)點(diǎn)就分擔(dān)該分布式處理集群中的所有原處理節(jié)點(diǎn)的部分負(fù)載,使得新增處理節(jié)點(diǎn)和該處理集群中的所有原處理節(jié)點(diǎn)很快重新達(dá)到負(fù)載均衡。參見圖7,介紹對于處理節(jié)點(diǎn)移出場景的分布式負(fù)載均衡表更新流程。該場景是本發(fā)明系統(tǒng)進(jìn)行海量數(shù)據(jù)處理時,某個處理節(jié)點(diǎn)因故障或管理原因被移出系統(tǒng)后,分布式處理集群其他處理節(jié)點(diǎn)取代移出處理節(jié)點(diǎn)工作,重新達(dá)到負(fù)載均衡的過程。此時的操作步驟如下(Cl)處理節(jié)點(diǎn)的分布式集群管理模塊采用各個處理節(jié)點(diǎn)之間互發(fā)心跳信息或其他方法,檢測到該集群中有移出處理節(jié)點(diǎn)的狀況處理節(jié)點(diǎn)正常關(guān)閉或因故障而宕機(jī),使得該集群中的處理節(jié)點(diǎn)減少的現(xiàn)象。(C2)發(fā)現(xiàn)移出處理節(jié)點(diǎn)的處理節(jié)點(diǎn)中的分布式集群管理模塊,通知該分布式集群中的所有處理節(jié)點(diǎn)的負(fù)載管理模塊有處理節(jié)點(diǎn)移出,并提供該移出處理節(jié)點(diǎn)包括其編號、IP地址、事件處理速率和端口號的配置信息。(C3)其他各個處理節(jié)點(diǎn)的負(fù)載管理模塊接收上述信息后,根據(jù)該移出的處理節(jié)點(diǎn)信息更新動態(tài)負(fù)載信息表和虛擬節(jié)點(diǎn)映射表。這個更新過程是重新達(dá)到負(fù)載均衡的核心,本發(fā)明對于處理節(jié)點(diǎn)移出的動態(tài)負(fù)載信息表和虛擬節(jié)點(diǎn)映射表的更新方法同樣也借鑒了一致性哈希在節(jié)點(diǎn)加入系統(tǒng)時盡量減少系統(tǒng)拓?fù)渚S護(hù)的思想。處理節(jié)點(diǎn)移出的動態(tài)負(fù)載信息表和虛擬節(jié)點(diǎn)映射表的詳細(xì)更新過程包括下列操作內(nèi)容(C3A)假設(shè)原處理節(jié)點(diǎn)總個數(shù)為N,虛擬節(jié)點(diǎn)總個數(shù)為VIRTUAL_
N0DES_NUM,且VIRTUAL_NODES_NUM遠(yuǎn)大于N,此時移出一個處理節(jié)點(diǎn),即當(dāng)
前處理節(jié)點(diǎn)總個數(shù)為(N-I);同時,計(jì)算當(dāng)前系統(tǒng)各處理節(jié)點(diǎn)的理論負(fù)載為
P C APiCiTYii) ·
—=NODES — NtfM 隱ryr⑴*并對動態(tài)負(fù)載信息表中各
個處理節(jié)點(diǎn)重新按照其實(shí)際負(fù)載數(shù)與理論負(fù)載數(shù)之差的絕對值降序排列;(C3B)為保證移出處理節(jié)點(diǎn)的負(fù)載轉(zhuǎn)移后,仍然實(shí)現(xiàn)均衡負(fù)載,采取下述更新策略按照調(diào)整后的動態(tài)負(fù)載信息表的排列順序,從絕對值最大的處理節(jié)點(diǎn)k開始,逐個進(jìn)行下述操作從該移出處理節(jié)點(diǎn)處獲取(I IoadAfter (k)-IoadActual (k) | )個負(fù)載,直到該移出處理節(jié)點(diǎn)的所有負(fù)載都已被重新分配給其他各個處理節(jié)點(diǎn);需要注意的是,操作到動態(tài)負(fù)載信息表中最后一個處理節(jié)點(diǎn)時,如果該移出處理節(jié)點(diǎn)的負(fù)載還沒有全部被分配出去,則將該移出處理節(jié)點(diǎn)剩余的所有負(fù)載都轉(zhuǎn)移給最后一個處理節(jié)點(diǎn),保證負(fù)載數(shù)少的處理節(jié)點(diǎn)能從該移出處理節(jié)點(diǎn)處獲取更多負(fù)載;(C3C)根據(jù)上述操作結(jié)果,相應(yīng)修改虛擬節(jié)點(diǎn)映射表和動態(tài)負(fù)載信息表遍歷處理節(jié)點(diǎn)的動態(tài)負(fù)載信息表,該表中的每個處理節(jié)點(diǎn)從該移出處理節(jié)點(diǎn)處獲取(I IoadAfter (k)-IoadActual (k) I)個負(fù)載,其中,自然數(shù)k為遍歷時的當(dāng)前處理節(jié)點(diǎn)編號;直到該移出處理節(jié)點(diǎn)的所有負(fù)載都已被重新分配給其他各個處理節(jié)點(diǎn);且每次轉(zhuǎn)移負(fù)載都要分別在動態(tài)負(fù)載信息表和虛擬節(jié)點(diǎn)映射表執(zhí)行相應(yīng)修改操作;(C34)在動態(tài)負(fù)載信息表上刪除已經(jīng)移出的處理節(jié)點(diǎn)信息;最后,對動態(tài)負(fù)載信息表中各個處理節(jié)點(diǎn)重新按照其實(shí)際負(fù)載數(shù)與理論負(fù)載數(shù)之差的絕對值進(jìn)行降序排列。(C4)每個處理節(jié)點(diǎn)負(fù)載管理模塊更新完成虛擬節(jié)點(diǎn)映射表和動態(tài)負(fù)載信息表后,該集群中的其他各個處理節(jié)點(diǎn)就承擔(dān)了該退出處理節(jié)點(diǎn)的負(fù)載,并在盡可能短的時間內(nèi),移出處理節(jié)點(diǎn)后的該分布式處理集群重新實(shí)現(xiàn)負(fù)載均衡。本發(fā)明已經(jīng)進(jìn)行了大量的仿真實(shí)施試驗(yàn),試驗(yàn)的結(jié)果成功的,實(shí)現(xiàn)了發(fā)明目的。
權(quán)利要求
1.一種基于點(diǎn)對點(diǎn)P2P (Peer-to-Peer)技術(shù)的分布式負(fù)載均衡系統(tǒng),其特征在于該系統(tǒng)由具有均衡負(fù)載功能的分布式處理集群所組成,該處理集群內(nèi)沒有集中控制的中心節(jié)點(diǎn),只設(shè)有分設(shè)于不同服務(wù)器、并分別用作該系統(tǒng)分布式控制核心的多個同構(gòu)或異構(gòu)的處理節(jié)點(diǎn),每個處理節(jié)點(diǎn)都能獨(dú)立提供分布式仲裁的負(fù)載均衡功能,且各自的處理事件的權(quán)限與均衡負(fù)載的功能都相同,異構(gòu)處理節(jié)點(diǎn)的差異只是其事件的處理速率不同;當(dāng)客戶端向分布式處理集群實(shí)時發(fā)送海量數(shù)據(jù)處理請求時,該系統(tǒng)的某個處理節(jié)點(diǎn)完成請求處理后,將產(chǎn)生的中間結(jié)果封裝為事件,發(fā)往其它處理節(jié)點(diǎn)繼續(xù)處理;各處理節(jié)點(diǎn)在分發(fā)事件過程中,始終采用分布式負(fù)載均衡方法保證事件分發(fā)的負(fù)載均衡,直到產(chǎn)生最終結(jié)果并返還給客戶端;該處理節(jié)點(diǎn)設(shè)有處理層和通信層;其中 處理層,由包含多個處理單元的處理單元容器所組成,負(fù)責(zé)進(jìn)行事件處理接收來自通信層的事件,再根據(jù)事件類型和每個事件所設(shè)定屬性的屬性值,將該事件交由特定處理單元進(jìn)行處理,同時負(fù)責(zé)將該事件處理完成后產(chǎn)生的新事件或最終結(jié)果,交給通信層進(jìn)行分發(fā)與發(fā)送; 通信層,用于監(jiān)聽、分發(fā)事件及實(shí)現(xiàn)分布式負(fù)載均衡負(fù)責(zé)從網(wǎng)絡(luò)接收事件并轉(zhuǎn)交給處理層;然后接收處理層完成處理后產(chǎn)生的新事件或最終結(jié)果,再使用分布式負(fù)載均衡方法將該新事件或最終結(jié)果分發(fā)給其他處理節(jié)點(diǎn)或客戶端,保證該分布式處理集群中的各處理節(jié)點(diǎn)負(fù)載均衡;設(shè)有事件監(jiān)聽、事件分發(fā)、事件發(fā)送、負(fù)載管理和分布式集群管理共五個模塊。
2.根據(jù)權(quán)利要求I所述的系統(tǒng),其特征在于所述處理層的各個組成部件功能如下 處理單元容器,用于管理和控制其內(nèi)部的各個處理單元,采用設(shè)定順序激活相應(yīng)的處理單元來處理不同事件; 處理單元,用于處理特定類型和屬性的事件,負(fù)責(zé)藉由通信層的事件分發(fā)模塊和事件發(fā)送模塊,將產(chǎn)生的中間處理結(jié)果作為新事件,發(fā)往其他處理單元繼續(xù)處理;或者將處理的最終結(jié)果返回給客戶端;每個處理單元都是系統(tǒng)預(yù)先設(shè)置的,或者由第三方程序員開發(fā)并部署到處理節(jié)點(diǎn)上。
3.根據(jù)權(quán)利要求I所述的系統(tǒng),其特征在于所述通信層的各個組成部件功能如下 事件監(jiān)聽模塊,負(fù)責(zé)接收網(wǎng)絡(luò)事件,并交由處理層的處理單元進(jìn)行處理; 事件分發(fā)模塊,負(fù)責(zé)接收處理層的新事件或最終結(jié)果,并按照負(fù)載管理模塊提供的負(fù)載均衡信息來分發(fā)新事件或最終結(jié)果,再經(jīng)由事件發(fā)送模塊將其發(fā)送到其他處理節(jié)點(diǎn)或客戶端; 事件發(fā)送模塊,用于將來自事件分發(fā)模塊的新事件或最終結(jié)果分別發(fā)送到設(shè)定的處理節(jié)點(diǎn)或客戶端; 負(fù)載管理模塊,負(fù)責(zé)創(chuàng)建與維護(hù)事件分發(fā)模塊所需的負(fù)載信息,即虛擬節(jié)點(diǎn)映射表與動態(tài)負(fù)載信息表在系統(tǒng)啟動時,借助分布式集群管理模塊中的信息創(chuàng)建虛擬節(jié)點(diǎn)映射表;在系統(tǒng)啟動后,利用已經(jīng)建立的虛擬節(jié)點(diǎn)映射表信息創(chuàng)建動態(tài)負(fù)載信息表,且在分布式處理集群中有新增或退出處理節(jié)點(diǎn)時,對虛擬節(jié)點(diǎn)映射表和動態(tài)負(fù)載信息表進(jìn)行實(shí)時更新; 分布式集群管理模塊,負(fù)責(zé)管理和維護(hù)分布式處理集群及其中的全部處理節(jié)點(diǎn)與其對應(yīng)的虛擬節(jié)點(diǎn),該分布式處理集群中的各處理節(jié)點(diǎn)也經(jīng)由該分布式集群管理模塊實(shí)時獲取該集群中自身與其他處理節(jié)點(diǎn)的鏈接地址、當(dāng)前存活狀態(tài)、負(fù)載狀態(tài)與相關(guān)信息。
4.根據(jù)權(quán)利要求3所述的系統(tǒng),其特征在于所述虛擬節(jié)點(diǎn)是為了實(shí)現(xiàn)分布式負(fù)載均衡方法而設(shè)置的一個與處理節(jié)點(diǎn)相互映射的邏輯符號,每個虛擬節(jié)點(diǎn)只能映射到一個處理節(jié)點(diǎn),但每個處理節(jié)點(diǎn)能夠映射到多個虛擬節(jié)點(diǎn);虛擬節(jié)點(diǎn)個數(shù)是在系統(tǒng)啟動時設(shè)置的,其數(shù)量遠(yuǎn)大于處理節(jié)點(diǎn)個數(shù);且在系統(tǒng)運(yùn)行后,虛擬節(jié)點(diǎn)個數(shù)保持不變;當(dāng)系統(tǒng)新增或退出處理節(jié)點(diǎn)時,處理節(jié)點(diǎn)及其虛擬節(jié)點(diǎn)之間的映射關(guān)系也根據(jù)調(diào)整算法作相應(yīng)改變; 所述虛擬節(jié)點(diǎn)映射表設(shè)于每個處理節(jié)點(diǎn)的負(fù)載管理模塊,用于表示每個虛擬節(jié)點(diǎn)編號及其對應(yīng)的處理節(jié)點(diǎn)編號,以便在系統(tǒng)分發(fā)事件時,查找該虛擬節(jié)點(diǎn)映射表,根據(jù)虛擬節(jié)點(diǎn)編號獲取其對應(yīng)的處理節(jié)點(diǎn);該虛擬節(jié)點(diǎn)映射表是根據(jù)每個處理節(jié)點(diǎn)的事件處理速率高低降序排列形成的;因每個處理節(jié)點(diǎn)處理事件的速率不同,故每個處理節(jié)點(diǎn)所分配的對應(yīng)虛擬節(jié)點(diǎn)個數(shù)也不相等;且在系統(tǒng)運(yùn)行后,為節(jié)省更新時間,采取增刪處理節(jié)點(diǎn)的動態(tài)負(fù)載信息表和虛擬節(jié)點(diǎn)映射表的更新方法來實(shí)時更新虛擬節(jié)點(diǎn)映射表; 所述動態(tài)負(fù)載信息表設(shè)于每個處理節(jié)點(diǎn)負(fù)載管理模塊,用于表示每個處理節(jié)點(diǎn)編號、按照其事件處理速率在理論上分配的虛擬節(jié)點(diǎn)個數(shù)與其實(shí)際對應(yīng)的虛擬節(jié)點(diǎn)個數(shù);該動態(tài)負(fù)載信息表是按照每個處理節(jié)點(diǎn)的負(fù)載數(shù)量與其理論上分配的負(fù)載數(shù)量之差的絕對值降序排列形成的,且其信息與虛擬節(jié)點(diǎn)映射表的信息逐一對應(yīng);故在虛擬節(jié)點(diǎn)映射表更新時,動態(tài)負(fù)載信息表也要相應(yīng)更新。
5.一種基于P2P技術(shù)的分布式負(fù)載均衡系統(tǒng)的工作方法,其特征在于每個處理節(jié)點(diǎn)的通信層中的事件分發(fā)模塊和負(fù)載管理模塊協(xié)同完成基于虛擬節(jié)點(diǎn)與處理節(jié)點(diǎn)之間映射的事件分發(fā)方法,實(shí)現(xiàn)基于P2P技術(shù)的分布式負(fù)載均衡;所述方法包括下述兩個操作步驟 步驟1,每個處理節(jié)點(diǎn)的通信層中的負(fù)載管理模塊創(chuàng)建或更新虛擬節(jié)點(diǎn)映射表和動態(tài)負(fù)載信息表 步驟2,每個處理節(jié)點(diǎn)的通信層中的事件分發(fā)模塊與負(fù)載管理模塊交互,根據(jù)虛擬節(jié)點(diǎn)映射表執(zhí)行事件分發(fā)決策操作,將每個事件分發(fā)到相應(yīng)的處理節(jié)點(diǎn),并實(shí)現(xiàn)負(fù)載均衡 事件分發(fā)模塊計(jì)算每個事件的關(guān)鍵屬性的哈希值,再將該哈希值除以虛擬節(jié)點(diǎn)總個數(shù)所得到的余數(shù),作為將該事件準(zhǔn)備分發(fā)到的虛擬節(jié)點(diǎn)編號; 事件分發(fā)模塊與負(fù)載管理模塊交互,從虛擬節(jié)點(diǎn)映射表查找該虛擬節(jié)點(diǎn)編號及其所對應(yīng)的處理節(jié)點(diǎn)編號,以獲取準(zhǔn)備將該事件分發(fā)到的處理節(jié)點(diǎn)編號。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于所述方法的應(yīng)用場景有三種 分發(fā)事件客戶端向分布式負(fù)載均衡系統(tǒng)中的分布式處理集群發(fā)送海量數(shù)據(jù)處理請求,分布式處理集群中的各個處理節(jié)點(diǎn)分別獨(dú)立、均等地完成各自的負(fù)載決策,且在處理過程中,保證各個處理節(jié)點(diǎn)的負(fù)載均衡;并實(shí)時向客戶端返回處理結(jié)果; 新增處理節(jié)點(diǎn)客戶端向分布式處理集群發(fā)送海量數(shù)據(jù)處理請求過程中,為減輕該處理集群中各處理節(jié)點(diǎn)的負(fù)載壓力,在該處理集群中實(shí)時增加新的處理節(jié)點(diǎn);并在盡可能短時間內(nèi),由新增處理節(jié)點(diǎn)分擔(dān)原處理集群中各處理節(jié)點(diǎn)的部分負(fù)載,使得新增處理節(jié)點(diǎn)和原處理集群中各處理節(jié)點(diǎn)重新實(shí)現(xiàn)負(fù)載均衡; 移出處理節(jié)點(diǎn)客戶端向該分布式處理集群發(fā)送海量數(shù)據(jù)處理請求過程中,因故障或管理需要,有節(jié)點(diǎn)要遷移離開該處理集群時,由該處理集群中的其它處理節(jié)點(diǎn)承擔(dān)該移出處理節(jié)點(diǎn)的負(fù)載;并在盡可能短時間內(nèi),使得移出一個或多個處理節(jié)點(diǎn)后的該處理集群中的各個處理節(jié)點(diǎn)重新達(dá)到負(fù)載均衡。
7.根據(jù)權(quán)利要求5所述的方法,其特征在于所述步驟I包括下列操作內(nèi)容 (11)系統(tǒng)初始建立時,負(fù)載管理模塊根據(jù)每個處理節(jié)點(diǎn)的事件處理速率高低降序排列方式創(chuàng)建初始化虛擬節(jié)點(diǎn)映射表,此時對于事件處理速率不同的處理節(jié)點(diǎn),分別設(shè)置相應(yīng)不同的虛擬節(jié)點(diǎn)個數(shù); (12)系統(tǒng)運(yùn)行后,當(dāng)新增或移出處理節(jié)點(diǎn)時,為使系統(tǒng)盡快重新達(dá)到負(fù)載均衡,負(fù)載管理模塊實(shí)時更新虛擬節(jié)點(diǎn)映射表和動態(tài)負(fù)載信息表。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于所述步驟(11)包括下列操作內(nèi)容 (IIA)為保證負(fù)載均衡,負(fù)載管理模塊先計(jì)算系統(tǒng)當(dāng)前每個處理節(jié)點(diǎn)理論上獲取的負(fù)載個數(shù),即其理論負(fù)載個數(shù)IoadAfter (i) P CAPACnYif\為:k__:vmnw._m)ms-Ni· ⑶濃“;式中,virtual_nodes_num 是虛擬節(jié)點(diǎn)總個數(shù),其數(shù)值遠(yuǎn)大于系統(tǒng)處理節(jié)點(diǎn)總個數(shù)N ;自然數(shù)i是處理節(jié)點(diǎn)編號,其最大值為N ;P_CAPACITY(i)是編號為i的處理節(jié)點(diǎn)的事件處理速率,該事件處理速率取決于包括CPU和內(nèi)存的權(quán)衡因子,或者由專業(yè)測試工具事先測定的Tlp是系統(tǒng)當(dāng)前所有處理節(jié)點(diǎn)的事件處理總速率; (IIB)負(fù)載管理模塊順序給每個處理節(jié)點(diǎn)隨機(jī)分配IoadAfteHi)個負(fù)載,直到所有虛擬節(jié)點(diǎn)都有一個與其對應(yīng)的處理節(jié)點(diǎn);且每次分配都要分別在動態(tài)負(fù)載信息表和虛擬節(jié)點(diǎn)映射表執(zhí)行相應(yīng)更新操作。
(IIC)負(fù)載管理模塊對動態(tài)負(fù)載信息表中各個處理節(jié)點(diǎn)按照其當(dāng)前的實(shí)際負(fù)載數(shù)與理論負(fù)載數(shù)之差的絕對值進(jìn)行降序排列。
9.根據(jù)權(quán)利要求6所述的方法,其特征在于所述方法應(yīng)用于分發(fā)事件場景時,包括下列操作內(nèi)容 (Al)處理節(jié)點(diǎn)的事件監(jiān)聽模塊監(jiān)測到網(wǎng)絡(luò)中新出現(xiàn)需要處理的事件,就根據(jù)該事件類型將其發(fā)送到處理單元容器,交給相應(yīng)的處理單元進(jìn)行處理; (A2)該處理單元完成事件處理后,將新產(chǎn)生的事件準(zhǔn)備發(fā)往其他處理節(jié)點(diǎn)或由其自身繼續(xù)處理; (A3)事件分發(fā)模塊先計(jì)算該新事件屬性的哈希值,再利用哈希方法、即將該哈希值除以虛擬節(jié)點(diǎn)總個數(shù)所得到的余數(shù),作為對應(yīng)的虛擬節(jié)點(diǎn)編號; (A4)事件分發(fā)模塊與負(fù)載管理模塊交互,根據(jù)該虛擬節(jié)點(diǎn)編號查詢虛擬節(jié)點(diǎn)映射表,得到該新事件準(zhǔn)備分發(fā)到的處理節(jié)點(diǎn)編號;然后,將該新事件與要分發(fā)的對應(yīng)處理節(jié)點(diǎn)編號信息傳給事件發(fā)送模塊; (A5)事件發(fā)送模塊將該新事件發(fā)往其他處理節(jié)點(diǎn)或自身節(jié)點(diǎn)繼續(xù)處理,直到產(chǎn)生事件最終結(jié)果,返回給客戶端。
10.根據(jù)權(quán)利要求6所述的方法,其特征在于所述方法應(yīng)用于新增處理節(jié)點(diǎn)場景時,包括下列操作內(nèi)容 (BI)處理節(jié)點(diǎn)的分布式集群管理模塊檢測到新增處理節(jié)點(diǎn)加入,就將該信息通知分布式集群中的所有處理節(jié)點(diǎn)的負(fù)載管理模塊,并提供該新增處理節(jié)點(diǎn)的包括編號、IP地址、事件處理速率和端口號的配置信息; (B2)其他各個處理節(jié)點(diǎn)負(fù)載管理模塊接收上述信息,再根據(jù)該新增處理節(jié)點(diǎn)信息對動態(tài)負(fù)載信息表和虛擬節(jié)點(diǎn)映射表進(jìn)行更新; (B3)每個處理節(jié)點(diǎn)負(fù)載管理模塊完成虛擬節(jié)點(diǎn)映射表和動態(tài)負(fù)載信息表的更新后,新增處理節(jié)點(diǎn)就分擔(dān)該分布式處理集群中的所有原處理節(jié)點(diǎn)的部分負(fù)載,使得新增處理節(jié)點(diǎn)和該處理集群中的所有原處理節(jié)點(diǎn)很快重新達(dá)到負(fù)載均衡。
11.根據(jù)權(quán)利要求10所述的方法,其特征在于所述步驟(B2)中,動態(tài)負(fù)載信息表和虛擬節(jié)點(diǎn)映射表的更新包括下列操作內(nèi)容(B2A)為保證負(fù)載均衡,負(fù)載管理模塊先計(jì)算系統(tǒng)當(dāng)前包括新增處理節(jié)點(diǎn)在內(nèi)的所有處理節(jié)點(diǎn)理論上將獲取的負(fù)載個數(shù),即其理論負(fù)載個數(shù)IoadAfter⑴為
12.根據(jù)權(quán)利要求6所述的方法,其特征在于所述方法應(yīng)用于移出處理節(jié)點(diǎn)場景時,包括下列操作內(nèi)容 (Cl)處理節(jié)點(diǎn)的分布式集群管理模塊采用各個處理節(jié)點(diǎn)之間互發(fā)心跳信息或其他方法,檢測到該集群中有移出處理節(jié)點(diǎn)的狀況處理節(jié)點(diǎn)正常關(guān)閉或因故障而宕機(jī),使得該集群中的處理節(jié)點(diǎn)減少的現(xiàn)象; (C2)發(fā)現(xiàn)移出處理節(jié)點(diǎn)的處理節(jié)點(diǎn)中的分布式集群管理模塊,通知該分布式集群中的所有處理節(jié)點(diǎn)的負(fù)載管理模塊有處理節(jié)點(diǎn)移出,并提供該移出處理節(jié)點(diǎn)包括其編號、IP地址、事件處理速率和端口號的配置信息; (C3)其他各個處理節(jié)點(diǎn)的負(fù)載管理模塊接收上述信息后,根據(jù)該移出的處理節(jié)點(diǎn)信息更新動態(tài)負(fù)載信息表和虛擬節(jié)點(diǎn)映射表;(C4)每個處理節(jié)點(diǎn)負(fù)載管理模塊更新完成虛擬節(jié)點(diǎn)映射表和動態(tài)負(fù)載信息表后,該集群中的其他各個處理節(jié)點(diǎn)就承擔(dān)了該退出處理節(jié)點(diǎn)的負(fù)載,并在盡可能短的時間內(nèi),移出處理節(jié)點(diǎn)后的該分布式處理集群重新實(shí)現(xiàn)負(fù)載均衡。
13.根據(jù)權(quán)利要求12所述的方法,其特征在于所述步驟(C3)中,動態(tài)負(fù)載信息表和虛擬節(jié)點(diǎn)映射表的更新包括下列操作內(nèi)容 (C31)假設(shè)原處理節(jié)點(diǎn)總個數(shù)為N,虛擬節(jié)點(diǎn)總個數(shù)為VIRTUAL_NODES_NUM,且VIRTUAL_NODES_NUM遠(yuǎn)大于N,此時移出一個處理節(jié)點(diǎn),即當(dāng)前處理節(jié)點(diǎn)總個數(shù)為(N-I);同時,計(jì)算當(dāng)前系統(tǒng)各處理節(jié)點(diǎn)的理論負(fù)載為
全文摘要
一種基于P2P技術(shù)的分布式負(fù)載均衡系統(tǒng)和方法,系統(tǒng)由均衡負(fù)載功能的分布式處理集群所組成,該集群內(nèi)只設(shè)有分設(shè)于不同服務(wù)器的、由處理層和通信層構(gòu)成的多個同構(gòu)或異構(gòu)處理節(jié)點(diǎn),每個處理節(jié)點(diǎn)都能獨(dú)立承擔(dān)分布式仲裁的負(fù)載均衡功能,且其權(quán)限與功能都相同,差異只是事件的處理速率不同;當(dāng)客戶端向分布式處理集群實(shí)時發(fā)送海量數(shù)據(jù)處理請求時,某個處理節(jié)點(diǎn)完成請求處理后,將產(chǎn)生的中間結(jié)果封裝為事件,發(fā)往其它處理節(jié)點(diǎn)繼續(xù)處理;各處理節(jié)點(diǎn)在分發(fā)事件過程中,始終采用分布式負(fù)載均衡方法保證事件分發(fā)的負(fù)載均衡,直到產(chǎn)生最終結(jié)果并返還給客戶端。本發(fā)明有效避免系統(tǒng)出現(xiàn)單點(diǎn)失效的負(fù)載均衡,能夠在分布式集群系統(tǒng)中實(shí)現(xiàn)節(jié)點(diǎn)動態(tài)變化的負(fù)載均衡。
文檔編號H04L29/08GK102882973SQ20121038418
公開日2013年1月16日 申請日期2012年10月11日 優(yōu)先權(quán)日2012年10月11日
發(fā)明者趙耀, 宋穎瑩, 彭書凱, 鄒志勇, 楊放春, 鄒華, 孫其博, 林榮恒, 李靜林, 劉志晗 申請人:北京郵電大學(xué)