曹園青
(河套學院網絡信息中心,巴彥淖爾015000)
作為現代互聯網最常用的網絡服務提供方式,Web 服務已經根深蒂固到我們日常生活的方方面面,網購、社交、金融、教育無不例外。隨著中國網民數量及使用網絡時間的雙重增加,單位時間對Web 服務器的并發量也在急劇增大[1]。此外,業務量的提高,網絡訪問量和數據流量快速增長,使各個核心組件的處理能力和計算強度也相應增大,單一的服務器設備根本無法承擔[2],從而就會出現服務器負載過重導致頁面無響應等使用戶使用體驗較差等狀況[3]。
解決上述問題最奏效的方式,就是Web 服務器集群策略,通俗地講,就是Web 系統不再是由一臺服務器構成,而是由多臺分布式的服務器共同組成,但對于用戶而言,就如同一臺服務器一般。把用戶的所有的高并發請求按照一定的算法合理地分配到后方服務器,充分調動每一臺服務器的資源(CPU、內存、硬盤、SCSI 總線等),由過去的“一(服務器)對一(客戶端)”服務,切換到現在的“多(服務器)對一(客戶端)”服務,大大提高了用戶訪問速度和Web 系統性能,縮短了客戶端響應請求時間,解決了高并發訪問應用服務器的難題。
負載均衡是服務器集群中一種最常見的策略,而服務器的負載均衡表示的是多臺服務器以對稱的方式組成一個服務器,每臺服務器的地位都相同,都可以獨立對外提供服務[4],它們按照一定的算法規則,共同為用戶群提供服務,當有用戶請求時,先由負載均衡模塊將用戶請求轉發給后端服務器[5]。
負載均衡技術的主要優點有:拓展現有的網絡帶寬、增加吞吐量、加強網絡數據處理能力、提升網絡的靈活性和可用性,有效解決數據訪問和業務信息急劇增長給服務器帶來的巨大處理壓力[6]。
實現負載均衡的方法有很多種,如硬件負載均衡策略、軟件負載均衡策略、IP 負載均衡策略、LVS 負載均衡策略,用途最為廣泛的是硬件負載均衡策略和軟件負載均衡策略。硬件方式是指通過硬件來實現負載均衡,例如華為的F5 硬件負載均衡器[7],由于單一的設備完成單一的任務,所以系統性能特別高,可以達到極佳的負載均衡效果,但唯一的缺點就是價格昂貴。而軟件負載均衡策略是指在服務器或者集群的每臺服務器的操作系統上安裝軟件來實現負載均衡,主流的軟件有Connect Control、DNS Load Balance、Nginx、Check Point Firewall-1、Ha proxy 等,它具有配置容易、操作簡單、價格便宜等優點,但性能比起硬件負載均衡來說略顯一般,其中最為普遍和經典的策略為Nginx。
Nginx 的創始人是俄羅斯著名系統管理人Igor Sysoev,起初被用于開發俄羅斯的國家Web 門戶站點Rambler.ru,在2004 年Nginx 的源代碼被發布。因其內存占用率低、并發能力強的特點,為整個市場所青睞[8]。此外,Nginx 作為世界第2 大服務器軟件,因其良好的架構和開源特性,使得對其的應用和研究也越來越廣泛和深入[9]。
相關統計數據顯示,從2004 年至2018 年,世界上大約有11.7%的Web 應用服務器都在使用Nginx 軟件,其中,訪問量排名前兩千名的熱門網站就有28%是基于Nginx 方案的,并且這個比例還在與日俱增,例如國內很多知名的門戶網站網易、鳳凰、搜狐、新華、游俠等都在使用。
Nginx 之所以如此受青睞,歸功于自身的幾個特點:①對客戶端的TCP 報文請求的響應時間極短(幾萬并發的情況下);②擴展性功能強。Nginx 由幾個不同的功能模塊構成,這些模塊的功能性和層次性都不同,并且耦合度特別弱,這就意味著,當其中的一個模塊不能正常工作時,其他的模塊可以忽略單模塊故障而運行正常,這對排錯過程是非常有益的;③Nginx 的構架設計簡單,模塊部署優秀,具有極強的可靠性。大部分對并發數要求高的Web 站點都會選擇Nginx;④單服務器的并發數性能強大,最高可達10 萬;⑤對于大量的代碼編程者而言,Nginx 開源代碼是他們的福音,可以通過修改代碼來帶來個性化的體驗。
Sugon Cloudview 虛擬化平臺是一款開放的平臺架構,基于OSGi 模塊化機制,功能組件可靈活組合,標準的服務接口可兼容支持第三方服務器、存儲、網絡方案,兼容支持Xen、VMWare 等異構虛擬化平臺,此外,它還具有高度可擴展性,對平臺中物理資源、虛擬資源實現物理分組及邏輯分組管理,滿足服務器、存儲、網絡資源的可擴展性要求,支持Windows、Redhat、Suse 等主流操作系統,支持虛擬機創建、啟停、動態遷移、配置修改、性能監控、遠程訪問等功能。
新設計的共享存儲模型為基于光纖通道SAN(Storage Area Network)的磁盤子系統,共由五個RAID 5.0 SCSI 磁盤陣列組成的虛擬化資源池,其中,兩個RAID 5.0 是由磁盤陣列提供,三個RAID 5.0 是由物理服務器的本地SCSI 存儲提供,五個磁盤陣列在光存儲交換機的連接下,構成了光纖通道存儲局域網,這樣既結合了I/O 總線的通道傳輸特征和和遠距離特征,又提供了傳統網絡所具有的靈活連接性和高度的可擴展性。
在三臺物理服務器(hvn0、hvn1 和hvn2)上部署Sugon Cloudview 1.8 系統,構建出虛擬化平臺的資源池,配合SAN 磁盤子系統,在兩者的基礎上創建4 臺虛擬服務器,其中,1 臺用作Nginx 負載均衡虛擬機(Nginx-Server),其他3 臺用作Web 應用服務虛擬機(Web-Server1、Web-Server2 和Web-Server3)。平臺構架如圖1 所示。

