負載均衡原理和策略簡析
浩瀚的信息海洋,負載在網絡之上。如何進行數據的處理和分配,這個問題給網絡帶來了不小的困難。那么,讓我們運用負載均衡技術,實施負載均衡策略來減輕網絡處理的壓力,將信息合理分配到各個服務器進行處理跟整合。
最早的負載均衡技術是通過DNS來實現的,在DNS中為多個地址配置同一個名字,因而查詢這個名字的客戶機將得到其中一個地址,從而使得不同的客戶訪問不同的服務器,達到負載均衡的目的。DNS負載均衡是一種簡單而有效的方法,但是它不能區(qū)分服務器的差異,也不能反映服務器的當前運行狀態(tài)。
反向代理服務器可以將請求轉發(fā)給內部Web服務器,如果代理服務器能夠將請求均勻轉發(fā)給多臺內部服務器,就能達到負載均衡的目的。反向代理方式下能應用優(yōu)化的負載均衡策略,每次訪問最空閑的內部服務器來提供服務。但是隨著并發(fā)連接數量的增加,代理服務器本身的負載也變得非常大,***反向代理服務器本身會成為服務的瓶頸。
支持負載均衡的地址轉換網關中可以將一個外部IP地址映射為多個內部IP地址,對每次TCP連接請求動態(tài)使用其中一個內部地址,達到負載均衡的目的。很多硬件廠商將這種技術集成在他們的交換機中,作為他們第四層交換的一種功能來實現,一般采用隨機選擇、根據服務器的連接數量或者響應時間進行選擇的負載均衡策略來分配負載。然而硬件實現的負載控制器靈活性不強,不能支持更優(yōu)化的負載均衡策略和更復雜的應用協(xié)議。
除了這三種負載均衡方式之外,有的協(xié)議內部支持與負載均衡相關的功能,例如HTTP協(xié)議中的重定向能力等,但它依賴于特定協(xié)議,因此使用范圍有限。根據現有的這些負載均衡技術,我們選擇了使用軟件方式實現網絡地址轉換的負載均衡的方式,以彌補硬件負載均衡器的不靈活,并應用優(yōu)化的均衡策略來實現后端服務器負載分擔的***狀態(tài)。
負載均衡策略
為了將負載均勻的分配給內部的多個服務器上,就需要應用一定的負載均衡策略。傳統(tǒng)的負載均衡策略并沒有考慮到服務請求的不同類型、后臺服務器的不同能力以及隨機選擇造成的負載分配不均勻等問題。為了使得負載分配十分均勻,就要應用能夠正確反映各個服務器CPU及I/O狀態(tài)的負載均衡策略。
客戶發(fā)起的服務請求類型是多種多樣的,按照對處理器、網絡和I/O的資源要求,可以簡單的將它們分為兩個不同類別,以便應用不同的處理策略:
靜態(tài)文檔請求:例如普通的文本、圖象等靜態(tài)多媒體數據,它們對處理器負載影響不大,造成的磁盤I/O負載與文檔的大小成正比,主要對網絡I/O造成壓力。
動態(tài)文檔請求:更為常見的請求常常需要服務器預先進行處理,例如搜尋數據庫、壓縮解壓縮多媒體文件等,這些請求需要相當大的處理器和磁盤I/O資源。
對于靜態(tài)文檔,每個服務進程占用大致相同的系統(tǒng)資源,因此就可以使用進程數來表示系統(tǒng)負載。而動態(tài)文檔服務需要進行額外的處理,其占用的系統(tǒng)資源就超過處理靜態(tài)請求,因此需要使用一個權重來表示。這樣一個最簡單的服務器負載表示公式就為:
其中L為服務器的負載,Ns為靜態(tài)文檔服務進程數,Nd為動態(tài)文檔服務進程數,而a為每個動態(tài)文檔服務相對于靜態(tài)文檔服務的權重,可以在10到100之間進行選擇。
在這個公式中沒有考慮服務器硬件的限制,當達到硬件限制的時候,由于資源緊張,服務器的負載就會明顯增加。例如由于服務器內存大小的限制,一些進程就要被交換到硬盤上,使得系統(tǒng)負載迅速增加。考慮了系統(tǒng)硬件限制,則服務器的負載可以表示為:
新增加的參數 Ll表示這個服務器普通負荷的限度,它要根據每個服務器本身的硬件能力來設置。而b表示超出正常負載時用來限制分配給服務器任務的權重,應該設置為大于Ll的數值,以表示硬件限制作用。通常在一個服務器集群中,硬件設置越差的服務器這個權重越要設置的大,以避免在所有的服務器都超負載運行時,硬件最差的服務器反而負載***。因此b是和本服務器硬件限制Ll成反比的,則b可以設置為:
Llmax為服務器集群中***硬件配置的服務器的Ll值。當確定了每個服務器的負載之后,中心控制負載分配的服務器就能將負載正確的分發(fā)給最空閑的服務器,從而不會象其他的負載分配策略那樣會導致負載分配不均勻的情況。