《電子技術(shù)應用》
您所在的位置:首頁 > 通信與網(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ù)器的可用性提出了更高要求,。當網(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ò)程序中,,通常都是許多客戶機對應一臺服務(wù)器,。為處理客戶機的請求,對服務(wù)端的程序提出了特殊要求,。目前最常用的服務(wù)器模型分為兩種:(1)循環(huán)服務(wù)器,,在同一個時刻僅響應一個客戶端" title="客戶端">客戶端的請求;(2)并發(fā)服務(wù)器,,在同一個時刻可響應多個客戶端請求,。
  循環(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ā)型,即由一個守護進程負責監(jiān)聽客戶機的連接請求,,并生成一個或多個子進程與客戶機建立連接,,以完成通信。其缺點是隨著連接客戶機數(shù)量的增多,,生成的通信子進程數(shù)量也會隨之增多,,在客戶機數(shù)量較多的應用場合勢必影響服務(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)。當?shù)谝慌_客戶機C1向服務(wù)器請求連接時,,服務(wù)器的守護進程與之建立初始連接L0,,客戶機利用L0向服務(wù)器發(fā)送IP地址和端口號" title="端口號">端口號,守護進程將客戶機的IP地址和端口號登記在共享內(nèi)存的記錄中,,然后關(guān)閉L0,。由守護進程生成的一個通信子進程Pc1,從共享內(nèi)存中獲得客戶機IP地址及端口號后,,建立一個與客戶機的連接L1,,準備進行讀寫,并分配可用的線程數(shù),,同時設(shè)置當前與服務(wù)器連接的客戶端數(shù),,設(shè)置分配給它的線程數(shù)。守護進程繼續(xù)監(jiān)聽來自客戶端的連接,。當另一臺客戶機C2請求連接時,,將客戶機IP地址和端口號同樣登記在共享內(nèi)存中。守護進程再生成一個通信子進程Pc2,,建立與客戶機的連接L2,,然后添加隊列,分配可用線程數(shù),,同時更新服務(wù)器記錄的客戶端數(shù)和各自對應分配的線程數(shù),。這樣逐一連接客戶端,生成通信子進程,,添加隊列,,直至達到子線程數(shù)的上限值。當達到上限值TNMAX時,,若再有客戶機連接,,則服務(wù)器回復消息令其等待,客戶機輪詢直至被分配到線程,。當某個客戶端傳輸完畢時,,刪除隊列,刪除分配的線程數(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)聽客戶機的連接請求,,當有一客戶機請求連接時,建立連接線路并返回通信文件描述符" 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)重輪循均衡、隨機均衡,、響應速度均衡,、最少連接數(shù)均衡和處理能力均衡等[2]。本文提出一種基于隊列管理的負載均衡算法,。其算法思想如下,。
  對于來自每個客戶端的請求消息,根據(jù)隊列的數(shù)量進行響應:
  (1)當客戶端數(shù)為0時,,設(shè)新客戶端為A,,則A的線程數(shù)為TNMAX,A的帶寬為BLMAX,;
  (2)當客戶端數(shù)為1時,,B的線程數(shù)為A的線程數(shù)的一半取下限,A的線程數(shù)為其本身的線程數(shù)一半取上限,;客戶端數(shù)增為2,;
  (3)當客戶端數(shù)為2時,C的線程數(shù)為A,,B線程數(shù)的最大值的一半取下限,,修改A的值;客戶端數(shù)增為3,。其他情況類似,;
  (4)當客戶端數(shù)為5時,則回應等待,。
  計算公式:TNi=f(CN,,TNMAX,BL)
  其中,參數(shù)TNi是分配給客戶端的線程數(shù),;BL是服務(wù)器端Linux操作系統(tǒng)安裝的帶寬,,這里為100 Mbps;TNMAX=5,,是線程總數(shù)的上限值(根據(jù)環(huán)境影響和實際情況等,,可擴充),;標志位CN用來顯示當前連接的客戶端數(shù)目,,設(shè)定初值為0。
  下面列舉實例,,加以說明,。
  初值表示為:BL=100Mbps,TNMAX=5,,CN=0,;
  如果有客戶端A來申請連接時,則返回當前可用的線程數(shù),,更新標志位:
  TNA1=5,,CN=1;
  當連接和發(fā)送過程中,,有另一新客戶端B申請連接時,,則更新標志位:
  TNA2=3,TNB2=2,,CN=2,;
  這里采用的算法是,由于B從A得到A線程數(shù)的一半并取下限,,A取得本身線程數(shù)一半的上限,。計算公式為:
  TNB2=TNA1/2(取下限),TNA2=TNA1/2(取上限)
  當有新客戶端C申請連接時,,則更新標志位和客戶端數(shù):
  TNA3=2,,TNB3=2,TNC3=1,,CN=3,;
  計算方法是首先比較A和B的線程數(shù),取值大的分配給線程C,,計算公式為:
  TNC3=MAX(TNA2,,TNB2)/2(取下限),TNA3=TNA2-TNC3
  以次類推,,當有客戶D申請分配線程時,,
  TNA4=1,TNB4=2,TNC4=1,,TND4=1,,CN=4;
  這里當A和B線程數(shù)相等時,,客戶D仍是從客戶A分配到一個線程,。
  當有新客戶端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è)計模式:當客戶端發(fā)出請求后,,如果服務(wù)器端回應“等待(wait)”,,則已經(jīng)沒有可用線程,客戶輪詢等待,;若服務(wù)器端回應“發(fā)送(send)”,,客戶開始詢問服務(wù)器端的可用線程數(shù),服務(wù)器端回應可用的線程數(shù),,后臺進行壓縮和多線程處理,,開始自動上傳。
  本文提出了一種改進的并發(fā)服務(wù)器模型,,這種服務(wù)器模型能更好地處理進程調(diào)度,,實現(xiàn)了隊列之間的負載均衡,增強了系統(tǒng)的可靠性,。
參考文獻
1 岑駕科,,邵秀麗.負載均衡策略及可擴展存儲資源預約協(xié)議.計算機工程與應用,2005,;41(7):157~159
2 彭德巍,,何炎祥.基于Agent的負載均衡框架應用研究.計算機工程與應用,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)和其它問題,請及時通過電子郵件或電話通知我們,,以便迅速采取適當措施,,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。