摘要:本文探討了分散式網路伺服器所使用的負載平衡技術及負載分配的策略,並基於網路位址轉換在FreeBSD上實現了負載平衡網關,應用於我們的Internet網路伺服器上,將負載分給多個伺服器分擔,以解決Internet伺服器面臨的大量並發存取造成的CPU或I/O的高負載問題。為了達到最佳的負載平衡效果,負載控制器需要根據各個伺服器的當前CPU和I/O狀態來分配負載,這就需要動態監視伺服器的負載,並應用最佳化的負載分配策略,達到平均分配負載的目的。
關鍵字: 負載平衡,網路位址轉換,FreeBSD
1. 引言
Internet的快速成長使多媒體網路伺服器面對的存取數量快速增加,伺服器需要具備提供大量並發存取服務的能力,伺服器的處理和I/O能力成為了提供服務的瓶頸。由於單一伺服器的效能總是有限的,必須採用多伺服器和負載平衡技術才能滿足大量並發存取的需要。
最早的負載平衡技術是透過DNS來實現的,在DNS中為多個位址配置同一個名字,因而查詢這個名字的客戶機將得到其中一個位址,從而使得不同的客戶存取不同的伺服器,達到負載平衡的目的[1]。 DNS負載平衡是一種簡單而有效的方法,但是它不能區分伺服器的差異,也不能反映伺服器的目前運作狀態。
反向代理伺服器可以將請求轉送給內部Web伺服器,如果代理伺服器能夠將請求均勻轉送給多台內部伺服器,就能達到負載平衡的目的[2]。反向代理方式下能套用最佳化的負載平衡策略,每次存取最空閒的內部伺服器來提供服務。但是隨著並發連線數量的增加,代理伺服器本身的負載也變得非常大,最後反向代理伺服器本身會成為服務的瓶頸。
支援負載平衡的位址轉換閘道中可以將一個外部IP位址對應為多個內部IP位址,對每次TCP連線要求動態使用其中一個內部位址,達到負載平衡的目的[3]。許多硬體廠商將這種技術整合在他們的交換器中,作為他們第四層交換的一種功能來實現,一般採用隨機選擇、根據伺服器的連接數量或響應時間進行選擇的負載平衡策略來分配負載。然而硬體實現的負載控制器靈活性不強,不能支援更優化的負載平衡策略和更複雜的應用協定。
除了這三種負載平衡方式之外,有的協議內部支援與負載平衡相關的功能,例如HTTP協議中的重定向能力等,但它依賴於特定協議,因此使用範圍有限。根據現有的這些負載平衡技術,我們選擇了使用軟體方式實現網路位址轉換的負載平衡的方式,以彌補硬體負載平衡器的不靈活,並應用最佳化的平衡策略來實現後端伺服器負載分擔的最優狀態。
2. 負載平衡策略
為了將負載均勻的分配給內部的多個伺服器上,就需要應用一定的負載平衡策略。傳統的負載平衡策略並沒有考慮到服務請求的不同類型、後台伺服器的不同能力以及隨機選擇造成的負載分配不均勻等問題。為了使得負載分配十分均勻,就要應用能正確反映各個伺服器CPU及I/O狀態的負載平衡策略[4]。
客戶發起的服務請求類型是多種多樣的,按照對處理器、網路和I/O的資源要求,可以簡單的將它們分為兩個不同類別,以便應用不同的處理策略:
靜態文件請求:例如普通的文字、圖像等靜態多媒體數據,它們對處理器負載影響不大,造成的磁碟I/O負載與文件的大小成正比,主要對網路I/O造成壓力。
動態文件要求:較常見的請求常常需要伺服器預先處理,例如搜尋資料庫、壓縮解壓縮多媒體檔案等,這些要求需要相當大的處理器和磁碟I/O資源。
對於靜態文檔,每個服務進程佔用大致相同的系統資源,因此就可以使用進程數來表示系統負載。而動態文檔服務需要額外的處理,其佔用的系統資源就超過處理靜態請求,因此需要使用一個權重來表示。這樣一個最簡單的伺服器負載表示公式就為:
其中L為伺服器的負載,Ns為靜態文件服務進程數,Nd為動態文件服務進程數,而a為每個動態文件服務相對於靜態文件服務的權重,可以在10到100之間進行選擇。
在這個公式中沒有考慮伺服器硬體的限制,當達到硬體限制的時候,由於資源緊張,伺服器的負載就會明顯增加。例如由於伺服器記憶體大小的限制,一些進程就要被交換到硬碟上,使得系統負載迅速增加。考慮了系統硬體限制,則伺服器的負載可以表示為:
新增加的參數 Ll表示這個伺服器普通負載的限度,它要根據每個伺服器本身的硬體能力來設定。而b表示超出正常負載時用來限制分配給伺服器任務的權重,應該設定為大於Ll的數值,以表示硬體限製作用。通常在一個伺服器叢集中,硬體設定越差的伺服器這個權重越要設定的大,以避免在所有的伺服器都超負載運作時,硬體最差的伺服器反而負載最高。因此b是和本伺服器硬體限制Ll成反比的,則b可以設定為:
Llmax為伺服器叢集中最高硬體配置的伺服器的Ll值。當確定了每個伺服器的負載之後,中心控制負載分配的伺服器就能將負載正確的分發給最空閒的伺服器,從而不會像其他的負載分配策略那樣會導致負載分配不均勻的情況。
3. 實作方法及實驗結果
我們的伺服器系統由使用快速乙太網路連接起來的多台FreeBSD系統所組成。每台後端伺服器上執行一個守護程序來動態獲得自己的負載狀態,而使用FreeBSD實現的中心控制網關就透過這些守護程序刷新各個伺服器的負載,以進行正確的負載分配。
3.1支援負載平衡的閘道
在FreeBSD系統下,提供了divert介面以支援網路位址轉換能力。 IP封包透過系統核心的ipfw過濾功能被傳送到divert介面中,以便外部守護程式natd能接收原始封包,處理之後再發回系統核心進行正常的IP分發[5]。
因此根據FreeBSD的位址轉換結構,可以建立自己的網路位址轉換守護進程,以支援負載平衡功能,這樣就能將FreeBSD系統作為一個支援負載平衡的網關。由於它是軟體實現的方式,很容易支援非標準的協定及應用優化的負載平衡策略,並且具備很大的靈活性。
3.2實驗及分析
為測試這種實現的可用性,我們針對最常見的HTTP協定進行我們的測試實驗。為了區分不同的請求種類,設計了三種不同類型的測試,以測試不同方面的效能。
CGI程式產生的動態文件:用於測試在伺服器的處理能力的負載平衡狀態。
小型靜態文檔:使用尺寸較小的靜態文檔,用於測試頻繁連接下負載平衡的狀態;
大型靜態文檔:使用較大的文檔,測試磁碟及網路I/O的負載平衡狀態;
測試結果以單一伺服器每秒鐘完成請求的效能為基準,顯示使用多台伺服器進行負載平衡時每秒種完成的請求數與基準請求次數的比值。
圖1:負載平衡效能
從上圖中的第一條曲線a是處理動態文件請求的,此時隨著伺服器數量的增加,其性能是成倍增加的;而第二條曲線b為處理小尺寸靜態文檔請求的,在使用三台伺服器時性能改善就不明顯了;而處理大尺寸靜態文檔請求的第三條曲線c則幾乎沒有發生效能變化。為了找到負載平衡系統無法達到理想狀態的原因,我們檢視了伺服器資源的使用率:
表1.伺服器資源的使用率
處理類型
負載均衡網關
服務器1
服務器2
服務器3
a
53%
97%
95%
98%
b
76%
43%
39%
41%
c
94%
32%
31%
94%
32%
31%
35%
從這個表中可以看出,當處理動態文檔a時三台伺服器都處於全速運行狀態,負載被均勻分配,這是一種理想的狀態。當處理靜態文檔類型b和c時,負載雖然均勻分配給三台伺服器,但每台伺服器都沒有全速運轉狀態。尤其在處理大尺寸文件時,負載平衡設備中的natd進程則佔據了大部分處理資源。由於所有的網路流量都要經過它進行轉換,因此在網路流量和並發連接數量相當大時,natd進程的負載就增加上去了。實驗中使用不同數量的後端伺服器時,流經負載平衡閘道的實際網路頻寬為:
表2:提供大尺寸文件時伺服器叢集的頻寬
伺服器數量
1台
2台
3台
網路速度(Kb/s)
10042.14
11015.10
11442.67
可以看出頻寬限制在10MB/s左右,顯然這是這個測試使用的負載平衡進程的頻寬限制,事實上程式使用了鍊錶來維護網路位址轉換的狀態,這就大大限制了它的網路性能,透過提高硬體性能和改善演算法,完全可以進一步提高其性能。
4.討論
從上面的實驗中可以看出,基於網路位址轉換的負載平衡器可以有效的解決伺服器端的CPU和磁碟I/O負載,然而負載平衡器本身的效能受網路I/O的限制,在一定硬體條件下具有一定的頻寬限制,但可以透過改善演算法和提高運行負載平衡程序的硬體效能,來提高這個頻寬限制。同時也可以看出,不同的服務類型對不同的伺服器資源進行佔用,我們使用的負載衡量策略是使用同一個負載進行評估,這對於大多數條件是適合的,然而最好的方法是針對不同的資源,如CPU、磁碟I/O或網路I/O等,分別監視伺服器負載,由中心控制器選擇最合適的伺服器分發客戶請求。我們以後的工作將從這兩個面向入手,完善這個負載平衡控制器。
參考文獻:
[1] E.Kata,M.Butler, and R. McGrath. A scalable HTTP server: the ncsa prototype. Computer Networks 與 McGrath. A scalable HTTP server: the ncsa prototype. Computer Networks and ISDN systems. 1994. Vol 27, P155-164
[2] Ralf S.Engelschall. Load Balancing Your Web Site. Web Techniques Magazine (http://www.WebTechniques.com), May 1998. vol. 3, iss.5
[3] CICSO. LocalDirector Documents. http://www.cisco.com, 1997
[4] H.Zhu. T.Yang, Q.Zheng , D.Watson, O.H.Ibarra, andT.Smith, Adaptive load sharing for clustered digital library servers. Technical Report, CS, UCSB, 1998.
[5] FreeBSD core team. natd and vertamman. ://www.freebsd.org. 1995
Implement a load balancing gateway by NAT
Wang, Bo
wb@email.online.ha.cn
Abstract: This paper investigates load balaing techniques and stinedic for our Internet servers. The Internet servers involve the high load of CPU and I/O by simultaneous access requests, the symmetrical clustered servers can distribute the server load to solve the problem. To balance the load in the best way, the gate the load according to the status of server's CPU and I/O. The gateway must monitor every server's load and apply the best scheme to delivery every request, so it can provide the high performance for Internet services.
http://www.bkjia.com/PHPjc/316165.html

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP中使用clone關鍵字創建對象副本,並通過\_\_clone魔法方法定制克隆行為。 1.使用clone關鍵字進行淺拷貝,克隆對象的屬性但不克隆對象屬性內的對象。 2.通過\_\_clone方法可以深拷貝嵌套對象,避免淺拷貝問題。 3.注意避免克隆中的循環引用和性能問題,優化克隆操作以提高效率。

PHP適用於Web開發和內容管理系統,Python適合數據科學、機器學習和自動化腳本。 1.PHP在構建快速、可擴展的網站和應用程序方面表現出色,常用於WordPress等CMS。 2.Python在數據科學和機器學習領域表現卓越,擁有豐富的庫如NumPy和TensorFlow。

HTTP緩存頭的關鍵玩家包括Cache-Control、ETag和Last-Modified。 1.Cache-Control用於控制緩存策略,示例:Cache-Control:max-age=3600,public。 2.ETag通過唯一標識符驗證資源變化,示例:ETag:"686897696a7c876b7e"。 3.Last-Modified指示資源最後修改時間,示例:Last-Modified:Wed,21Oct201507:28:00GMT。

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP是一種服務器端腳本語言,用於動態網頁開發和服務器端應用程序。 1.PHP是一種解釋型語言,無需編譯,適合快速開發。 2.PHP代碼嵌入HTML中,易於網頁開發。 3.PHP處理服務器端邏輯,生成HTML輸出,支持用戶交互和數據處理。 4.PHP可與數據庫交互,處理表單提交,執行服務器端任務。

PHP在過去幾十年中塑造了網絡,並將繼續在Web開發中扮演重要角色。 1)PHP起源於1994年,因其易用性和與MySQL的無縫集成成為開發者首選。 2)其核心功能包括生成動態內容和與數據庫的集成,使得網站能夠實時更新和個性化展示。 3)PHP的廣泛應用和生態系統推動了其長期影響,但也面臨版本更新和安全性挑戰。 4)近年來的性能改進,如PHP7的發布,使其能與現代語言競爭。 5)未來,PHP需應對容器化、微服務等新挑戰,但其靈活性和活躍社區使其具備適應能力。

PHP的核心優勢包括易於學習、強大的web開發支持、豐富的庫和框架、高性能和可擴展性、跨平台兼容性以及成本效益高。 1)易於學習和使用,適合初學者;2)與web服務器集成好,支持多種數據庫;3)擁有如Laravel等強大框架;4)通過優化可實現高性能;5)支持多種操作系統;6)開源,降低開發成本。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

Dreamweaver CS6
視覺化網頁開發工具

Dreamweaver Mac版
視覺化網頁開發工具