圖1 Sugon Cloudview虛擬化平臺構架
負載均衡的算法,即是分發請求的調度算法,對負載均衡的效果起著決定性的作用[10]。Nginx 主流算法有五種,分別是輪詢、ip_hash、weight、fair(第三方)和url_hash(第三方),每種算法都有自己的適用場景,由于新設計的側重點在于對比基于不同虛擬化平臺的Nginx 負載均衡的性能優劣,而不是新Nginx 算法的設計,所以,為了保證測試結果的一致性和可靠性,將所有虛擬機的配置設為一樣,并采用默認的Nginx 輪訓算法,Nginx 版本為1.9.9,配置文件如下所示:

Nginx 作為一個配置靈活的高性能負載均衡解決方案,可以通過更改配置文件中的某些配置項,來使負載均衡系統的性能提高一個水平,下面通過更改一些默認配置,來優化Nginx 的性能,讓Nginx 客戶端的訪問速度更快:

第一個優化項worker_processes 是指worker 進程的數量,建立worker 進程的對象是Nginx 的master 模塊,Nginx 配置文件里的worker_processes 項直接掌控著worker 的數量,這個值太高,會導致系統不斷在不同worker 進程間來回切換,大大地增加了系統的負擔,這個值太低,會造成系統對并發請求的處理變地愈發艱巨,從而很多系統的閑置資源無法充分利用,所以,此項參數建議為CPU 的核數。
第二個優化項worker_connections 指的是每一個worker 進程能并發處理的最大連接數,不能超過最大文件打開數。這里建議為CPU 核數與1024 的乘積。
第三個優化項worker_cpu_affinity 的作用是把CPU 的每個內核綁定在worker 進程上,這樣做的目的是減小進程處理過程中選擇內核的時間,從而大大縮減了系統開銷。
為了驗證基于CVM 虛擬化平臺的Nginx 負載均衡的性能效果,我們對比同等配置下基于KVM 的Nginx 負載均衡方案。首先,將CVM 和KVM 分別部署在3 臺配置相同的物理機上,然后,分別在CVM 平臺和KVM 平臺上虛擬出4 臺配置相同的虛擬機,物理機和虛擬機的配置如表1 所示。

