隨著Internet技術的飛速發展,網絡帶寬瓶頸的限制被排除之后,另一個亟待解決的就是web站點響應能力低下的問題。影響web站點響應速度的因素有很多,其中最主要的兩點就是Web站點的處理能力和吞吐能力。單純考慮靠提高服務器的性能來解決問題是不切合實際的,因為客戶請求的增長速度總是遠遠超過服務器性價比提高的速度,較常見的解決方案是在一個網站中用大量的服務器來同時實現Web、FTP、DNS、E-mail和SSL等應用。如何讓這些服務器能夠平滑地提供服務?這就是負載均衡技術出現的主要原因。
一、解析負載均衡
---- 最早實現負載均衡功能的可能是DNS機制。DNS在Internet上就像一個電話號碼本,它把域名映射成IP地址。當客戶端向本地DNS發出一個查詢域名地址的請求時,本地DNS就去Internet上找有權解釋該域名的域名服務器,找到后,該域名授權域名服務器向本地DNS發回正確的IP地址,本地DNS再把IP地址告訴客戶端。當有多臺服務器的IP地址對應同一個域名時,授權域名服務器就用下面介紹的Round Robin算法把某一個IP地址發給本地DNS,從而在一定程度實現了負載均衡。
---- 一般說來,真正提供負載均衡技術的產品主要可以分為3類。
---- 第一類為負載均衡交換機,就是常說的4~7層的交換機,像Alteon、Arrowpoint和Foundry等。簡單說來,有負載均衡功能的交換機是把傳統的2~3層交換的功能擴展到更高層(其實就是既分析IP包頭,又看包里的內容)。通常,因為基于交換的產品沒有什么代碼,又是基于ASIC的,所以交換機會提供較好的性能和較高的可靠性。
---- 第二類為基于PC服務器的產品,像F5、Radware和Intel等,這類產品在吞吐量和并發上會有性能的瓶頸。
---- 第三類為基于服務器端的代理性產品,這類產品是運行在每臺服務器上的特殊軟件,如IBM基于Unix和Windows NT上的負載均衡軟件。由于軟件是依賴于平臺的,當服務器上裝有別的軟件時,可能會在可靠性及其他性能上有所下降。
---- 下面以交換產品為例分析負載均衡技術(如圖1所示)。
上面這個圖顯示了負載均衡的基本工作原理: 給負載均衡設備設一個虛IP(VIP,Virtual IP),把它放在服務器群的前面。這個VIP就是向外界公布的地址,或者說是域名解析的地址。
---- 在這個例子中,我們希望負載均衡設備把所有的HTTP請求“均勻”地發給A、B和D服務器,把FTP請求發給A、C和E服務器,把DNS請求發給B服務器。當一個客戶請求到達VIP的HTTP端口時,交換機把請求包的目的IP和MAC換成A、B和D服務器的IP和MAC(改換的依據是我們所選擇的平衡算法)。當服務器的應答通過交換機時,交換機再把A 、B或D服務器的真實地址換成VIP,然后再轉發出去。這樣,管理人員可以隨意的在服務器上增加服務,甚至隨意地增加服務器。比較常用的負載均衡算法有4種,如附表所示。
一般負載均衡交換機還有一些錦上添花的功能。
管理員可以在交換機上給每個服務器設置一個最大鏈接數。這樣當有大量請求涌入時,可以保證不會由于請求過多使得服務器一臺一臺地倒下。
負載均衡交換機可以做服務器級和應用級的健康檢查。有的產品可以做到當一臺服務器返回錯誤時,交換機可以根據錯誤代碼把客戶請求重新定向到另一臺服務器上。
做負載均衡的服務器可以全部用內部IP地址,而負載均衡交換機做地址轉換。顯然,這樣既提高了安全性,又方便了地址管理。
負載均衡交換機支持訪問列表,并能根據TCP和UDP的端口過濾流量。例如我們可以限制只允許某些地址或子網的客戶訪問某些服務。
二、簡單而典型的應用
---- 負載均衡技術有著廣泛的應用。最常見的是Web的應用,其次有SSL、Firewall、FTP、DNS和E-mail等。
---- 1.Web的應用
---- 從圖2所示的Web應用發展過程中我們可以看出,實現負載均衡最早使用的是單個服務器,到了中間階段,開始引入數據庫(物理上數據庫與Web服務器連在一起),現在是負載均衡設備、Web服務器、數據庫系統各自獨立。
最初,一個網站配備一臺服務器,內容全是靜態的。經過發展,有了動態內容,出現了數據庫,此時數據庫和Web還在同一臺機器上。隨著數據量的增大,訪問量的增大,Web服務器多了,數據庫也成為一個服務器群。因此,依靠數據庫技術可以做到大量數據的可靠存儲,依靠負載均衡技術做到大量用戶的并發訪問。
---- 2. SSL的應用
---- 現在網絡安全越來越受重視,傳輸敏感信息時大多用SSL加密。這樣做的直接后果是,在電子交易時,服務器被SSL解密進程占用了大量的資源。據Intel公司提供的資料,當測試站點沒有用SSL加密傳輸時,每秒并發支持357個鏈接,而當使用SSL加密傳輸時,每秒支持的并發鏈接數下降到3個。有些公司目前推出了SSL的加速器,把幾個加速器串聯起來放在服務器的前面,可以顯著提高Web服務器的響應能力。
---- 與此同時,也有人用負載均衡交換機解決SSL的問題(如圖3所示)。同樣,VIP是設定在交換機上的,交換機在接到客戶的請求時,把SSL加密的部分定向到專用的SSL服務器上解密。當解密完成后傳給Web服務器處理。Web服務器的響應如需加密,交換機把響應傳到SSL服務器加密,再發回客戶端。

