為什么我們身處不同的城市打開新浪、搜狐的主頁速度幾乎相同?為什么一兩臺服務器的癱瘓并不會影響某家電子商務公司業務的正常運轉?這些問題的答案只有一個——他們都采用了服務器的負載均衡技術,能夠動態調整服務器的資源,跨越地域的限制,抵御因為一兩臺服務器故障所造成的全面或局部業務癱瘓風險。
雖然叫做負載均衡,但這項技術并非傳統意義上的“平攤”,它只是把有可能擁塞于一個地方的負載交給多個地方的服務器共同分擔。
避免網路擁堵需要“交通警”
負載均衡在網絡中的作用就像道路中的“交通警”,將不同往來的車輛進行分流,以免造成某一路段的全面擁堵,而另一條路卻空無一人。
負載均衡從結構上分為本地負載均衡和地域負載均衡(全局負載均衡),前一種是指對本地的服務器集群做負載均衡,后一種是指對分別放置在不同的地理位置、在不同的網絡及服務器群集之間作負載均衡。
例如某些網站服務器來說,程序的拷貝運行在群集內所有的主機上,網絡負載均衡將用戶段請求所產生的負載在這些主機間進行分配。當這些主機位于同一個機房當中時,就成為了本地負載均衡,而當這些服務器通過網絡分散在全國各地時,就可以稱作全局負載均衡。
因為一臺普通服務器的處理能力只能達到每秒幾萬個到幾十萬個請求,如果瞬間的請求達到百萬個甚至更多,必然會導致它的效率極度下降甚至出現宕機。
北京移動最近開展短信開通新99套餐和來電暢聽業務的時候就遇到了這樣的問題,發送完短信后,系統只是回復了一個“系統繁忙”。
![]() |
| 服務器群中負載均衡示意圖 |
負載均衡就是希望能解決這樣的問題,假設每個服務器能響應的請求為每秒10萬個。如果不采用負載均衡,那么該系統就只能達到每秒 10萬個的響應,即使采用三臺服務器,也有可能在不到每秒30萬個響應的時候,就會出現某臺服務器由于訪問量過大而宕機。進而則可能導致數萬個請求不能得到正確的響應。
但如果采用負載均衡,不僅當服務器出現故障時可以自動將指向該服務器上的響應分擔到其他服務器,還可以在數據量不太大時也將任務分配到各個服務器中,避免出現有些服務器數據量很小,而有的已因數據量接近極限導致性能急劇下降的現象。
如果數據量超出了服務器的響應能力,只需增加服務器數目就可以平滑升級。也就是說,負載均衡技術不僅可以維持網絡系統中負載的均衡分配,還能夠維護網絡系統的高可用性運行,因而是保證網絡系統高性能的重要技術。
三種不同技術的比較
最初,負載均衡是通過DNS來實現的。例如在DNS列表中為多個地址配置同一個名字,當客戶機請求DNS服務器時就會得到其中一個地址。這樣就可以讓不同的客戶端隨機地訪問不同的服務器,達到負載均衡的目的。
但是,這種做法只是把任務隨機進行分擔,并不是定義上的均衡。因為這種方法無法獲知服務器的性能差異,同時在分派任務的時候也不能了解服務器的當前狀態。甚至可能會出現忙人更忙的情況。從而使得不同的客戶訪問不同的服務器,達到負載均衡的目的。DNS負載均衡是一種簡單而有效的方法,但是它不能區分服務器的差異,也不能反映服務器的當前運行狀態。
真正智能的負載均衡應該是根據實時響應時間進行判斷,將任務交由負載最輕的服務器來處理,以實現真正的智能通信管理和最佳的服務器群性能。
DNS負載均衡的另一個問題是,一旦某個服務器出現故障,即使及時修改了DNS設置,還是要等待足夠的時間(刷新時間)才能發揮作用。在此期間,保存了故障服務器地址的客戶計算機將不能正常訪問服務器。
代理服務器也是可以實現負載均衡的一種方法,它將請求均勻轉發給多臺服務器,從而達到負載均衡的目的。這種代理方式與普通的代理方式有所不同,標準代理方式是客戶使用代理訪問多個外部服務器,而這種代理方式是代理多個客戶訪問內部服務器,因此也被稱為反向代理模式。
使用反向代理的好處是,可以將負載均衡和代理服務器的高速緩存技術結合在一起,提供有益的性能。然而它本身也存在一些問題,首先就是必須為每一種服務都專門開發一個反向代理服務器,這就不是一個輕松的任務。
特別是針對每一次代理,代理服務器就必須維護兩個連接:一個對外的連接,一個對內的連接,因此對于特別高的連接請求,代理服務器的負載也就非常之大。隨著并發連接數量的增加,代理服務器本身的負載也變得非常大,最后反向代理服務器本身會成為服務的瓶頸。
還有一種方式是支持負載均衡的地址轉換網關,它是將一個外部IP地址映射為多個內部IP地址,對每次TCP連接請求動態使用其中一個內部地址,達到負載均衡的目的。
這一技術被集中在很多品牌的交換機中,它采用的策略包括隨機選擇、根據服務器的連接數量或者響應時間進行選擇的負載均衡策略來分配負載。但是因為這些方法大多基于硬件實現,僅僅能夠處理幾種最標準的應用協議的負載均衡。
“交通警”是如何維持秩序的
網絡負載均衡通過在主機發生故障或脫機的情況下,將網絡通訊量重新指定給其它工作群集主機來提供高度的可用性。與脫機主機現存的連接雖然丟失,但因特網服務仍然處于可用狀態。
網絡負載均衡通過在群集的一個或一個以上虛擬IP地址當中分配引入的網絡通訊量來提供伸縮能力。群集中的主機于是對不同客戶請求做出響應,即使是來自同一客戶的多重請求也如是。例如,Web瀏覽器可能在單一Web網頁內獲得群集內不同主機處的多重映射。這就加速了處理過程并縮短了對客戶的響應時間。
網絡負載均衡使在一個子網上的全部群集主機能夠為群集的主IP地址同時檢測引入的網絡通訊量。在每個群集主機上,網絡負載均衡驅動程序充當了一個介于群集適配器驅動程序和TCP/IP棧之間的過濾器,以這種方式使主機能夠收到一部分引入的網絡通訊量。
網絡負載均衡使用全面分布式的算法來從統計意義上將引入的客戶映射到基于IP地址、端口和其它信息的群集主機上。在檢查收到的數據包時,所有主機均同步執行這種映射以迅速決定哪個主機應處理該數據包。除非群集主機數量發生變化,該映射會保持不變。
網絡負載均衡過濾算法在數據包處理程序方面要比在集中負載均衡程序方面高效得多,而這必須修改并重發數據包。這就使網絡負載均衡能夠提供高得多的聚集帶寬。通過直接在群集主機上運行,



