肖蓉 中興通訊股份有限公司
人們通過網絡就可以快速地訪問各類資源,但用戶便捷訪問的背后確是內容供應商的技術挑戰在傳統的模式中,供應商一般通過簡單增加服務器數量來提高并發量問題,但在當前的互聯網發展形勢下,這種簡單的處理方式顯然會帶來巨額的成本,并且直接導致系統的不可維護性。為了解決該問題,內容分發網絡(Content Distribution Network, CDN)技術應運而生。
CDN 是一種分布式服務器網絡系統,即組成該系統的硬件服務器可以位于全球的和個角落,只要通過網絡實現互連,就可以實現將源服務器的資源按照一定的規則有選擇性地復制到其它邊緣服務器上,邊緣服務器的選擇主要依賴于先進的負載均衡技術。用戶在訪問網絡資源時,系統會自動為用戶定向到網絡延遲最小的服務器上,使用戶可以在最短的時間內取得所需要的資源。CDN 技術在原理上較簡單,然而要實現高性能訪問仍有很大難度,它涉及到負載均衡、內容分發、存儲管理等許多技術難點。CDN一般按照三級架構進行部署,分別是中心層、區域層和邊緣層,其中中心層和區域層又稱為骨干節點,邊緣層又稱為邊緣節點。節點是CDN 的基本單元,由緩存設備和本地主機構成。
在互聯網發展的初期階段,由于網絡資源不多,用戶也較少,通常只需一臺或若干臺服務器都可以滿足訪問需求。隨著網絡的發展,內容和用戶量都在邊翻增長,人們不得不提高服務器配置并增加服務器數量來應對海量的訪問請求,但這又帶來了網絡堵塞的問題。后來提出了邊緣緩存技術,將一些頻繁訪問的資源存儲到邊緣服務器上并放置到緩存空間中,可以大大提高系統的性能。
內容分發可以通過對網絡內容傳輸的動態重構來平衡分發網絡的壓力,從其功能布局的角度上看,CDN 中包括初始服務器、緩存服務器、重定向服務器、內容管理服務器和內容交換服務器等,其中初始服務器是內容的初始來源,緩存服務器可以將部分內容緩起來,重定向服務器將用戶的訪問指向最近的服務器,內容交換服務器本身不提供任何內容,它的主要功能是控制緩存服務器之間的負載均衡。顯然,在CDN 網絡中,除了要對用戶請求進行重定向之外,還需要在內容分發過程中進行負載均衡的控制,這是內容分發網絡的重要優點,也是內容分發技術的應有之義。
靜態負載均衡是指不主動通過程序對請求進行分發控制,而是將請求按照順序依次分發到每一臺服務器上,不斷循環,使每臺服務器都有相同的機會受到訪問,從而將流量分攤到每臺服務器上,實現負載的均衡。顯然,這種方法做了一個假設,即每臺服務器的性能都是完全一致的。靜態負載均衡算法雖然原理簡單,實現方便,但由于每臺服務器的性能不可能真的完全一致,甚至是由大量不同型號的服務器組成,請求過程中消耗的資源也是很難準確估計的,很難真正維持各服務器之間的負載平衡。為了提高這種簡單的靜態負載均衡的適應范圍,本文提出了一種改進型的加權輪詢算法。
所謂加權輪詢,是指在輪詢的過程中,并不按照順序依次給每臺服務器發送請求,而是根據每臺服務器的性能,為其指定一個權值,服務器綜合性能越好,權值就越高。在有訪問請求進入時,通過查詢當前空閑的服務器中權值最大的服務器,將請求轉發到該服務器上。
顯然,通過權值的引入,靜態負載均衡算法的性能得到了明顯的改善,各臺服務器不再無差別地承擔訪問請求,而是“能者多勞”,最大程度地發揮了集群的綜合性能。然而,這種算法仍然屬于靜態算法,每臺服務器的權值是保持不變的。實際上,計算機的性能會隨著使用時間的延長而下降,并且某些計算機在處理其它任務時,其執行請求的能力也會相應下降。因此,本文又繼續對這種算法進行了優化,采用了一種動態負載均衡算法。
在動態負載均衡算法中,首先仍然假設每臺服務器的性能都是一樣的,但是將其當前活動的連接數記錄下來,當有新的請求進入時,優先將該請求轉發給連接數最少的服務器,同時該服務器連接數加1,以表征其負載變化水平。顯然,只通過服務器的活躍連接數來選擇服務器也是有缺陷的,因為沒有考慮到每臺服務器的性能區別。實際上,有些計算機雖然連接數不多,但由于其自身的性能比較差,因此實際上不適宜繼續接受新的請求。而有些計算機雖然連接數比較大,但由于其性能較好,因此還可以繼續接受更多的請求。為此,本文對該算法進行了改進,提出了一種加權動態負載均衡算法。
所謂動態負載均衡,是指在內容分發的過程中,并不僅僅按照最小連接數給每臺服務器發送請求,而是綜合考慮每臺服務器的性能,為其指定一個權值,服務器綜合性能越好,權值就越高。在有訪問請求進入時,通過查詢每臺服務器中的權值,并與最小連接數相乘,所得的積最小者,將成為執行此次請求的服務器。
顯然,通過權值的引入,動態負載均衡算法的性能得到了明顯的改善,各臺服務器不再只依據最小連接數來承擔訪問請求,而同樣是“能者多勞”,最大程度地發揮了集群的綜合性能。實際上,計算機的性能會隨著使用時間的延長而下降,并且某些計算機在處理其它任務時,其執行請求的能力也會相應下降。因此,這種加權動態負載均衡算法仍然有很大的改進空間,本文限于篇幅不再深入探討。
為了驗證本文提出的加權動態負載均衡算法的性能,本文將該算法應用于某機房的CDN 應用系統中進行測試。該CDN 系統共有1 臺負載調度服務器和3 臺內容服務器,通過一臺普通PC 機作為客戶端進行測試。其中調度服務器內運行了負載指標統計和負載調度兩個子系統,實現對3 臺內容服務器的高效調度。測試客戶端用于模擬不同的訪問壓力,從而觀察加權動態負載均衡算法的響應效率。
所有服務器均安裝了Linux SUSE12 操作系統,具有IP 虛擬(IP Virtual Server,IPVS)服務器功能,采用直接路由模式,然后添加一個節點對其它節點進行管理。測試方案如下:首先將加權動態負載均衡算法部署到負載調度服務器上,其后在客戶機上的負載均衡工具查看并記錄測試數據,最后依次進行10 組測試實驗,第一組的并發量為100,依次遞增至1000。
實測結果表明,當并發量小于300 時,加權動態負載均衡算法的性能優勢并不明顯,但當并發量增加到500 以上時,該算法的優勢開始顯現,在1000 并發量的條件下,算法平均響應時間提高了30%。同時,該算法的平均吞吐量也明顯高于靜態負載均衡算法和非加權動態負載均衡算法。因此,在條件相同的情況下,并發量越高,本文提出的加權動態負載均衡算法性能優勢越突出。
隨著互聯網技術的繼續發展,人類進入了更高程度的信息化社會,各種大型網絡紛紛出現,這為CDN 技術的發展提供了良好的條件。據統計,在當今社會,全球性的大型網絡系統在高峰訪問期間可達億級并發量,如果訪問速度多延遲一秒,用戶就會損失7%左右,這促使各大網絡平臺紛紛引進先進的CDN 技術,并通過負載均衡設計實現系統性能的最優化。采用CDN 技術可以實現數據的分布式存儲、獲得更小的負載、更高的可用性、更好的安全性、顯著提高訪問速度,已成為當前許多網站系統運營商的必然選擇。