---- 3.Firewall的應用
---- 為了網站的安全,一般都要站點前放一個防火墻。但放置防火墻的同時也帶來了一些問題,如單點故障、效率等。雖然許多防火墻也提供Failover的功能,但如果防火墻一壞就可以直接通過,那防火墻的意義何在呢?現有的許多防火墻都宣傳能處理百兆、千兆的流量,但是當防火墻上的策略增加時,它實際處理的流量遠遠低于它的宣傳值。
---- 負載均衡交換機提供這樣一種應用——并列用多個防火墻,在防火墻的外面加一個負載均衡交換機,把從Internet上來的流量均分給多個防火墻,使多個防火墻同時工作(如圖4所示),從而提高總的吞吐能力。大多數防火墻的策略是針對從外面進來的流量,所以防火墻內部可以不用負載均衡交換機。

三、最新趨勢
---- 前面介紹的全是在本地如何做到負載均衡。現在明顯的趨勢是:比較大的站點都是由跨網絡、跨地域的許多服務器組成的。形成這種局面的主要原因有2個,一個是高可靠性。當我們在一個地點采用負載均衡等技術后,在該地的工作我們已經做得很好了,但問題是如果這個地方的訪問量大到超過設計容量、托管數據中心的Internet接入慢了或斷了,那我們的站點就會受到影響。另一個是使客戶能更快地訪問到信息。我們在服務器端做了許多工作,響應能力很強。但由于Internet的延時,對客戶的響應時間還有可能太長。
---- 如何做到跨網絡、跨地域的服務器之間負載均衡呢?使用全球負載均衡Global Server Load Balance,GSLB)技術就可以做到。前面,我們曾介紹了用DNS做負載均衡,但采用DNS的缺陷在于它不能讓用戶去訪問最近、最快的服務器。GSLB如何做到這一點呢?全球平衡設備就充當授權域名服務器的角色。它們互相通訊,根據各種參數智能地選擇某個站點,答復本地DNS,而不是機械地給出列表上的下一個IP地址。
---- 用DNS框架解決GSLB有2個問題。首先,DNS解析會占用較長的時間,使對最終用戶的響應時間變長。因為DNS的體系就是層次的,一般請求都要經過幾個域名服務器后才會到達授權域名服務器,從而得到應答。其次,不同的GSLB產品使用不同的準則來確定客戶端最終訪問的服務器。通常,全球平衡設備是根據本地DNS的信息確定該選中哪個服務器。實際上,全球平衡設備見不到真正的客戶端,只能見到轉發解析請求的本地DNS。
---- 用DNS框架解決GSLB的一個好處是可以平衡各種類型的流量。如果是HTTP應用,GSLB產品可以用HTTP的重定向來確定提供服務的服務器,加速響應。客戶端的請求發到全球負載均衡設備上,由全球負載均衡設備再把請求用HTTP重定向發到恰當的服務器上。這種方式的優點在于:首先,負載均衡設備直接與客戶端鏈接,這樣在重定向時可以有準確的信息來判斷。其次,HTTP的重定向會節省時間。因為在這種方式下,只需要建立2個TCP鏈接,一個是從客戶端到負載均衡設備,另一個是從負載均衡設備到真正提供內容的服務器。而DNS方式需要建立3個鏈接,一個是從本地DNS到平衡設備,一個是從平衡設備到客戶端,還有一個是從客戶端到真正提供內容的服務器。HTTP重定向的缺陷是很明顯的:它只能平衡HTTP包,不能平衡FTP等流量,更別說音頻、視頻了。
---- 無論用哪種方法解決GSLB,都要確定到底是由哪個服務器最終響應客戶請求。一般說來有5個準則:接近程度、響應時間/延時、丟包情況、本地服務器的負載和本地服務器的健康情況。前3個衡量網絡鏈路的性能,剩下的2個表示單個服務器的性能和狀態。
---- 大多數情況下,平衡設備都用客戶本地的DNS服務器與應用服務器之間路由器的跳數表示接近程度。由于Cisco獨特的技術,它可以根據BGP、IGP和OSPF等協議獲得網絡拓撲信息和路由信息,從而得知哪個應用服務器離客戶端的本地DNS最近。另外一些產品允許手動設定接近程度。這個手段使得人們可以設定策略來限制某些流量流入到特定的網絡上,比如由于國際鏈路很貴,能在國內訪問的請求就可以限定在國內。
---- 對于響應時間/網絡延時,大家一般是用Ping的方法測量從Web服務器到本地DNS之間的延時。由于不少產品需要等待Ping的應答,這在有些情況下等于增加了響應時間。Radware使用了一種比較好的方法,在首次測量一個Web站點的響應時間后,便把這個


