前言
當前,無論在企業網、園區網還是在廣域網如Internet上,業務量的發展都超出了過去最樂觀的估計,上網熱潮風起雲湧,新的應 用層出不窮,即使按照當時最優配置建設的網絡,也很快會感到吃不消。尤其是各個網絡的核心部分,其數據流量和計算強度之大, 使得單一設備根本無法承擔,而如何在完成同樣功能的多個網絡設備之間實現合理的業務量分配,使之不致於出現一台設備過忙、而 別的設備卻未充分發揮處理能力的情況,就成了一個問題,負載均衡機制也因此應運而生。
負載均衡建立在現有網絡結構之上,它提供了一種廉價有效的方法擴展服務器帶寬和增加吞吐量,加強網絡數據處理能力,提高 網絡的靈活性和可用性。它主要完成以下任務:解決網絡擁塞問題,服務就近提供,實現地理位置無關性 ;為用戶提供更好的訪問質 量;提高服務器響應速度;提高服務器及其他資源的利用效率;避免了網絡關鍵部位出現單點失效。
定義
其實,負載均衡並非傳統意義上的“均衡”,一般來說,它只是把有可能擁塞於一個地方的負載交給多個地方分擔。如果將其改 稱為“負載分擔”,也許更好懂一些。說得通俗一點,負載均衡在網絡中的作用就像輪流值日制度,把任務分給大家來完成,以免讓 一個人累死累活。不過,這種意義上的均衡一般是靜態的,也就是事先確定的“輪值”策略 。
與輪流值日制度不同的是,動態負載均衡通過一些工具實時地分析數據包,掌握網絡中的數據流量狀況,把任務合理分配出去。 結構上分為本地負載均衡和地域負載均衡(全局負載均衡),前一種是指對本地的服務器集群做負載均衡,後一種是指對分別放置在不 同的地理位置、在不同的網絡及服務器群集之間作負載均衡。
服務器群集中每個服務結點運行一個所需服務器程序的獨立拷貝,諸如Web、FTP、Telnet或e-mail服務器程序。對於某些服務(如 運行在Web服務器上的那些服務)而言,程序的一個拷貝運行在群集內所有的主機上,而網絡負載均衡則將工作負載在這些主機間進 行分配。對於其他服務(例如e-mail),只有一台主機處理工作負載,針對這些服務,網絡負載均衡允許網絡通訊量流到一個主機 上,並在該主機發生故障時將通訊量移至其他主機。
負載均衡技術實現結構
在現有網絡結構之上,負載均衡提供了一種廉價有效的方法擴展服務器帶寬和增加吞吐量,加強網絡數據處理能力,提高網絡的 靈活性和可用性。它主要完成以下任務:
◆解決網絡擁塞問題,服務就近提供,實現地理位置無關性
◆為用戶提供更好的訪問質量
◆提高服務器響應速度
◆提高服務器及其他資源的利用效率
◆避免了網絡關鍵部位出現單點失效
廣義上的負載均衡既可以設置專門的網關、負載均衡器,也可以通過一些專用軟件與協議來實現。對一個網絡的負載均衡應用, 從網絡的不同層次入手,根據網絡瓶頸所在進行具體分析。從客戶端應用為起點縱向分析,參考OSI的分層模型,我們把負載均衡技 術的實現分為客戶端負載均衡技術、應用服務器技術、高層協議交換、網絡接入協議交換等幾種方式。
負載均衡的層次
◆基於客戶端的負載均衡
這種模式指的是在網絡的客戶端運行特定的程序,該程序通過定期或不定期的收集服務器群的運行參數:CPU占用情況、磁盤 IO、內存等動態信息,再根據某種選擇策略,找到可以提供服務的最佳服務器,將本地的應用請求發向它。如果負載信息采集程序發 現服務器失效,則找到其他可替代的服務器作為服務選擇。整個過程對於應用程序來說是完全透明的,所有的工作都在運行時處理。 因此這也是一種動態的負載均衡技術。
但這種技術存在通用性的問題。因為每一個客戶端都要安裝這個特殊的采集程序;並且,為了保證應用層的透明運行,需要針對 每一個應用程序加以修改,通過動態鏈接庫或者嵌入的方法,將客戶端的訪問請求能夠先經過采集程序再發往服務器,以重定向的過 程進行。對於每一個應用幾乎要對代碼進行重新開發,工作量比較大。
所以,這種技術僅在特殊的應用場合才使用到,比如在執行某些專有任務的時候,比較需要分布式的計算能力,對應用的開發沒 有太多要求。另外,在采用JAVA構架模型中,常常使用這種模式實現分布式的負載均衡,因為java應用都基於虛擬機進行,可以在應 用層和虛擬機之間設計一個中間層,處理負載均衡的工作。
◆應用服務器的負載均衡技術
如果將客戶端的負載均衡層移植到某一個中間平台,形成三層結構,則客戶端應用可以不需要做特殊的修改,透明的通過中間層 應用服務器將請求均衡到相應的服務結點。比較常見的實現手段就是反向代理技術。使用反向代理服務器,可以將請求均勻轉發給多 台服務器,或者直接將緩存的數據返回客戶端,這樣的加速模式在一定程度上可以提升靜態網頁的訪問速度,從而達到負載均衡的目 的。
使用反向代理的好處是,可以將負載均衡和代理服務器的高速緩存技術結合在一起,提供有益的性能。然而它本身也存在一些問 題,首先就是必須為每一種服務都專門開發一個反向代理服務器,這就不是一個輕松的任務。
反向代理服務器本身雖然可以達到很高效率,但是針對每一次代理,代理服務器就必須維護兩個連接,一個對外的連接,一個對 內的連接,因此對於特別高的連接請求,代理服務器的負載也就非常之大。反向代理能夠執行針對應用協議而優化的負載均衡策略, 每次僅訪問最空閒的內部服務器來提供服務。但是隨著並發連接數量的增加,代理服務器本身的負載也變得非常大,最後反向代理服 務器本身會成為服務的瓶頸。
◆基於域名系統的負載均衡
NCSA的可擴展Web是最早使用動態DNS輪詢技術的web系統。在DNS中為多個地址配置同一個名字,因而查詢這個名字的客戶機將 得到其中一個地址,從而使得不同的客戶訪問不同的服務器,達到負載均衡的目的。在很多知名的web站點都使用了這個技術:包括 早期的yahoo站點、163等。動態DNS輪詢實現起來簡單,無需復雜的配置和管理,一般支持bind8.2以上的類unix系統都能夠運行,因 此廣為使用。
DNS負載均衡是一種簡單而有效的方法,但是存在不少問題。
首先域名服務器無法知道服務結點是否有效,如果服務結點失效,余名系統依然會將域名解析到該節點上,造成用戶訪問失效。
其次,由於DNS的數據刷新時間TTL(Time to LIVE)標志,一旦超過這個TTL,其他DNS服務器就需要和這個服務器交互,以重 新獲得地址數據,就有可能獲得不同IP地址。因此為了使地址能隨機分配,就應使TTL盡量短,不同地方的DNS服務器能更新對應的 地址,達到隨機獲得地址。然而將TTL設置得過短,將使DNS流量大增,而造成額外的網絡問題。
最後,它不能區分服務器的差異,也不能反映服務器的當前運行狀態。當使用DNS負載均衡的時候,必須盡量保證不同的客戶計 算機能均勻獲得不同的地址。例如,用戶A可能只是浏覽幾個網頁,而用戶B可能進行著大量的下載,由於域名系統沒有合適的負載策 略,僅僅是簡單的輪流均衡,很容易將用戶A的請求發往負載輕的站點,而將B的請求發往負載已經很重的站點。因此,在動態平衡特 性上,動態DNS輪詢的效果並不理想。
◆高層協議內容交換技術
除了上述的幾種負載均衡方式之外,還有在協議內部支持負載均衡能力的技術,即URL交換或七層交換,提供了一種對訪問流量 的高層控制方式。Web內容交換技術檢查所有的HTTP報頭,根據報頭內的信息來執行負載均衡的決策。例如可以根據這些信息來確定 如何為個人主頁和圖像數據等內容提供服務,常見的有HTTP協議中的重定向能力等。
HTTP運行於TCP連接的最高層。客戶端通過恆定的端口號80的TCP服務直接連接到服務器,然後通過TCP連接向服務器端發送一個 HTTP請求。協議交換根據內容策略來控制負載,而不是根據TCP端口號,所以不會造成訪問流量的滯留。
由於負載平衡設備要把進入的請求分配給多個服務器,因此,它只能在TCP連接時建立,且HTTP請求通過後才能確定如何進行負 載的平衡。當一個網站的點擊率達到每秒上百甚至上千次時,TCP連接、HTTP報頭信息的分析以及進程的時延已經變得很重要了,要 盡一切可能提高這幾各部份的性能。
在HTTP請求和報頭中有很多對負載平衡有用的信息。我們可以從這些信息中獲知客戶端所請求的URL和網頁,利用這個信息,負 載平衡設備就可以將所有的圖像請求引導到一個圖像服務器,或者根據URL的數據庫查詢內容調用CGI程序,將請求引導到一個專用 的高性能數據庫服務器。
如果網絡管理員熟悉內容交換技術,他可以根據HTTP報頭的cookie字段來使用Web內容交換技術改善對特定客戶的服務,如果能 從HTTP請求中找到一些規律,還可以充分利用它作出各種決策。除了TCP連接表的問題外,如何查找合適的HTTP報頭信息以及作出 負載平衡決策的過程,是影響Web內容交換技術性能的重要問題。如果Web服務器已經為圖像服務、SSL對話、數據庫事務服務之類的 特殊功能進行了優化,那麼,采用這個層次的流量控制將可以提高網絡的性能。
◆網絡接入協議交換
大型的網絡一般都是由大量專用技術設備組成的,如包括防火牆、路由器、第3、4層交換機、負載均衡設備、緩沖服務器和Web 服務器等。如何將這些技術設備有機地組合在一起,是一個直接影響到網絡性能的關鍵性問題。現在許多交換機提供第四層交換功 能,對外提供一個一致的IP地址,並映射為多個內部IP地址,對每次TCP和UDP連接請求,根據其端口號,按照即定的策略動態選擇 一個內部地址,將數據包轉發到該地址上.