《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 業(yè)界動態(tài) > 基于主動隊列管理的Linux并發(fā)服務(wù)器模型及負載均衡算法的研究

基于主動隊列管理的Linux并發(fā)服務(wù)器模型及負載均衡算法的研究

2008-05-05
作者:黃偉志1,,湯 莉2,劉 軍3

  摘 要: 提出了一種基于主動隊列管理的并發(fā)服務(wù)器模型,,在主動隊列管理的并發(fā)服務(wù)器模型下,,研究了服務(wù)器對各隊列、各線程運用負載均衡" title="負載均衡">負載均衡的策略和算法,。
  關(guān)鍵詞: 并發(fā)服務(wù)器 負載均衡 主動隊列管理


  互聯(lián)網(wǎng)用戶數(shù)和網(wǎng)絡(luò)流量的幾何級數(shù)增長對網(wǎng)絡(luò)服務(wù)器的可用性提出了更高要求,。當(dāng)網(wǎng)絡(luò)數(shù)據(jù)流不能在各服務(wù)器之間有效分配時,,會出現(xiàn)負載失衡。
  針對該問題,,本文在單服務(wù)器模式下,,通過合理分配線程、協(xié)調(diào)隊列,、采用單服務(wù)器主動管理隊列等方法實現(xiàn)了多線程多任務(wù)下的負載均衡,。
1 基于主動隊列管理的并發(fā)型服務(wù)器模型
1.1 服務(wù)器的分類和簡介

  在實際的網(wǎng)絡(luò)程序中,通常都是許多客戶機對應(yīng)一臺服務(wù)器,。為處理客戶機的請求,對服務(wù)端的程序提出了特殊要求,。目前最常用的服務(wù)器模型分為兩種:(1)循環(huán)服務(wù)器,,在同一個時刻僅響應(yīng)一個客戶端" title="客戶端">客戶端的請求;(2)并發(fā)服務(wù)器,,在同一個時刻可響應(yīng)多個客戶端請求,。
  循環(huán)服務(wù)器包括數(shù)據(jù)報協(xié)議(UDP)服務(wù)器和傳輸控制協(xié)議(TCP)服務(wù)器。實現(xiàn)非常簡單:數(shù)據(jù)報協(xié)議服務(wù)器每次從套接字上讀取一個客戶端的請求進行處理,,然后將結(jié)果返回給客戶機,;傳輸控制協(xié)議服務(wù)器接受一個客戶端的連接請求,然后處理,,完成了該客戶的所有請求后,斷開連接,。
  并發(fā)服務(wù)器的思想是每個客戶機的請求不由服務(wù)器直接處理,,而是服務(wù)器創(chuàng)建一個子進程來處理。這樣可以使服務(wù)器進程在同一時間有多個子進程與不同的客戶程序連接和通信,。在客戶程序看來,,服務(wù)器可以并發(fā)地處理多個客戶的請求。
  一般TCP/IP服務(wù)器通信軟件" title="通信軟件">通信軟件均為并發(fā)型,,即由一個守護進程負責(zé)監(jiān)聽客戶機的連接請求,,并生成一個或多個子進程與客戶機建立連接,以完成通信,。其缺點是隨著連接客戶機數(shù)量的增多,,生成的通信子進程數(shù)量也會隨之增多,在客戶機數(shù)量較多的應(yīng)用場合勢必影響服務(wù)器的運行效率,。一般的循環(huán)服務(wù)是指服務(wù)器在接收客戶機的連接請求后即與之建立連接,,只有處理完與客戶機的通信任務(wù)后,才能再去接收另一客戶機的請求連接,。其優(yōu)點是不必生成通信子進程,。缺點是客戶機在每次通信之前都要與服務(wù)器建立連接,,開銷過大,不能用于隨機的數(shù)據(jù)通信和繁忙的業(yè)務(wù)處理,。