表1 物理機與虛擬機配置表
測試環境的服務器集群的架構如圖2 所示,Nginx負載均衡服務器,用來接收和處理來自客戶端的并發請求,并根據負載均衡算法來進行請求在集群Web 服務器中的合理分配。

圖2 虛擬服務器集群構架
最后利用httperf 壓力測試工具分別對CVM 和KVM 兩個集群進行壓力測試。測試工具的選擇決定著一個解決方案的可靠性,httperf 是一款高效可靠的HTTP 壓力測試工具,它可以模擬多客戶端和高并發連接數的實際應用場景,長時間或超大負荷地測試Web應用服務器的性能,最高可支持1 萬的并發訪問,可以充分地測試Web 服務器的性能。它的測試結果側重于響應速率和響應時間。
在CentOS6.4 下安裝好httperf-0.9.0 后,輸入如下命令,即可進行壓力測試:
httperf--server 192.168.0.167--port 80--uri/index.html--rate 500--num-conn 1000--num-call 1-timeout 10
其中,rate 代表每秒發送的請求,num-conn 代表連接的總數,num-call 代表每個連接發送的請求數目。
新設計的測試方案為:首先對比測試單物理機和基于CVM 虛擬化集群的Nginx 方案的響應時間,并發連接數從500 增至5000,分別測試10 個數據點(步長為500);然后對比測試基于CVM 虛擬化集群的Nginx方案和基于KVM 虛擬化集群的Nginx 方案的響應時間,并發連接數從1000 增至7000,分別測試7 個數據點(步長為1000)。所有的數據點都測試3 遍,最后取算數平均值,測試結果經過Excel 可視化后,輸出折線圖?;贑VM 虛擬化集群和KVM 虛擬化集群的Nginx 方案測試數據分別如表2 和表3 所示,可視化圖表分別如圖3 和圖4 所示。

表2 單物理機和CVM+Nginx 集群響應時間

表3 KVM+Nginx 集群和CVM+Nginx 集群響應時間

圖3 單物理機和CVM+Nginx集群響應時間

圖4 KVM+Nginx集群和CVM+Nginx集群響應時間
從圖3 不難看出,并發數在1000 之前,單物理機和CVM+Nginx 集群的響應時間基本上保持一致,在1000 之后,隨著并發數的增加,單物理機的響應時間急劇上升,但CVM+Nginx 集群的響應時間還是很快,這就說明CVM+Nginx 集群的性能要顯著優于單物理機,處理多任務的水平會更加出色。
從圖4 可以得到,在并發數低于5000 時,KVM+Nginx 集群和CVM+Nginx 集群的響應時間都比較理想,均在20ms 以內,但并發數高于5000 后,KVM+Nginx 集群的響應時間要比CVM+Nginx 集群慢,說明CVM+Nginx 集群的性能要比KVM+Nginx 集群好。
本文提出了一種新的Nginx 的實現方式,即基于CVM 的Nginx 負載均衡集群方案,相比傳統的基于KVM 的Nginx 集群,在相同的硬件條件下,從系統響應時間的性能指標角度進行了參數的對比,結果表明新方案擁有更快的相應速度,具有明顯的性能優勢,從而驗證了新方案是可行的,可以為客戶端請求更合理地分配負載服務器,達到了負載均衡的目標,滿足了設計的基本要求。