李國+申亞坤+李永華++曲文麗



摘 要: 針對航空物流ILink數據平臺交易復雜性高、服務種類多、業務規模大等特點,提出一種面向多類型服務的動態負載均衡算法。通過分析四種基本服務類型以及實時采集四種服務類型的資源消耗,根據用戶服務請求類型的不同動態調整各服務器的負載,引入了過載服務器節點緩沖機制緩沖負載過重節點,有效解決了航空物流ILink數據平臺可能出現的用戶等待時間過長、局部負載過重、甚至個別服務器節點崩潰的問題,達到了集群的負載均衡。仿真實驗結果表明,提出的算法在系統吞吐量、系統響應時間、負載率等關鍵指標上優于經典的比率算法和遺傳算法。
關鍵詞: ILink平臺; 動態負載均衡算法; 多類型服務; 緩沖機制
中圖分類號: TN911?34; TP302 文獻標識碼: A 文章編號: 1004?373X(2017)12?0128?04
Abstract: A dynamic load balancing algorithm for multi?type services is proposed to suit aviation logistics ILink data platform to complex transaction, multi?type service and large?scale business. The four fundamental service types were analyzed and resource consumption of the four service types was acquired in real time. The algorithm can update the load balance weight of every service according to the types of users′ service requests. A node buffer mechanism for overload servers was imported to solve the problems of long time waiting of users, over?heavy local load and even the breakdown of individual server node possibly appearing on the aviation logistics ILink data platform, so as to achieve the load balancing. The simulation results show that the algorithm is superior to the classic ratio algorithm and genetic algorithm in system throughout, responding time and load efficiency.
Keywords: ILink platform; dynamic load balancing algorithm; multi?type service; buffering mechanism
航空物流是一種高效的現代化運輸方式,我國航空物流運輸周轉量逐年增加,已經成為現代最重要的運輸方式之一。如何高效地處理海量航空物流數據訪問請求是當前亟待解決的問題。目前采用軟件負載均衡是解決該問題的方案之一,但是由于服務器性能不同,必須依賴有效的負載均衡算法,將大量的并發訪問合理轉發到多個節點分別進行處理,各服務器比較均衡地承擔任務,進而提高集群系統的處理能力和服務質量,縮短用戶響應時間,實現高效的負載均衡[1?3]。
1 問題描述
航空物流數據交換平臺負載均衡問題是航空物流信息平臺的關鍵問題。為了讓服務器集群中多臺服務器最大化地分攤用戶的并發請求,避免甚至消除集群中的負載過重、負載震蕩等問題,國內外學者相繼提出了多種負載均衡算法,主要分為兩類:靜態負載均衡算法和動態負載均衡算法。常見的負載均衡算法如表1所示。
航空物流數據交換平臺調度模型如圖1所示。在ILink client向數據交換平臺發送請求以后,請求經過互聯網首先到達服務器集群的虛擬服務器。虛擬服務器對外提供透明的服務訪問,它屏蔽了內層物理服務器的具體細節。在虛擬服務器中,由于用戶服務請求類型的不同,資源消耗情況差異較大,所以虛擬服務器會把用戶請求依據服務類型分別加入到相應的服務請求隊列,隨后用戶請求被緩存到31個等待就緒隊列中。負載控制模塊是負載均衡機制的核心,該模塊包括負載采集、負載計算和請求分發。負載采集模塊負責采集,包括節點各種類型的服務CPU占用率、內存占用率、磁盤空閑比等;負載計算模塊是根據算法模型,對采集到的服務器狀態信息確定各服務類型的負載系數,進而確定服務器接收用戶請求的概率。負載分發模塊功能則是根據節點接收用戶請求的概率對用戶請求進行分發。
在ILink數據平臺上,提供的主要有四種網絡服務,即CoreService,ConfigService,SitaService,SendMsgService,如表2所示。
這四種服務的功能各不相同資源消耗差異較大,ConfigService主要是根據數據庫中的信息配置用戶的請求報文,該操作涉及大量的用戶數據保存,需要占用大量的磁盤空間;CoreService是把用戶報文信息寫入到xml文件或者從xml文件把信息封裝到用戶的報文中,顯然該服務類型需要進行頻繁的I/O操作;SitaService是為了實現平臺的國際化,將用戶的報文轉化成國際通用Sita報文格式,轉換過程涉及大量的格式轉換,CPU內存消耗較大;SendMsgService則是系統中使用最多的一種網絡服務,完成用戶數據報文發送和轉發的功能,主要消耗計算機的帶寬資源。
該問題的調度模型如下:
2 算法設計
2.1 ILink平臺
ILink航空貨運數據交換平臺是航空電子貨單信息平臺的基礎平臺,通過建立安全、高效、穩定的數據傳輸通道,實現航空物流參與者之間的數據交換。ILink平臺是由多臺服務器構成的分布式系統,具有高度的系統安全性、可靠的傳輸穩定性、支持業務報文轉換,支持用戶單點接入和多點接入,支持高并發的業務模型,允許進行負載均衡擴展。
2.2 算法設計
服務器集群接收到用戶請求以后,綜合考慮各臺服務器性能的差異性以及各種類型的服務差異性,根據服務器的不同服務類型消耗資源的不同計算各臺服務器分配請求的概率。根據概率對收到的用戶請求進行分配,由于用戶請求的隨機性,在服務器接收服務的過程中,可能導致某些服務器節點始終處于高負荷狀態,此時,引入過載緩沖機制,把負載過重節點加入到過載隊列中,避免了部分節點負載過重,有利于服務器集群的負載均衡。算法流程如圖2所示。
面向多服務類型的動態負載均衡算法流程如下:
(1) 初始化隊列。算法開始,需要對用戶請求就緒隊列和服務器過載隊列進行初始化。在用戶請求就緒隊列中存放用戶各種服務類型的用戶請求,服務器過載隊列則存放后臺過載的服務器節點。
(2) 更新各服務類型負載系數。四種不同的服務類型對服務器的負載是不同的,算法根據收集到的動態確定各個服務類型的負載系數,越大,說明當前j類型的服務對服務器的負擔越重。
(3) 計算服務器節點的負載。通過收集到的后臺各服務器的狀態信息,綜合考慮服務器操作系統和其他軟件開銷,依據式(4)計算服務器當前的負載狀況。
(4) 檢查節點是否過載。對于服務器集群中的節點,在運行過程中,可能有的節點處于高負荷狀態,在算法中,設定服務器負載閾值為0.9,當某個節點的負載超過該閾值以后,就認定該節點處于高負載狀態,將該節點加入過載隊列。
(5) 更新過載隊列。過載隊列保存了處于高負載狀態的服務器節點,過載隊列不接收用戶請求,一段時間以后,如果過載隊列中的節點負載低于設定的最低閾值0.75,則把該節點移出過載隊列,重新接收用戶的請求,繼續分擔集群的任務。
(6) 更新分配概率。后臺服務器依據節點的負載狀況進行用戶請求的分配,具體來說就是根據各個服務器節點的給每個節點分配一個相對應的比率,負載均衡模塊把該比率作為一段時間內收到的用戶請求調度的依據。
3 實驗設計
3.1 實驗環境
為了驗證該動態負載均衡算法的性能,搭建了一套模擬的ILink環境。該環境模擬真實的生產環境,由兩臺Dell服務器組成,每臺服務器上虛擬出四臺虛擬機,各個虛擬機的配置如下:操作系統為Windows Server 2008 R2 Enterprise,處理器為IntelXeon CPU E5?2665@2.40 GHz,安裝內存為4 GB,2 GB,1 GB,512 MB,系統類型為64位操作系統,運行環境為MyEclipse,jdk1.7.0_07。
3.2 實驗過程
在對算法進行仿真實驗的過程中,需要分別編寫客戶端程序和服務端的響應程序。首先在服務器端,配置ILink數據交換平臺中的四種常見服務即SendMsgService服務、CoreService服務、ConfigService服務和SitaService服務,具體配置過程為編寫相應服務的后臺程序,并對服務的配置文件進行修改。例如,對于CoreService服務,該服務的主要資源消耗為I/O消耗,所以實驗中對CoreService的編寫主要是訪問后臺數據庫,對其進行讀寫操作以消耗計算機的I/O資源。
對四種服務配置完成后,需要模擬生產環境中真實的客戶請求,編寫Java的Servlet程序,通過Tomcat服務器接收用戶的請求,并在收到請求以后解析請求,然后調用服務端的后臺服務進行相應操作。在客戶端,同樣需要借助程序在短時間內分場景產生各種服務類型的用戶請求,同時記錄各個請求的響應時間以及一段時間內該算法的吞吐量。
3.3 實驗場景
在航空物流數據交換平臺上,服務類型的不同,對集群的負載也是不同的。本實驗設計了四個實驗場景,第一個場景的目的是測試仿真程序的可靠性,保證用戶能夠獲取到各種類型的服務。第二個場景是為了通過多次實驗獲取一組較優的,因為的取值直接影響算法的性能好壞。第三個場景是測試算法在吞吐量這一指標上的優劣。第四個場景是測試算法在負載率指標上的好壞。圖3描述了在100組不同的負載系數情況下算法響應時間這一指標的優劣。用戶請求的分配過程依賴于的設置,設置的好壞直接影響算法的性能。最終本文選定的一組較優的為[0.15,0.45,0.27,0.13]。從圖3可以看到在并發量30以前三種算法的響應時間差別不大,在30以后,響應時間急劇上升,而且本文算法是始終優于其他兩種算法的。這是因為在系統并發訪問量較小的情況下,各類服務請求相對來說都很少,這時比率算法和本文算法區別不大,遺傳算法搜索能力較強,容易最快找到一組最優解。當訪問量逐漸增大以后,各類服務請求區別較大,而比率算法和遺傳算法是忽視這種服務類型差別的,導致服務器對于所有的請求全部接收,一定程度上影響了算法的響應時間,且遺傳算法在并發量較大的時候容易陷入“早熟”,這也是遺傳算法在并發量較大時比本文算法性能差的一個原因。
圖4是在實驗場景二確定的基礎上四種服務類型混雜訪問的情況下系統吞吐量指標的實驗結果圖。該實驗接近真實的用戶訪問場景,從吞吐量的角度驗證了算法的優劣。在圖4中,三種算法在請求訪問量不飽和的情況下,系統吞吐量差別不大,所有用戶的所有服務類型的請求都能得到及時響應。但是隨著系統并發量的增加,三種算法差距逐漸加大,這是因為隨著并發量的增多,用戶對各種服務類型的請求也趨于隨機化且數量較大,本文算法能夠依據服務類型的不同計算節點的負載,并把負載超過閾值的節點加入過載隊列,暫停其提供服務,避免了服務器節點負載過大從而用戶請求失敗的概率,增加了系統吞吐量。
圖5通過負載均衡率L這一綜合指標,衡量了三種算法在服務器集群上運行的效率。在訪問量不飽和的情況下,三種算法差別細微,請求量為30~50時三種算法在負載率指標上差距加大。在系統請求量超過50以后,三種算法系統負載率趨于最大值,對于比率算法和遺傳算法,負載率在0.9以上,而本文算法在0.8左右,總體性能較好,后臺各個服務器能夠比較均衡地承擔用戶請求,這是因為算法設定的閾值為0.8,超過閾值負載的節點將加入到過載隊列中,等待一段時間以后繼續為用戶提供服務,當然,閾值是能夠根據需要進行設定的。
4 結 語
本文提出了一種面向多類型服務的動態負載均衡算法,該算法能夠根據服務器中各個服務類型資源消耗的不同,計算服務器節點的負載,依據負載狀況確定的概率來分配用戶請求,算法能夠在訪問量較大的情況下緩沖過載的節點,一定程度上提高了系統的吞吐量和降低了集群負載率。但是本文中各服務類型對服務器的負載系數是固定的,是根據大量隨機實驗選取的,研究負載系數根據不同的業務環境進行自適應變化將是下一步的工作重點。
參考文獻
[1] 王榮生,楊際祥,王凡.負載均衡策略研究綜述[J].小型微型計算機系統,2010,31(8):1681?1686.
[2] 李新,黎文偉.一種改進的動態告警負載均衡算法[J].小型微型計算機系統,2013,34(7):1585?1589.
[3] 鄭貴德,陳明.以云計算為后臺的負載均衡技術[J].現代電子技術,2012,35(9):77?80.
[4] SEMCHEDINE Fouzi, BOUALLOUCHE?MEDJKOUNE Louiza, AISSANI Djamil. Task assignment policies in distributed server systems: A suivey [J]. Journal of network and computer applications, 2011, 34(4): 1123?1130.
[5] CHOI S Y, LEE S, LEE T, et al. Double?phase polling algorithm based on partitioned ONU subgroups for high utilization in EPONs [J]. Journal of optical communications and networking, 2009, 1(5): 484?497.
[6] MIRZA Hamid Turab, CHEN Ling, CHEN Gencai. Practicability of dataspace system [J]. JDCTA, 2010, 3(4): 233?243.
[7] 王鵬,黃焱,李坤,等.云計算集群相空間負載均衡度優先調度算法研究[J].計算機研究與發展,2014,51(5):1095?1107.
[8] 王強,李雄飛,王婧.云計算中的數據放置與任務調度算法[J].計算機研究與發展,2014,51(11):2416?2426.
[9] 周瑩蓮,劉甫.服務器負載均衡技術研究[J].計算機與數字工程,2010,38(4):11?14.