1.2 模型的提出
  本文提出了一種新型的基于主動隊列管理的并發(fā)型服務(wù)器通信軟件的設(shè)計方法,,不同于一般的并發(fā)型服務(wù)器和循環(huán)型服務(wù)器通信軟件,它摒棄了上述兩類服務(wù)器的缺點,,綜合其優(yōu)點,。該軟件的優(yōu)點是:生成子進程數(shù)目少;設(shè)定了子線程的上限值,;繼承了并發(fā)通信的優(yōu)點,,容易對客戶機與服務(wù)器的連接進行管理;適用于客戶機數(shù)量較多和隨機數(shù)據(jù)通信的情況,,能夠有效地提高服務(wù)器的運行效率,。服務(wù)器系統(tǒng)模型圖如圖1所示。


  這種設(shè)計方法的基本思想是:首先設(shè)置服務(wù)器子線程數(shù)的上限值TNMAX,,避免子線程數(shù)過多,,影響效率,。然后將服務(wù)器設(shè)為監(jiān)聽狀態(tài),。當(dāng)?shù)谝慌_客戶機C1向服務(wù)器請求連接時,服務(wù)器的守護進程與之建立初始連接L0,,客戶機利用L0向服務(wù)器發(fā)送IP地址和端口號" title="端口號">端口號,,守護進程將客戶機的IP地址和端口號登記在共享內(nèi)存的記錄中,然后關(guān)閉L0,。由守護進程生成的一個通信子進程Pc1,,從共享內(nèi)存中獲得客戶機IP地址及端口號后,,建立一個與客戶機的連接L1,,準備進行讀寫,,并分配可用的線程數(shù),,同時設(shè)置當(dāng)前與服務(wù)器連接的客戶端數(shù),,設(shè)置分配給它的線程數(shù),。守護進程繼續(xù)監(jiān)聽來自客戶端的連接。當(dāng)另一臺客戶機C2請求連接時,,將客戶機IP地址和端口號同樣登記在共享內(nèi)存中,。守護進程再生成一個通信子進程Pc2,建立與客戶機的連接L2,,然后添加隊列,,分配可用線程數(shù),,同時更新服務(wù)器記錄的客戶端數(shù)和各自對應(yīng)分配的線程數(shù)。這樣逐一連接客戶端,,生成通信子進程,,添加隊列,直至達到子線程數(shù)的上限值,。當(dāng)達到上限值TNMAX時,,若再有客戶機連接,則服務(wù)器回復(fù)消息令其等待,,客戶機輪詢直至被分配到線程,。當(dāng)某個客戶端傳輸完畢時,刪除隊列,,刪除分配的線程數(shù),,終止子進程,并更新服務(wù)器的記錄,。這樣做不僅發(fā)揮了并發(fā)服務(wù)器的優(yōu)點,且避免了子進程過多的缺點,。服務(wù)器通過主動的隊列管理機制實現(xiàn)對多個客戶端的協(xié)調(diào)和處理,,極大地提高了運行效率。
1.3 進程管理的實現(xiàn)
  在本系統(tǒng)中,,服務(wù)器采用基于主動消息隊列管理的并發(fā)服務(wù)器模型,。并發(fā)服務(wù)器的引入是與進程密切相關(guān)的,,且Linux的進程管理也非常符合并發(fā)服務(wù)器的工作原理,。本系統(tǒng)實現(xiàn)Linux服務(wù)器端的通信和進程管理,步驟如下:
  (1)服務(wù)器端打開一個已知的監(jiān)聽端口,;
  (2)在監(jiān)聽端口上監(jiān)聽客戶機的連接請求,當(dāng)有一客戶機請求連接時,,建立連接線路并返回通信文件描述符" title="描述符">描述符,;
  (3)父進程創(chuàng)建一子進程,父進程關(guān)閉通信文件描述符,,并繼續(xù)監(jiān)聽端口上的客戶機連接請求,;
  (4)子進程通過通信文件描述符與客戶機進行通信,通信結(jié)束后終止子進程,,并關(guān)閉通信文件描述符,。
  系統(tǒng)服務(wù)器端管理流程圖如圖2所示。


2 多線程多隊列的負載均衡算法研究
2.1 研究現(xiàn)狀

  多線程之間的負載均衡問題是系統(tǒng)的一個研究重點,。
  一般地,,負載均衡機制主要包括兩大部分:信息策略和定位策略,。
  (1)信息策略可描述網(wǎng)絡(luò)存儲資源的使用狀況。描述負載信息所采用的參數(shù)有:運行隊列中的任務(wù)數(shù)和存儲占用情況等,。
  (2)定位策略:指如何選擇網(wǎng)絡(luò)存儲服務(wù)器來接受客戶端的網(wǎng)絡(luò)存儲任務(wù)請求,。即調(diào)度算法,如輪轉(zhuǎn)調(diào)度,、加權(quán)輪轉(zhuǎn),、最少鏈接和目標地址散列等。
  本系統(tǒng)主要運用信息策略,、主動管理和分配運行的隊列和線程,,從而實現(xiàn)對各線程之間的負載均衡,并達到限制網(wǎng)速和帶寬的目的,。此外,,本系統(tǒng)采用的是單服務(wù)器端,而不是集群服務(wù)器,。所以在算法和設(shè)計上不能遵循傳統(tǒng)的集群服務(wù)器關(guān)于負載均衡的理論和思想,。
