劉曄 沈瀟軍 劉摩西
(浙江省電力公司信息技術中心,浙江 杭州 310007)
應用的發展始終是推動負載均衡技術不斷進行的原動力。隨著分布式網絡計算在航空、金融、電力等行業的廣泛應用,主流的網絡負載均衡系統不能滿足這些領域在高吞吐量、資源的高利用率和系統高可用性方面的要求。這些客觀現實推動了云計算平臺下負載均衡的研究。近幾年來,基于云模式的負載均衡研究已經成為一種主流的研究方向,該技術具有可用性、擴展性、分布性等特點,將云計算和負載均衡有機結合,不但保留負載均衡的特點,還加入了云計算所帶來的新功能。
負載均衡就是通過一定的機制將系統流量負載分配到不同的網絡服務器上處理,為大量用戶提供并發訪問服務,它是實現多臺網絡服務器協同工作和并行處理的手段,其核心思想是根據當前網絡服務器的負載情況,將到達的大量負載請求分配到不同的服務器上進行處理,以減輕單個服務器的處理負擔,從而提高服務器性能,使資源得到最大利用效率。
常用的負載指標(Index)包括CPU利用率、CPU就緒隊列長度、進程的響應時間、內存使用情況和磁盤訪問頻度以及I/O利用率等,還需要考慮異構節點的處理能力上的差別。通過對這些指標的綜合評價,就可以得到某臺主機的負載大小。通常,有以下三種綜合評價的方法:
(1)優先級法
按負載指標優先級的高低比較,確定節點的負載輕重情況(其中優先級的高低可根據負載情況和具體的應用問題進行動態調整定時/不定時)。
(2)分類算法
根據任務的性質(計算密集型CPU類、I/O類等),確定主負載指標。CPU類:以CPU利用率、CPU隊列長度為權重負載分量;I/O類:以磁盤讀寫速率,磁盤訪問頻率以及磁盤可用空間為權重負載分量;Mem類:以Free Memory和Menory Swap頻度為主要指標。
(3)權重向量法
節點負載使用下面的公式來表示:

其中:L表示本地節點的負載值;a1,a2,…,ai分別是選定的負載分量(負載指標);k1,k2,…,ki分別是權重。通常來說,對于用戶事先指定的主負載指標,權重較大。
負載均衡策略大致包含以下四種:輪詢策略,比率策略,最小連接數策略和最快響應時間策略。
在輪詢策略中,如圖1所示,調度器不考慮目標接點的負載狀態,將外部的請求均勻地分攤到各個服務器上面,如:有2臺服務器實現負載均衡,那么2臺服務器接受處理的請求數量為1∶1。這種算法適用于做負載均衡的幾臺服務器硬件配置相同,它們可以平均分攤所有流量。該方法實現簡單,算法簡單,系統開銷小。但只適用于作業大小差異小,作業執行時間較短的情況。

圖1 輪詢策略負載均衡示意圖
在比率策略中,將外部請求安裝預先設定好的比率分攤到各個負載均衡的服務器上,如:有3臺服務器做負載均衡,設定他們接收處理請求的比率為1∶2∶3,那么每臺服務器處理的請求是不同的。這種算法適用于做負載均衡的幾臺服務器硬件配置不同,按照他們的處理能力,設定比率,從而使得性能高低不同的服務器都能夠平穩運行,不會出現個別服務器負載過重,而另外的服務器負載過少的情況。
在最少連接數策略中,負載均衡的硬件設備會不斷地檢測進行負載均衡的幾臺服務器上的連接數的數量,將新的請求轉發到連接數最少的服務器上面。這種算法適用于應用為長連接的情況。
在最快響應時間策略中,負載均衡的硬件設備會不斷地檢測進行負載均衡的幾臺服務器中,哪臺服務器響應速度最快,從而將請求轉發到響應時間最快的服務器上面。這種算法適用于每臺做負載均衡的服務器都能夠在很短的時間內處理完請求,沒有性能的問題。
在動態加權輪詢調度 (Dynamic Weighted Round-Robin Scheduling,DWRR)策略中,算法綜合考慮了機器服務能力的差別,對所有成員服務器的處理能力進行評估,給出相應的權重。權重大表明該服務器能處理更多作業。根據服務器的權重在所有服務器權重中所占有的比例(即機器處理能力在所有機器中占有的百分比)高低順序,按照輪詢的方式將請求分配到服務器上執行。權重高的機器比權重低的機器處理更多的請求,相同權重的機器處理相同份額的請求。DWRR算法的基本原理可描述為:假設某集群內有一組節點N={N1,N2,…,Nn}。W(Ni)表示節點Ni的權值,指示變量i表示上一次選擇的服務器,T(Ni)表示節點Ni當前所分配的任務量。∑T(Ni)表示當前同步周期需要處理的任務總量。∑W(Ni)表示節點的權值總和。則W(Ni)/∑W(Ni)=T(Ni)/∑T(Ni)表示任務的分配是按照各個節點權重占權重總數的比例來進行分配。
當集群的節點初次投入系統中使用時,系統管理員根據節點的硬件配置情況對每個節點都設定一個初始權重W0(Ni),硬件配置越高初始權重越高。然后隨著節點負載的變化,均衡器對權重進行調整(疊加動態權重)。動態權重是由節點運行時各方面的參數計算出來的。在實驗中選取了最重要幾項指標,包括CPU資源、內存資源、當前進程數、響應時間等信息作為計算公式的因子。結合每個節點當前權重,可以計算出新權重的大小。動態權重目的是要正確反映節點負載的狀況,以預測節點將來可能的負載變化。對于不同類型的系統應用,各個參數的重要程度也有所不同。如果用戶以作業處理為主,則CPU使用率、可用內存和磁盤I/O效率就相對重要一些。為了方便在系統運行過程中針對不同的應用對各個參數的比例進行適當調整,我們為每一個參數設定一個常量系數Ki,用來表示各個負載參數的重要程度。系統任何一個節點Ni的動態權重公式如下所示:

