專利名稱:基于多核平臺(tái)的負(fù)載均衡軟件架構(gòu)及方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種負(fù)載均衡軟件架構(gòu)及方法,特別是關(guān)于一種應(yīng)用于網(wǎng)絡(luò)負(fù)載均 衡中的基于多核平臺(tái)的負(fù)載均衡軟件架構(gòu)及方法。
背景技術(shù):
上世紀(jì)70年代后,有賴于半導(dǎo)體技術(shù)的發(fā)展,計(jì)算機(jī)成本不斷降低,越來(lái)越 多的人開(kāi)始使用電腦,隨之而來(lái)的就是海量信息的交互。網(wǎng)絡(luò)作為信息交互的主要 載體,也必須滿足更高的要求,比如更快的響應(yīng)時(shí)間和更大的流量。當(dāng)一臺(tái)服務(wù)器 無(wú)法滿足用戶的請(qǐng)求時(shí),就引入了服務(wù)器集群。但是服務(wù)器集群并沒(méi)有真正解決問(wèn) 題,而是把問(wèn)題轉(zhuǎn)移到了服務(wù)器集群中的中心設(shè)備——負(fù)載均衡設(shè)備上。負(fù)載均衡 設(shè)備常常處于網(wǎng)絡(luò)邊沿,負(fù)責(zé)將用戶請(qǐng)求根據(jù)一定算法分配到多個(gè)后臺(tái)服務(wù)器上, 然后將后臺(tái)服務(wù)器的響應(yīng)返還給客戶。
一方面,由于幾乎所有流量都從負(fù)載均衡設(shè)備上經(jīng)過(guò),長(zhǎng)時(shí)間每秒鐘百萬(wàn)次甚 至千萬(wàn)次的TCP層(Transmission Control Protocol傳輸控制協(xié)議)計(jì)算對(duì)系 統(tǒng)性能無(wú)疑是一個(gè)嚴(yán)峻的考驗(yàn)。在以往的設(shè)計(jì)中,有些廠商借用專用的硬件交換機(jī) 模塊完成這一步,如BIGIP3400:使用兩塊BCM5692和一塊四層ASIC搭建出一塊交 換機(jī)板附著在主機(jī)上,用以將TCP層流量分析剝離主CPU,但是這就意味著昂貴的 造價(jià)和復(fù)雜的構(gòu)架。
另外一方面,由于摩爾定律失效,傳統(tǒng)半導(dǎo)體技術(shù)的發(fā)展遇到瓶頸,散熱問(wèn)題 難以解決使得CPU無(wú)法繼續(xù)提高主頻,在這樣的背景下多核CPU應(yīng)運(yùn)而生。由于每 個(gè)內(nèi)核的主頻可以比以前低,因此降低了總體功耗,從而回避了散熱的問(wèn)題。但是 如何將單核CPU的運(yùn)算分配到多核CPU上,有效的并行計(jì)算,就成了新的問(wèn)題。在 以往的多線程計(jì)算經(jīng)歷中得到一個(gè)普遍的共識(shí),那就是所有線程訪問(wèn)的將是同一個(gè) 數(shù)據(jù)結(jié)構(gòu),從而使線程間互鎖造成性能降低。對(duì)于負(fù)載均衡設(shè)備而言,這種性能降 低將是災(zāi)難性的。但是如果可以通過(guò)合適的手段,充分利用多核的軟件架構(gòu)替代硬 件,并且使線程間實(shí)現(xiàn)無(wú)鎖,無(wú)論是在經(jīng)濟(jì)性還是算法上都是一種突破。
發(fā)明內(nèi)容
針對(duì)上述問(wèn)題,本發(fā)明的目的是提供一種能夠?qū)崿F(xiàn)多線程無(wú)鎖的基于多核平臺(tái) 的負(fù)載均衡軟件架構(gòu)及方法,從而顯著提高負(fù)載均衡設(shè)備的負(fù)載均衡性能。
為實(shí)現(xiàn)上述目的,本發(fā)明采取以下技術(shù)方案 一種基于多核平臺(tái)的負(fù)載均衡軟件架構(gòu),其包括以下內(nèi)容1)采用多核平臺(tái)和負(fù)載均衡設(shè)備作為架構(gòu)元件,并為 負(fù)載均衡設(shè)備上的每個(gè)網(wǎng)卡初始化一個(gè)內(nèi)核線程,作為該網(wǎng)卡的軟中斷例程,各自 處理所對(duì)應(yīng)網(wǎng)卡的輸入和輸出,同時(shí)將所有內(nèi)核線程獨(dú)立化;2)為每?jī)蓚€(gè)網(wǎng)卡線 程之間的信息交換建立一個(gè)獨(dú)立的通道,每個(gè)通道中建立一組雙向環(huán)形隊(duì)列作為多 核平臺(tái)和負(fù)載均衡設(shè)備的聯(lián)結(jié)器,環(huán)形隊(duì)列維護(hù)一個(gè)寫(xiě)指針和一個(gè)讀指針,分別由 兩個(gè)線程操作,使線程間消息交換無(wú)需加鎖;3)在網(wǎng)卡輸入的軟中斷例程中實(shí)現(xiàn) 服務(wù)器負(fù)載均衡的選路策略,并在鏈路層執(zhí)行應(yīng)用層的所有工作。
每組環(huán)形隊(duì)列的個(gè)數(shù)等于線程個(gè)數(shù)減去1,且一個(gè)環(huán)形隊(duì)列用于向?qū)Ψ骄€程輸 出信息, 一個(gè)環(huán)形隊(duì)列用于接受對(duì)方線程發(fā)來(lái)的信息。
一種基于多核平臺(tái)的負(fù)載均衡方法,其包括以下步驟1)在與客戶端相連的 客戶端網(wǎng)卡收到客戶發(fā)來(lái)的請(qǐng)求后,負(fù)載均衡器根據(jù)所配置的服務(wù)器負(fù)載均衡策 略,選取服務(wù)端中的一后臺(tái)服務(wù)器,并在該客戶端網(wǎng)卡上初始化的線程中建立一條 連接規(guī)則;2)客戶端網(wǎng)卡將客戶端請(qǐng)求和選路信息一起放入與服務(wù)端相連的服務(wù) 端網(wǎng)卡的環(huán)形隊(duì)列中;3)服務(wù)端網(wǎng)卡將環(huán)形隊(duì)列中的客戶請(qǐng)求和選路信息一起讀 出,并在該服務(wù)端網(wǎng)卡上初始化的線程中記錄一條反向的連接規(guī)則,然后將改寫(xiě)后 的客戶請(qǐng)求發(fā)給服務(wù)端;4)后臺(tái)服務(wù)器做出響應(yīng),服務(wù)端網(wǎng)卡收到響應(yīng),根據(jù)記 錄中的反向連接規(guī)則,找到對(duì)應(yīng)的客戶端網(wǎng)卡;5)服務(wù)端網(wǎng)卡通過(guò)客戶端網(wǎng)卡中 的環(huán)形隊(duì)列,將服務(wù)端的響應(yīng)發(fā)給客戶端線程;6)客戶端線程從客戶端網(wǎng)卡的環(huán) 形隊(duì)列讀取后臺(tái)服務(wù)器響應(yīng),發(fā)給客戶端。
本發(fā)明由于采取以上技術(shù)方案,其具有以下優(yōu)點(diǎn)1、由于本發(fā)明方法將所有 數(shù)據(jù)實(shí)現(xiàn)了線程獨(dú)立化,因此不僅保證了在運(yùn)行時(shí)無(wú)需和其他線程爭(zhēng)搶數(shù)據(jù)的修改 權(quán),還可以由一個(gè)線程依次對(duì)多個(gè)數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作,或者采用業(yè)務(wù)分離的方式, 將業(yè)務(wù)分擔(dān)給多個(gè)線程,從而靈活配置硬件資源和軟件資源,如,可以使用一個(gè)CPU 內(nèi)核處理一個(gè)網(wǎng)卡的數(shù)據(jù),也可以使用多個(gè)CPU內(nèi)核處理一個(gè)網(wǎng)卡的數(shù)據(jù),同時(shí)還 可以使用一個(gè)CPU內(nèi)核處理多個(gè)網(wǎng)卡的數(shù)據(jù)。2、由于本發(fā)明方法使用多通道雙向 環(huán)形隊(duì)列實(shí)現(xiàn)多線程之間的通信,完全避免了鎖的使用,保證了各個(gè)線程間信息交 互的流暢,避免了線程間對(duì)同一資源的競(jìng)爭(zhēng),使各個(gè)線程真正實(shí)現(xiàn)了獨(dú)立運(yùn)行,并 行計(jì)算,充分發(fā)揮了多核處理器的優(yōu)勢(shì)。3、由于本發(fā)明在鏈路層執(zhí)行應(yīng)用層的所 有工作,從而將網(wǎng)絡(luò)協(xié)議棧平面化,最大化的減小了數(shù)據(jù)在層與層之間傳遞帶來(lái)的 損耗,達(dá)到了理論上的最優(yōu)效率。4、本發(fā)明將多線程計(jì)算應(yīng)用到負(fù)載均衡中,提 供了一種新穎高效的手段實(shí)現(xiàn)負(fù)載均衡。本發(fā)明采用多線程無(wú)鎖的軟件架構(gòu)實(shí)現(xiàn)了 服務(wù)器的負(fù)載均衡,實(shí)踐證明,它能夠顯著地提高負(fù)載均衡設(shè)備的負(fù)載均衡性能。
圖1是本發(fā)明的負(fù)載均衡軟件架構(gòu)示意圖
圖2是本發(fā)明的負(fù)載均衡方法流程圖
具體實(shí)施例方式
下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)的描述。
如圖1所示,本發(fā)明的負(fù)載均衡軟件架構(gòu)包括以下三部分內(nèi)容
1、 采用多核平臺(tái)和負(fù)載均衡設(shè)備作為架構(gòu)元件,并為負(fù)載均衡設(shè)備上的每個(gè) 網(wǎng)卡初始化一個(gè)內(nèi)核線程(以下簡(jiǎn)稱線程),作為該網(wǎng)卡的軟中斷例程,各自處理 所對(duì)應(yīng)網(wǎng)卡的輸入和輸出,同時(shí)將所有內(nèi)核線程獨(dú)立化,即為每一個(gè)線程建立一個(gè) 獨(dú)立的軟件運(yùn)行環(huán)境,在運(yùn)行狀態(tài)下和其他線程沒(méi)有相互的干擾,不會(huì)去中斷其他 線程以取得數(shù)據(jù),也不會(huì)被其他線程隨意打斷。
2、 為每?jī)蓚€(gè)網(wǎng)卡線程之間的信息交換建立一個(gè)獨(dú)立的通道,每個(gè)通道中建立 一組雙向環(huán)形隊(duì)列(以下簡(jiǎn)稱環(huán)形隊(duì)列)作為多核平臺(tái)和負(fù)載均衡設(shè)備的聯(lián)結(jié)器, 環(huán)形隊(duì)列維護(hù)一個(gè)寫(xiě)指針和一個(gè)讀指針,分別由兩個(gè)線程操作,使線程間消息交換 無(wú)需加鎖。由于要與其他的每個(gè)線程之間都建立環(huán)形隊(duì)列,因此每組環(huán)形隊(duì)列的個(gè) 數(shù)應(yīng)該等于線程個(gè)數(shù)減去1。其中一個(gè)環(huán)形隊(duì)列用于向?qū)Ψ骄€程輸出信息(例如環(huán)
,隊(duì)列2-〉1), 一個(gè)環(huán)形隊(duì)列用于接受對(duì)方線程發(fā)來(lái)的信息(例如環(huán)形隊(duì)列1->2)。 對(duì)同一個(gè)環(huán)形隊(duì)列而言,由于線程之間是獨(dú)立的,兩個(gè)線程之間建立的環(huán)形隊(duì)列是 封閉的,因此只有一個(gè)線程會(huì)將信息插入該環(huán)形隊(duì)列,也只有一個(gè)線程會(huì)從該環(huán)形 隊(duì)列中讀取信息。
3、 在網(wǎng)卡輸入的軟中斷例程中實(shí)現(xiàn)服務(wù)器負(fù)載均衡的選路策略(即任務(wù)流), 并在鏈路層執(zhí)行應(yīng)用層的所有工作,減少層間數(shù)據(jù)交換帶來(lái)的負(fù)擔(dān)。
如圖2所示,本發(fā)明的負(fù)載均衡方法包括以下步驟
步驟1、在與客戶端相連的網(wǎng)卡1 (即客戶端網(wǎng)卡)收到客戶發(fā)來(lái)的請(qǐng)求后, 負(fù)載均衡器根據(jù)所配置的服務(wù)器負(fù)載均衡策略,選取服務(wù)端中的一后臺(tái)服務(wù)器,并
在網(wǎng)卡1上初始化的線程中建立一條連接規(guī)則,包括從2層到4層連接的全部信息。 步驟2、網(wǎng)卡1將客戶端請(qǐng)求和選路信息(即服務(wù)器負(fù)載均衡策略的結(jié)果)一
起放入與服務(wù)端相連的網(wǎng)卡2(即服務(wù)端網(wǎng)卡)的環(huán)形隊(duì)列中。
步驟3、網(wǎng)卡2將環(huán)形隊(duì)列中的客戶請(qǐng)求和選路信息一起讀出,并在網(wǎng)卡2上
初始化的線程中記錄一條反向的連接規(guī)則,然后將改寫(xiě)后的客戶請(qǐng)求發(fā)給服務(wù)端。 步驟4、服務(wù)端做出響應(yīng),網(wǎng)卡2收到響應(yīng),根據(jù)記錄中的反向連接規(guī)則,找
到對(duì)應(yīng)的網(wǎng)卡1。步驟5、網(wǎng)卡2通過(guò)網(wǎng)卡1中的環(huán)形隊(duì)列,將服務(wù)端的響應(yīng)發(fā)給客戶端線程。 步驟6、客戶端線程從網(wǎng)卡l的環(huán)形隊(duì)列讀取后臺(tái)服務(wù)器響應(yīng),發(fā)給客戶端。 本發(fā)明僅以上述實(shí)施例進(jìn)行說(shuō)明,各部件的結(jié)構(gòu)、設(shè)置位置、及其連接都是可
以有所變化的,在本發(fā)明技術(shù)方案的基礎(chǔ)上,凡根據(jù)本發(fā)明原理對(duì)個(gè)別部件進(jìn)行的
改進(jìn)和等同變換,均不應(yīng)排除在本發(fā)明的保護(hù)范圍之外。
權(quán)利要求
1、一種基于多核平臺(tái)的負(fù)載均衡軟件架構(gòu),其包括以下內(nèi)容1)采用多核平臺(tái)和負(fù)載均衡設(shè)備作為架構(gòu)元件,并為負(fù)載均衡設(shè)備上的每個(gè)網(wǎng)卡初始化一個(gè)內(nèi)核線程,作為該網(wǎng)卡的軟中斷例程,各自處理所對(duì)應(yīng)網(wǎng)卡的輸入和輸出,同時(shí)將所有內(nèi)核線程獨(dú)立化;2)為每?jī)蓚€(gè)網(wǎng)卡線程之間的信息交換建立一個(gè)獨(dú)立的通道,每個(gè)通道中建立一組雙向環(huán)形隊(duì)列作為多核平臺(tái)和負(fù)載均衡設(shè)備的聯(lián)結(jié)器,環(huán)形隊(duì)列維護(hù)一個(gè)寫(xiě)指針和一個(gè)讀指針,分別由兩個(gè)線程操作,使線程間消息交換無(wú)需加鎖;3)在網(wǎng)卡輸入的軟中斷例程中實(shí)現(xiàn)服務(wù)器負(fù)載均衡的選路策略,并在鏈路層執(zhí)行應(yīng)用層的所有工作。
2、 如權(quán)利要求1所述的基于多核平臺(tái)的負(fù)載均衡軟件架構(gòu),其特征在于每 組環(huán)形隊(duì)列的個(gè)數(shù)等于線程個(gè)數(shù)減去1,且一個(gè)環(huán)形隊(duì)列用于向?qū)Ψ骄€程輸出信息, 一個(gè)環(huán)形隊(duì)列用于接受對(duì)方線程發(fā)來(lái)的信息。
3、 一種采用如權(quán)利1 2所述軟件架構(gòu)的基于多核平臺(tái)的負(fù)載均衡方法,其包 括以下步驟1) 在與客戶端相連的客戶端網(wǎng)卡收到客戶發(fā)來(lái)的請(qǐng)求后,負(fù)載均衡器根據(jù)所 配置的服務(wù)器負(fù)載均衡策略,選取服務(wù)端中的一后臺(tái)服務(wù)器,并在該客戶端網(wǎng)卡上 初始化的線程中建立一條連接規(guī)則;2) 客戶端網(wǎng)卡將客戶端請(qǐng)求和選路信息一起放入與服務(wù)端相連的服務(wù)端網(wǎng)卡 的環(huán)形隊(duì)列中;3) 服務(wù)端網(wǎng)卡將環(huán)形隊(duì)列中的客戶請(qǐng)求和選路信息一起讀出,并在該服務(wù)端 網(wǎng)卡上初始化的線程中記錄一條反向的連接規(guī)則,然后將改寫(xiě)后的客戶請(qǐng)求發(fā)給服 務(wù)端;4) 后臺(tái)服務(wù)器做出響應(yīng),服務(wù)端網(wǎng)卡收到響應(yīng),根據(jù)記錄中的反向連接規(guī)則, 找到對(duì)應(yīng)的客戶端網(wǎng)卡;5) 服務(wù)端網(wǎng)卡通過(guò)客戶端網(wǎng)卡中的環(huán)形隊(duì)列,將服務(wù)端的響應(yīng)發(fā)給客戶端線程;6) 客戶端線程從客戶端網(wǎng)卡的環(huán)形隊(duì)列讀取后臺(tái)服務(wù)器響應(yīng),發(fā)給客戶端。
全文摘要
本發(fā)明涉及一種基于多核平臺(tái)的負(fù)載均衡軟件架構(gòu)及方法,其包括以下內(nèi)容1)采用多核平臺(tái)和負(fù)載均衡設(shè)備作為架構(gòu)元件,并為負(fù)載均衡設(shè)備上的每個(gè)網(wǎng)卡初始化一個(gè)內(nèi)核線程,作為該網(wǎng)卡的軟中斷例程,各自處理所對(duì)應(yīng)網(wǎng)卡的輸入和輸出,同時(shí)將所有內(nèi)核線程獨(dú)立化;2)為每?jī)蓚€(gè)網(wǎng)卡線程之間的信息交換建立一個(gè)獨(dú)立的通道,每個(gè)通道中建立一組雙向環(huán)形隊(duì)列作為多核平臺(tái)和負(fù)載均衡設(shè)備的聯(lián)結(jié)器;環(huán)形隊(duì)列維護(hù)一個(gè)寫(xiě)指針和一個(gè)讀指針,分別由兩個(gè)線程操作,使線程間消息交換無(wú)需加鎖;3)在網(wǎng)卡輸入的軟中斷例程中實(shí)現(xiàn)服務(wù)器負(fù)載均衡的選路策略,并在鏈路層執(zhí)行應(yīng)用層的所有工作。本發(fā)明采用多線程無(wú)鎖的軟件架構(gòu)實(shí)現(xiàn)了服務(wù)器的負(fù)載均衡,實(shí)踐證明,它能夠顯著地提高負(fù)載均衡設(shè)備的性能。
文檔編號(hào)H04L29/08GK101631139SQ20091008474
公開(kāi)日2010年1月20日 申請(qǐng)日期2009年5月19日 優(yōu)先權(quán)日2009年5月19日
發(fā)明者嶺 吉, 吳英明, 張立德, 張?chǎng)┯? 柴卓原 申請(qǐng)人:華耀環(huán)宇科技(北京)有限公司