張思豪,田建宇,劉銀良,劉衛(wèi)新,劉經(jīng)天
(北方自動控制技術(shù)研究所,山西 太原030006)
網(wǎng)絡(luò)化體系作戰(zhàn)已經(jīng)成為未來戰(zhàn)爭的主要作戰(zhàn)手段,該體系對特定用途的信息系統(tǒng)要求更為嚴(yán)苛,需要在復(fù)雜度與規(guī)模提升的前提下,保證系統(tǒng)維護(hù)升級的簡便性,將作戰(zhàn)力量、單元、作戰(zhàn)要素等條件融合,對可調(diào)度資源實(shí)現(xiàn)有效應(yīng)用。在網(wǎng)絡(luò)體系服務(wù)化推進(jìn)作戰(zhàn)平臺應(yīng)用方面,我國與以美國為代表的傳統(tǒng)軍事與信息強(qiáng)國之間仍存在較大的差距,商用面向服務(wù)架構(gòu)(Service-Oriented Architecture,SOA)在資源受限環(huán)境服務(wù)化軟件管理方面短板明顯,存在帶寬占用大、內(nèi)存空間消耗高、編解碼周期長的問題。
服務(wù)的訪問和調(diào)度是資源受限環(huán)境下服務(wù)軟件管理的核心,針對該條件下軟件管理的需求,需要設(shè)計出靈活、易用、高效的訪問與調(diào)度策略。這就需要服務(wù)器集群方式實(shí)現(xiàn)資源受限環(huán)境下服務(wù)的合理調(diào)度,保障業(yè)務(wù)平臺正常運(yùn)轉(zhuǎn),實(shí)現(xiàn)資源受限條件下的負(fù)載均衡,保證業(yè)務(wù)平臺和軟件服務(wù)的可靠性。
目前,用于作戰(zhàn)的指揮控制信息系統(tǒng)服務(wù)資源愈發(fā)多樣化,核心節(jié)點(diǎn)設(shè)備需要承擔(dān)的數(shù)據(jù)交互任務(wù)呈現(xiàn)出遠(yuǎn)程化、高頻率的特點(diǎn),原先的單一Web服務(wù)器遠(yuǎn)遠(yuǎn)無法滿足需求。本文基于戰(zhàn)術(shù)級資源受限的服務(wù)化模型,在現(xiàn)有Nginx 的默認(rèn)輪詢算法及最小連接數(shù)算法的基礎(chǔ)上提出改進(jìn),以提高資源受限下的高并發(fā)條件中集群的負(fù)載能力。
針對資源受限環(huán)境下的服務(wù)化需要,定義MS={B,S,C,J}的四元數(shù)組描述其模型,其中B表示服務(wù)模型基本信息,S表示服務(wù)質(zhì)量信息,C表示服務(wù)的功能信息,J表示資源受限約束條件。采用多維框架對資源受限服務(wù)建立模型描述[1],實(shí)現(xiàn)對資源受限服務(wù)的輕量化描述。模型描述如圖1 所示。
圖1 資源受限服務(wù)統(tǒng)一描述模型
圖2 資源受限服務(wù)負(fù)載均衡示意圖
負(fù)載均衡策略就是為了解決如何在實(shí)現(xiàn)同樣功能的多個服務(wù)主機(jī)之間實(shí)現(xiàn)資源合理分配,避免出現(xiàn)一臺設(shè)備過忙而其他設(shè)備卻未能充分發(fā)揮其作用的問題。負(fù)載均衡策略主要考慮以下4 個方面問題[1-2]:
(1)為了擴(kuò)展帶寬和增加吞吐量,加強(qiáng)資源處理能力,設(shè)計由分布式的資源受限服務(wù)資源實(shí)例共同組成的資源受限服務(wù)資源集群。
(2)按照負(fù)載均衡算法向服務(wù)注冊管理中心(Service Register Center,SRC)查詢定位資源服務(wù),為用戶綜合選擇出最為合適的服務(wù)資源實(shí)例。
(3)在出現(xiàn)單點(diǎn)失效的情況下,通過SRC 通知及時改變請求該服務(wù)資源的實(shí)例定位,提高系統(tǒng)對突發(fā)情況的處理能力。
(4)動態(tài)采用負(fù)載的動態(tài)均衡算法改變服務(wù)連接,請求端可以適時變換選擇服務(wù)資源實(shí)例。
服務(wù)資源的負(fù)載均衡流程如圖2 所示。
負(fù)載均衡算法分為靜態(tài)負(fù)載均衡算法和動態(tài)負(fù)載均衡算法[3]。靜態(tài)負(fù)載均衡算法是在服務(wù)器工作之前事先給定了的分配方案,實(shí)際服務(wù)器在工作過程中按照該方案進(jìn)行分配訪問負(fù)載,忽略系統(tǒng)在工作過程中產(chǎn)生的各個服務(wù)器的性能狀態(tài)的改變[4]。常見的靜態(tài)負(fù)載均衡算法有:簡單隨機(jī)算法、權(quán)重輪循算法、一致Hash 算法等。但是在實(shí)際服務(wù)器提供服務(wù)的情況下,集群中的服務(wù)器的性能會隨著服務(wù)進(jìn)程不斷發(fā)生變化。而且可提供服務(wù)的節(jié)點(diǎn)數(shù)也會處于動態(tài)的變化之中[5]。
動態(tài)負(fù)載均衡算法根據(jù)集群實(shí)時運(yùn)行情況下的節(jié)點(diǎn)性能變化對分配策略做出調(diào)整,其應(yīng)用范圍比靜態(tài)負(fù)載均衡算法更加廣泛。但是在起步階段動態(tài)負(fù)載均衡算法將會消耗比靜態(tài)算法更多的服務(wù)器資源,增加系統(tǒng)開銷。比較典型的動態(tài)負(fù)載均衡算法包括美國的SINGH H 提出的基于動態(tài)調(diào)整的負(fù)載平衡Web 服務(wù)器系統(tǒng)[6]、印度的KAUR K 等人研究的基于蟻群算法實(shí)現(xiàn)負(fù)載均衡的方法[7]、DING Z X 研究的適用于異構(gòu)網(wǎng)絡(luò)的動態(tài)算法[8]以及吉林大學(xué)的張堯等人研究的根據(jù)權(quán)值變化動態(tài)分配的負(fù)載均衡算法[9]。
以上研究多是基于權(quán)重輪詢算法提出的改進(jìn),在提升服務(wù)器集群的負(fù)載能力上都發(fā)揮了一定的作用。然而目前基于異構(gòu)網(wǎng)絡(luò)搭建的服務(wù)器集群影響因素不再單一,且服務(wù)器性能的不同也導(dǎo)致了動態(tài)負(fù)載能力的變化,所以需要綜合考慮各因素對服務(wù)器負(fù)載能力的影響,依據(jù)實(shí)際運(yùn)行過程真實(shí)的負(fù)載情況以及節(jié)點(diǎn)性能變化,調(diào)整各節(jié)點(diǎn)訪問負(fù)載的順序及比例。
綜上,考慮目前動態(tài)負(fù)載均衡算法的不足之處,為進(jìn)一步改善服務(wù)器負(fù)載能力,本文將基于集群服務(wù)對加權(quán)最小連接負(fù)載均衡算法提出相應(yīng)改進(jìn)。
加權(quán)最小連接數(shù)調(diào)度算法(Weighted Least Connection,WLC)是在最小連接數(shù)算法(Least Connection,LC)基礎(chǔ)上加入權(quán)重比得到的。最小連接數(shù)算法的工作原理是當(dāng)客戶端有新的訪問請求時,通過預(yù)設(shè)算法將該連接分配給當(dāng)前連接數(shù)最小的服務(wù)器,建立訪問連接時節(jié)點(diǎn)訪問量加1,結(jié)束訪問時訪問量減1[10]。而加權(quán)最小連接數(shù)調(diào)度算法不再將連接數(shù)當(dāng)做判定負(fù)載量的唯一依據(jù),而是將節(jié)點(diǎn)連接數(shù)與節(jié)點(diǎn)權(quán)重比綜合考慮,將訪問請求分發(fā)給最小訪問壓力的服務(wù)器,此節(jié)點(diǎn)訪問連接數(shù)加1。權(quán)值的大小將根據(jù)節(jié)點(diǎn)的性能進(jìn)行調(diào)整,即:
其中,pi用來表示各服務(wù)器節(jié)點(diǎn)訪問壓力指標(biāo);Ni表示當(dāng)前節(jié)點(diǎn)現(xiàn)有連接數(shù),m表示集群中所有訪問總數(shù),wi表示各節(jié)點(diǎn)分配的權(quán)重值。因?yàn)樵诋?dāng)前一輪的計算比較過程中,m固定,因此式(1)可以簡化為:
加權(quán)最小連接數(shù)調(diào)度算法的缺點(diǎn):只考慮各節(jié)點(diǎn)連接絕對數(shù)字,但連接數(shù)相同不代表負(fù)載均衡,忽略了連接占用節(jié)點(diǎn)資源大小情況[11];且分配次序混亂,加大了資源消耗;依據(jù)設(shè)備硬件及經(jīng)驗(yàn)進(jìn)行權(quán)值設(shè)定,無法基于實(shí)際情況動態(tài)調(diào)整權(quán)值。
加權(quán)輪詢算法(Weighted Round-Robin,WRR)在輪詢算法(Round-Robin,RR)的基礎(chǔ)上改進(jìn)得到,可以分為普通輪詢算法和平滑輪詢算法[12]。輪詢算法是把客戶端的訪問請求依次輪流分配給集群內(nèi)部各節(jié)點(diǎn),從節(jié)點(diǎn)1 開始,直到節(jié)點(diǎn)N,然后再重新開始循環(huán)。而加權(quán)輪詢算法基于輪詢算法未考慮各節(jié)點(diǎn)處理能力差異、 安裝的業(yè)務(wù)應(yīng)用不同等問題,根據(jù)節(jié)點(diǎn)實(shí)時性能的差異分配不同權(quán)值,然后再進(jìn)行輪詢服務(wù)。
與前面加權(quán)最小連接數(shù)調(diào)度算法相反,加權(quán)輪詢算法沒有考慮集群內(nèi)及各節(jié)點(diǎn)連接數(shù)和響應(yīng)速度等指標(biāo),不能對節(jié)點(diǎn)的動態(tài)負(fù)載變化做出適應(yīng)性的調(diào)整。
集群內(nèi)的各節(jié)點(diǎn)的實(shí)時負(fù)載情況處于動態(tài)變化中,所以在加權(quán)最小連接數(shù)算法的基礎(chǔ)上提出的改進(jìn)算法的基本思想為:改變加權(quán)最小連接算法中節(jié)點(diǎn)權(quán)值固定的缺點(diǎn),基于性能的動態(tài)變化,設(shè)定某個固定時間間隔(10 s~15 s)對節(jié)點(diǎn)的性能指標(biāo)參數(shù)進(jìn)行一次新的采集,作為動態(tài)權(quán)值分配的依據(jù)[13]。具體實(shí)現(xiàn)方式為:在每個節(jié)點(diǎn)實(shí)時負(fù)載確定的情況下,根據(jù)采集到的動態(tài)性能指標(biāo)參數(shù),計算各個節(jié)點(diǎn)的實(shí)時性能極值,各節(jié)點(diǎn)實(shí)時性能極值與實(shí)時負(fù)載的差值代表節(jié)點(diǎn)剩余處理能力,將各節(jié)點(diǎn)的剩余處理性能相比,用來確定當(dāng)前各節(jié)點(diǎn)權(quán)值大小。
為了避免服務(wù)器出現(xiàn)滿負(fù)載的情況,需要先設(shè)定一個負(fù)載比例來確定節(jié)點(diǎn)實(shí)施壓力是否超標(biāo)。當(dāng)負(fù)載比例的值接近或者達(dá)到設(shè)定值時,停止給該節(jié)點(diǎn)分配訪問請求。
將改進(jìn)算法進(jìn)行步驟總結(jié)如下:
(1)定長間隔收集節(jié)點(diǎn)的各個性能指標(biāo)參數(shù);
(2)計算各個節(jié)點(diǎn)的實(shí)時負(fù)載情況L(Si)和負(fù)載極值M(Si);
(3)計算負(fù)載比例V(Si),比較負(fù)載比例與設(shè)定值V,判斷是否為該節(jié)點(diǎn)分配新的訪問請求。其中:
圖3給出了m取值為3~8時在不同誤比特率下完成識別所需的數(shù)據(jù)量.可以看出,在相同數(shù)據(jù)量下,m越小,誤碼適應(yīng)能力越好;在相同誤比特率下,m越小,識別所需數(shù)據(jù)量越小.
(4)計算各節(jié)點(diǎn)剩余處理性能N(Si),并將其作為權(quán)值依據(jù),其中:
(5)將各節(jié)點(diǎn)的剩余處理性能N(Si)相比,得到權(quán)值比例N(S1):N(S2)…N(Sn-1):N(Sn),并依據(jù)權(quán)值比例確定權(quán)值Q(Si)分配訪問請求。
改進(jìn)算法流程如圖3 所示。
圖3 改進(jìn)算法流程
為了得到前面判定權(quán)重比例所需要的各數(shù)據(jù)量,基于最小連接算法的改進(jìn)算法需要選擇必要的參數(shù)用于性能指標(biāo)的計算。查閱相關(guān)資料:CPU 的利用率決定節(jié)點(diǎn)的處理能力的大小,網(wǎng)絡(luò)帶寬使用率決定著數(shù)據(jù)量的傳輸能力,節(jié)點(diǎn)內(nèi)存使用率直接反映當(dāng)前進(jìn)程的內(nèi)存開銷情況[14]。因此將選取上述幾個參數(shù)來計算節(jié)點(diǎn)性能。
完成對上述性能指標(biāo)的收集,需要計算的數(shù)據(jù)包括各節(jié)點(diǎn)負(fù)載極值M(Si)、節(jié)點(diǎn)的實(shí)時負(fù)載情況L(Si)、節(jié)點(diǎn)負(fù)載比例V(Si)、各節(jié)點(diǎn)的權(quán)值Q(Si)。
(1)負(fù)載極值M(Si)
首先用Ac(i)、Aw(i)、Ar(i)、Au(i)分別表示單個周期內(nèi)i節(jié)點(diǎn)的CPU 處理能力、網(wǎng)絡(luò)帶寬、磁盤讀寫速度以及節(jié)點(diǎn)內(nèi)存的使用率。在某節(jié)點(diǎn)中不同參數(shù)對性能影響不同,因此取Ac(i)、Aw(i)、Ar(i)參數(shù)的權(quán)重值分別為R1、R2、R3,得到各節(jié)點(diǎn)的負(fù)載極值M(Si)的計算公式為:
(2)實(shí)時負(fù)載情況L(Si)
(3)節(jié)點(diǎn)負(fù)載比例V(Si)
負(fù)載比例用來決定是否再給該服務(wù)器分配請求,當(dāng)負(fù)載比例達(dá)到設(shè)定值時,說明此節(jié)點(diǎn)負(fù)載已經(jīng)不足以應(yīng)對新的訪問請求,將會停止給該節(jié)點(diǎn)發(fā)送新的連接。負(fù)載比例的計算如式(3)所示。
(4)各節(jié)點(diǎn)的權(quán)值Q(Si)
權(quán)值的分配依賴于集群內(nèi)負(fù)載均衡模塊的負(fù)載均衡器,負(fù)載均衡器的另一個作用是收集前文所提的各節(jié)點(diǎn)當(dāng)前性能參數(shù)。根據(jù)以上所得到的各參數(shù),權(quán)值計算由式(8)表示:
本實(shí)驗(yàn)采用Nginx 負(fù)載均衡策略,由七臺裝有虛擬機(jī)的服務(wù)器集群搭建實(shí)驗(yàn)環(huán)境,其中兩臺用于向集群發(fā)送訪問請求,一臺裝有Nginx 作為反向代理負(fù)載均衡器,其余作為服務(wù)器集群節(jié)點(diǎn)進(jìn)行處理訪問請求。實(shí)驗(yàn)集群環(huán)境如表1 所示,搭建測試環(huán)境如圖4 所示。
表1 實(shí)驗(yàn)集群環(huán)境
圖4 集群測試環(huán)境搭建
Nginx 采用fastcgi 運(yùn)行方式將HTTP 訪問請求轉(zhuǎn)發(fā)到PHP 進(jìn)程形成PHP 的獨(dú)立進(jìn)程與Nginx 進(jìn)行通信[15]。
并發(fā)測試工具選用Httperf+Autobench[16],Httperf軟件工具用于產(chǎn)生不同大小的工作負(fù)載。Autobench是一款基于Httperf 開發(fā)的perf 腳本工具,可以根據(jù)參數(shù)設(shè)置自動進(jìn)行并發(fā)測試,其配置如下:
autobench --single_host --host1 192.168.168.162--port1 80 --uri1 /index.php --quiet--low_rate 0 --high_rate 2000 --rate_step 200 --num_call 10 --num_conn 500 --timeout 5 -file results.tsv
該配置表示從100 個并發(fā)連接開始,每次遞增200 個,最大并發(fā)連接數(shù)為2 000。每個連接中的請求數(shù)為10,響應(yīng)終止時間設(shè)置為5 s,超出5 s 服務(wù)器節(jié)點(diǎn)未響應(yīng)則視為響應(yīng)失敗。結(jié)果將會自動保存為.tsv 格式,并可以用Excel 打開并畫圖。
根據(jù)對節(jié)點(diǎn)性能參數(shù)影響的大小,在計算負(fù)載極值M(Si)和實(shí)時負(fù)載情況L(Si)時分別給予CPU處理能力Ac(i)、網(wǎng)絡(luò)帶寬Aw(i)、磁盤讀寫速度Ar(i)、節(jié)點(diǎn)內(nèi)存的使用率Au(i)初始權(quán)重為(0.4 0.3 0.2 0.1),算法動態(tài)權(quán)值獲取部分代碼如下,其中mi,mj 分別表示連續(xù)兩周期最大負(fù)載連接個數(shù)。
基于以上配置及測試環(huán)境,本實(shí)驗(yàn)采用對比驗(yàn)證的方式,收集Nginx 默認(rèn)輪詢算法、加權(quán)最小連接數(shù)算法及改進(jìn)的動態(tài)加權(quán)最小連接數(shù)算法在不同并發(fā)數(shù)下的響應(yīng)時間及成功連接數(shù)。最后將負(fù)載均衡器中收集到的數(shù)據(jù)進(jìn)行整理,結(jié)果如表2 所示。
表2 三種算法響應(yīng)時間及成功連接數(shù)
分析表2 可知,當(dāng)并發(fā)量小于600 時,對比測試的默認(rèn)輪詢算法、加權(quán)最小連接算法與改進(jìn)算法幾乎沒有差距。該并發(fā)量下三種算法都能很好地滿足負(fù)載均衡需求。當(dāng)測試并發(fā)量超過600 時,三種算法的響應(yīng)時間由原來的同步穩(wěn)定逐漸增大并有了直觀的性能差距:默認(rèn)輪詢算法的響應(yīng)時間及實(shí)際連接數(shù)不如另外兩種算法,加權(quán)最小連接算法次之,改進(jìn)算法最優(yōu)。而且在測試并發(fā)量超過1 000時,改進(jìn)算法的響應(yīng)時間及實(shí)際連接數(shù)的優(yōu)勢變得十分明顯。
經(jīng)過200~2 000 并發(fā)量測試,基于以上數(shù)據(jù)分析,定義0~600 為低并發(fā)量,600 ~1 000 為中并發(fā)量,1 000 以上為高并發(fā)量。分析表2 數(shù)據(jù)可以得到以下結(jié)論:基于加權(quán)最小連接算法改進(jìn)的動態(tài)加權(quán)算法,在低并發(fā)量下其平均響應(yīng)時間較默認(rèn)輪詢算法延遲了2.53%,較加權(quán)最小連接算法延遲了4.72%,這是由于動態(tài)加權(quán)最小連接數(shù)算法占用節(jié)點(diǎn)性能較前兩者有增加,其響應(yīng)時間稍微延長。優(yōu)化效果最為明顯的高并發(fā)區(qū)間其平均響應(yīng)時間較默認(rèn)輪詢算法提高了18.44%,較加權(quán)最小連接算法提高了12.45%。整個測試條件下改進(jìn)算法平均響應(yīng)時間較默認(rèn)輪詢算法提高了17.17%,較加權(quán)最小連接算法提高了11.29%。
本文針對戰(zhàn)術(shù)級作戰(zhàn)信息系統(tǒng)在資源受限環(huán)境下實(shí)現(xiàn)服務(wù)化的需要,結(jié)合資源受限環(huán)境特點(diǎn),建立了戰(zhàn)術(shù)級指揮控制系統(tǒng)服務(wù)化軟件的服務(wù)模型,在分析了常見負(fù)載均衡算法的基礎(chǔ)上,提出了基于加權(quán)最小連接算法的改進(jìn)算法。經(jīng)過實(shí)驗(yàn)數(shù)據(jù)分析,該改進(jìn)算法可以在資源受限的高并發(fā)條件下有效地提高集群的負(fù)載能力。由于研究時間及水平所限,該算法仍有許多不足之處,比如時間周期T僅簡單地依據(jù)文獻(xiàn)及經(jīng)驗(yàn)來進(jìn)行設(shè)置,未考慮到其最優(yōu)解。在未來的研究中,可以考慮加入神經(jīng)算法的分析來進(jìn)一步改進(jìn)算法性能。