其中LCPU(Ni)表示節點Ni當前某一項指標的負載值,上述公式中依次表示為:CPU使用率、內存使用率、磁盤I/O訪問率、進程總數以及響應時間。例如,在作業處理服務器集群中,我們采用系數序列{0.4,0.4,0.3,0.1,0.1},認為服務器的CPU占用、I/O訪問和內存較其他參數更重要一些。若當前的系數Ki不能很好地反映應用的負載,系統管理員可以對系數不斷地修正,直到找到貼近當前應用的一組系數。對于節點需要分兩種情況:一種是機器組的管理者機器,一種是機器組的管理對象機器,由于機器組的管理者機器承擔著管理整個機器組的重任,擔任均衡器和調度者的角色,因此進行負載均衡時,應該減少管理者機器的權重,從而在調度過程中有利于調度者機器。
另外,關于采集權重的周期置,雖然周期越短越可以確切地反映各個節點的負載,但頻繁地采集會給均衡器和節點帶來負擔,也可能增加不必要的網絡負載。為解決這些問題,一方面要適當調整采集負載信息的周期;另一方面,可以使用移動平均線或者是滑動窗口來避免抖動,使得均衡器收集到的負載信息表現為平滑曲線,這樣在負反饋機制的調整效果上就會比較好。均衡器的動態權重采集程序周期性地運行,若缺省權重不為零,則查詢該節點的各負載參數,并計算出動態權重。引入以下權重計算公式,結合節點初始權重LOAD(Ni)和動態權重來計算最終的權重結果。

在公式中,如果動態權重恰好等于初始權重,最終權重不變,則說明系統的負載狀況剛好達到理想狀況,等于初始權重W0(Ni)。如果動態權重計算結果高于初始權重,最終權重變高,則說明系統負載很輕,均衡器將會增加分配給該節點的任務比率。如果動態權重低于初始權重,最終權重變低,說明系統開始處于重載狀況,均衡器將會減少對該節點分配的任務。在實際使用中,若發現所有節點的權重都小于他們的W0(Ni),則說明當前集群處于超載狀態,這時需要加入新的節點到集群中來處理部分負載;反之,若所有節點的權重大大高于W0(Ni),則說明當前系統的負載都比較輕。
本節模擬了一個云計算的運行環境,其中一個內部結點負載較重,而其它兩個內部結點負載較輕,以驗證提出的基于反饋的動態負載均衡算法的效果。首先,為模擬上述的實驗條件,對選定的重載節點進行單獨加壓的操作,即在一臺云外部的客戶端上使用測試工具,定時向該節點發送請求,以模擬出該節點正在被用戶訪問而使得性能下降的情況,該測試工具還能夠監視發送請求的數量和有效響應的數量。實驗中,作者使用測試工具對重載節點發送總共20萬個http請求,每秒1000個,發出請求后,發現重載節點的可用內存和CPU空閑比已經開始下降,服務器基本忙于響應http請求,文件訪問和網絡訪問也變得緩慢,已經達到模擬一個重載節點的效果。
隨后,啟動了云平臺并且把重載的節點和其它需要被測試的輕載節點一同加入平臺中,并設置相同的初始權值,在負載平衡器上將重載節點作為有效的服務節點添加以便接收平衡器分配的任務。此時集群的其它兩臺服務節點沒有運行任何重載任務,軟件配置完全相同,基本處于空閑狀態。另外,用另一臺云平臺外部的測試節點,向平臺并行發出http請求,模擬集群響應客戶的情況,并觀察平臺平衡器給每個節點分配的任務數量,平衡器每隔10秒記錄一次各個節點響應的情況,實驗中向整個云平臺發出100萬的http請求,每秒發出5000個并行請求,平衡器可以檢測到各個節點的負載狀況。圖2給出實驗結果,圖中節點1和節點2都是預先沒有負載的輕載節點,可以看出二者在任務的分配上基本接近,而重載節點接受任務的權值比例明顯少于另兩個節點,因此在總體分配的任務數量上也少于其它兩個節點。這說明提出的基于反饋的負載均衡算法是有效的,可以有效地按照云平臺中各個節點的負載情況動態地接受任務。

圖2 基于反饋的動態負載均衡算法的實驗結果
本文論述了云計算模型下負載均衡策略的原理,在多種主流的負載均衡策略的基礎之上,提出了基于反饋的負載均衡策略。實踐證明,采用新的負載均衡策略后系統在整體吞吐量方面有所提高,特別是在系統各個節點性能不一、系統提供的網絡服務所訪問的資源多樣化的情況下,基于反饋機制的效果尤其明顯。
[1]“The Network Queuing System”.Brent A.Kingsbury.Sterling Software,1992.
[2]須成忠,張德富,孫鐘秀.“一種分布式動態負載平衡算法”[J].軟件學報,1993,2.
[3]劉海龍,張延園,湯小春.“高性能計算環境下基于遠程I/O負載平衡調度算法”[J].計算機應用研究,2005.9.
[4]W.Richard Stevens.UNIX網絡編程 (第一卷套接字API和X/Open傳輸接口API)[M].清華大學出版社,1999.
[5]W.Richard Stevens.UNIX網絡編程(第二卷進程間通信)[M].清華大學出版社,2002.