2.2 本系統(tǒng)采用的負載均衡算法
  目前負載均衡技術(shù)采用的算法有:輪循均衡、權(quán)重輪循均衡,、隨機均衡、響應(yīng)速度均衡,、最少連接數(shù)均衡和處理能力均衡等[2],。本文提出一種基于隊列管理的負載均衡算法。其算法思想如下,。
  對于來自每個客戶端的請求消息,,根據(jù)隊列的數(shù)量進行響應(yīng):
  (1)當(dāng)客戶端數(shù)為0時,設(shè)新客戶端為A,,則A的線程數(shù)為TNMAX,,A的帶寬為BLMAX
  (2)當(dāng)客戶端數(shù)為1時,,B的線程數(shù)為A的線程數(shù)的一半取下限,,A的線程數(shù)為其本身的線程數(shù)一半取上限;客戶端數(shù)增為2,;
  (3)當(dāng)客戶端數(shù)為2時,,C的線程數(shù)為A,B線程數(shù)的最大值的一半取下限,,修改A的值,;客戶端數(shù)增為3。其他情況類似,;
  (4)當(dāng)客戶端數(shù)為5時,,則回應(yīng)等待,。
  計算公式:TNi=f(CN,TNMAX,,BL)
  其中,,參數(shù)TNi是分配給客戶端的線程數(shù);BL是服務(wù)器端Linux操作系統(tǒng)安裝的帶寬,,這里為100 Mbps,;TNMAX=5,是線程總數(shù)的上限值(根據(jù)環(huán)境影響和實際情況等,,可擴充),;標志位CN用來顯示當(dāng)前連接的客戶端數(shù)目,設(shè)定初值為0,。
  下面列舉實例,,加以說明。
  初值表示為:BL=100Mbps,,TNMAX=5,,CN=0;
  如果有客戶端A來申請連接時,,則返回當(dāng)前可用的線程數(shù),,更新標志位:
  TNA1=5,CN=1,;
  當(dāng)連接和發(fā)送過程中,有另一新客戶端B申請連接時,,則更新標志位:
  TNA2=3,,TNB2=2,CN=2,;
  這里采用的算法是,,由于B從A得到A線程數(shù)的一半并取下限,A取得本身線程數(shù)一半的上限,。計算公式為:
  TNB2=TNA1/2(取下限),,TNA2=TNA1/2(取上限)
  當(dāng)有新客戶端C申請連接時,則更新標志位和客戶端數(shù):
  TNA3=2,,TNB3=2,,TNC3=1,CN=3,;
  計算方法是首先比較A和B的線程數(shù),,取值大的分配給線程C,計算公式為:
  TNC3=MAX(TNA2,,TNB2)/2(取下限),,TNA3=TNA2-TNC3
  以次類推,,當(dāng)有客戶D申請分配線程時,
  TNA4=1,,TNB4=2,,TNC4=1,TND4=1,,CN=4,;
  這里當(dāng)A和B線程數(shù)相等時,客戶D仍是從客戶A分配到一個線程,。
  當(dāng)有新客戶端E申請連接時,,則更新標志位和客戶端數(shù):
  TNA5=1,TNB5=1,,TNC5=1,,TND5=1,TNE5=1,,CN=5,;
  計算方法是首先比較A和B的線程數(shù),取值大的分配給線程E,,計算公式為:
  TE5=MAX(TNA4,TNB4)/2(取下限)
  這是把5個線程分配給若干客戶端的過程,,實現(xiàn)了多個線程的負載平衡,并限制客戶的帶寬,。
  設(shè)計模式:當(dāng)客戶端發(fā)出請求后,,如果服務(wù)器端回應(yīng)“等待(wait)”,,則已經(jīng)沒有可用線程,客戶輪詢等待,;若服務(wù)器端回應(yīng)“發(fā)送(send)”,,客戶開始詢問服務(wù)器端的可用線程數(shù),,服務(wù)器端回應(yīng)可用的線程數(shù),,后臺進行壓縮和多線程處理,開始自動上傳。
  本文提出了一種改進的并發(fā)服務(wù)器模型,,這種服務(wù)器模型能更好地處理進程調(diào)度,實現(xiàn)了隊列之間的負載均衡,,增強了系統(tǒng)的可靠性。
參考文獻
1 岑駕科,,邵秀麗.負載均衡策略及可擴展存儲資源預(yù)約協(xié)議.計算機工程與應(yīng)用,2005,;41(7):157~159
2 彭德巍,何炎祥.基于Agent的負載均衡框架應(yīng)用研究.計算機工程與應(yīng)用,,2005,;41(5):153~155

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點,。轉(zhuǎn)載的所有的文章、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權(quán)者,。如涉及作品內(nèi)容、版權(quán)和其它問題,,請及時通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟損失,。聯(lián)系電話:010-82306118;郵箱:[email protected],。