曹園青
(河套學院網(wǎng)絡(luò)信息中心,巴彥淖爾015000)
作為現(xiàn)代互聯(lián)網(wǎng)最常用的網(wǎng)絡(luò)服務(wù)提供方式,Web 服務(wù)已經(jīng)根深蒂固到我們?nèi)粘I畹姆椒矫婷?,網(wǎng)購、社交、金融、教育無不例外。隨著中國網(wǎng)民數(shù)量及使用網(wǎng)絡(luò)時間的雙重增加,單位時間對Web 服務(wù)器的并發(fā)量也在急劇增大[1]。此外,業(yè)務(wù)量的提高,網(wǎng)絡(luò)訪問量和數(shù)據(jù)流量快速增長,使各個核心組件的處理能力和計算強度也相應增大,單一的服務(wù)器設(shè)備根本無法承擔[2],從而就會出現(xiàn)服務(wù)器負載過重導致頁面無響應等使用戶使用體驗較差等狀況[3]。
解決上述問題最奏效的方式,就是Web 服務(wù)器集群策略,通俗地講,就是Web 系統(tǒng)不再是由一臺服務(wù)器構(gòu)成,而是由多臺分布式的服務(wù)器共同組成,但對于用戶而言,就如同一臺服務(wù)器一般。把用戶的所有的高并發(fā)請求按照一定的算法合理地分配到后方服務(wù)器,充分調(diào)動每一臺服務(wù)器的資源(CPU、內(nèi)存、硬盤、SCSI 總線等),由過去的“一(服務(wù)器)對一(客戶端)”服務(wù),切換到現(xiàn)在的“多(服務(wù)器)對一(客戶端)”服務(wù),大大提高了用戶訪問速度和Web 系統(tǒng)性能,縮短了客戶端響應請求時間,解決了高并發(fā)訪問應用服務(wù)器的難題。
負載均衡是服務(wù)器集群中一種最常見的策略,而服務(wù)器的負載均衡表示的是多臺服務(wù)器以對稱的方式組成一個服務(wù)器,每臺服務(wù)器的地位都相同,都可以獨立對外提供服務(wù)[4],它們按照一定的算法規(guī)則,共同為用戶群提供服務(wù),當有用戶請求時,先由負載均衡模塊將用戶請求轉(zhuǎn)發(fā)給后端服務(wù)器[5]。
負載均衡技術(shù)的主要優(yōu)點有:拓展現(xiàn)有的網(wǎng)絡(luò)帶寬、增加吞吐量、加強網(wǎng)絡(luò)數(shù)據(jù)處理能力、提升網(wǎng)絡(luò)的靈活性和可用性,有效解決數(shù)據(jù)訪問和業(yè)務(wù)信息急劇增長給服務(wù)器帶來的巨大處理壓力[6]。
實現(xiàn)負載均衡的方法有很多種,如硬件負載均衡策略、軟件負載均衡策略、IP 負載均衡策略、LVS 負載均衡策略,用途最為廣泛的是硬件負載均衡策略和軟件負載均衡策略。硬件方式是指通過硬件來實現(xiàn)負載均衡,例如華為的F5 硬件負載均衡器[7],由于單一的設(shè)備完成單一的任務(wù),所以系統(tǒng)性能特別高,可以達到極佳的負載均衡效果,但唯一的缺點就是價格昂貴。而軟件負載均衡策略是指在服務(wù)器或者集群的每臺服務(wù)器的操作系統(tǒng)上安裝軟件來實現(xiàn)負載均衡,主流的軟件有Connect Control、DNS Load Balance、Nginx、Check Point Firewall-1、Ha proxy 等,它具有配置容易、操作簡單、價格便宜等優(yōu)點,但性能比起硬件負載均衡來說略顯一般,其中最為普遍和經(jīng)典的策略為Nginx。
Nginx 的創(chuàng)始人是俄羅斯著名系統(tǒng)管理人Igor Sysoev,起初被用于開發(fā)俄羅斯的國家Web 門戶站點Rambler.ru,在2004 年Nginx 的源代碼被發(fā)布。因其內(nèi)存占用率低、并發(fā)能力強的特點,為整個市場所青睞[8]。此外,Nginx 作為世界第2 大服務(wù)器軟件,因其良好的架構(gòu)和開源特性,使得對其的應用和研究也越來越廣泛和深入[9]。
相關(guān)統(tǒng)計數(shù)據(jù)顯示,從2004 年至2018 年,世界上大約有11.7%的Web 應用服務(wù)器都在使用Nginx 軟件,其中,訪問量排名前兩千名的熱門網(wǎng)站就有28%是基于Nginx 方案的,并且這個比例還在與日俱增,例如國內(nèi)很多知名的門戶網(wǎng)站網(wǎng)易、鳳凰、搜狐、新華、游俠等都在使用。
Nginx 之所以如此受青睞,歸功于自身的幾個特點:①對客戶端的TCP 報文請求的響應時間極短(幾萬并發(fā)的情況下);②擴展性功能強。Nginx 由幾個不同的功能模塊構(gòu)成,這些模塊的功能性和層次性都不同,并且耦合度特別弱,這就意味著,當其中的一個模塊不能正常工作時,其他的模塊可以忽略單模塊故障而運行正常,這對排錯過程是非常有益的;③Nginx 的構(gòu)架設(shè)計簡單,模塊部署優(yōu)秀,具有極強的可靠性。大部分對并發(fā)數(shù)要求高的Web 站點都會選擇Nginx;④單服務(wù)器的并發(fā)數(shù)性能強大,最高可達10 萬;⑤對于大量的代碼編程者而言,Nginx 開源代碼是他們的福音,可以通過修改代碼來帶來個性化的體驗。
Sugon Cloudview 虛擬化平臺是一款開放的平臺架構(gòu),基于OSGi 模塊化機制,功能組件可靈活組合,標準的服務(wù)接口可兼容支持第三方服務(wù)器、存儲、網(wǎng)絡(luò)方案,兼容支持Xen、VMWare 等異構(gòu)虛擬化平臺,此外,它還具有高度可擴展性,對平臺中物理資源、虛擬資源實現(xiàn)物理分組及邏輯分組管理,滿足服務(wù)器、存儲、網(wǎng)絡(luò)資源的可擴展性要求,支持Windows、Redhat、Suse 等主流操作系統(tǒng),支持虛擬機創(chuàng)建、啟停、動態(tài)遷移、配置修改、性能監(jiān)控、遠程訪問等功能。
新設(shè)計的共享存儲模型為基于光纖通道SAN(Storage Area Network)的磁盤子系統(tǒng),共由五個RAID 5.0 SCSI 磁盤陣列組成的虛擬化資源池,其中,兩個RAID 5.0 是由磁盤陣列提供,三個RAID 5.0 是由物理服務(wù)器的本地SCSI 存儲提供,五個磁盤陣列在光存儲交換機的連接下,構(gòu)成了光纖通道存儲局域網(wǎng),這樣既結(jié)合了I/O 總線的通道傳輸特征和和遠距離特征,又提供了傳統(tǒng)網(wǎng)絡(luò)所具有的靈活連接性和高度的可擴展性。
在三臺物理服務(wù)器(hvn0、hvn1 和hvn2)上部署Sugon Cloudview 1.8 系統(tǒng),構(gòu)建出虛擬化平臺的資源池,配合SAN 磁盤子系統(tǒng),在兩者的基礎(chǔ)上創(chuàng)建4 臺虛擬服務(wù)器,其中,1 臺用作Nginx 負載均衡虛擬機(Nginx-Server),其他3 臺用作Web 應用服務(wù)虛擬機(Web-Server1、Web-Server2 和Web-Server3)。平臺構(gòu)架如圖1 所示。
圖1 Sugon Cloudview虛擬化平臺構(gòu)架
負載均衡的算法,即是分發(fā)請求的調(diào)度算法,對負載均衡的效果起著決定性的作用[10]。Nginx 主流算法有五種,分別是輪詢、ip_hash、weight、fair(第三方)和url_hash(第三方),每種算法都有自己的適用場景,由于新設(shè)計的側(cè)重點在于對比基于不同虛擬化平臺的Nginx 負載均衡的性能優(yōu)劣,而不是新Nginx 算法的設(shè)計,所以,為了保證測試結(jié)果的一致性和可靠性,將所有虛擬機的配置設(shè)為一樣,并采用默認的Nginx 輪訓算法,Nginx 版本為1.9.9,配置文件如下所示:
Nginx 作為一個配置靈活的高性能負載均衡解決方案,可以通過更改配置文件中的某些配置項,來使負載均衡系統(tǒng)的性能提高一個水平,下面通過更改一些默認配置,來優(yōu)化Nginx 的性能,讓Nginx 客戶端的訪問速度更快:
第一個優(yōu)化項worker_processes 是指worker 進程的數(shù)量,建立worker 進程的對象是Nginx 的master 模塊,Nginx 配置文件里的worker_processes 項直接掌控著worker 的數(shù)量,這個值太高,會導致系統(tǒng)不斷在不同worker 進程間來回切換,大大地增加了系統(tǒng)的負擔,這個值太低,會造成系統(tǒng)對并發(fā)請求的處理變地愈發(fā)艱巨,從而很多系統(tǒng)的閑置資源無法充分利用,所以,此項參數(shù)建議為CPU 的核數(shù)。
第二個優(yōu)化項worker_connections 指的是每一個worker 進程能并發(fā)處理的最大連接數(shù),不能超過最大文件打開數(shù)。這里建議為CPU 核數(shù)與1024 的乘積。
第三個優(yōu)化項worker_cpu_affinity 的作用是把CPU 的每個內(nèi)核綁定在worker 進程上,這樣做的目的是減小進程處理過程中選擇內(nèi)核的時間,從而大大縮減了系統(tǒng)開銷。
為了驗證基于CVM 虛擬化平臺的Nginx 負載均衡的性能效果,我們對比同等配置下基于KVM 的Nginx 負載均衡方案。首先,將CVM 和KVM 分別部署在3 臺配置相同的物理機上,然后,分別在CVM 平臺和KVM 平臺上虛擬出4 臺配置相同的虛擬機,物理機和虛擬機的配置如表1 所示。
表1 物理機與虛擬機配置表
測試環(huán)境的服務(wù)器集群的架構(gòu)如圖2 所示,Nginx負載均衡服務(wù)器,用來接收和處理來自客戶端的并發(fā)請求,并根據(jù)負載均衡算法來進行請求在集群Web 服務(wù)器中的合理分配。
圖2 虛擬服務(wù)器集群構(gòu)架
最后利用httperf 壓力測試工具分別對CVM 和KVM 兩個集群進行壓力測試。測試工具的選擇決定著一個解決方案的可靠性,httperf 是一款高效可靠的HTTP 壓力測試工具,它可以模擬多客戶端和高并發(fā)連接數(shù)的實際應用場景,長時間或超大負荷地測試Web應用服務(wù)器的性能,最高可支持1 萬的并發(fā)訪問,可以充分地測試Web 服務(wù)器的性能。它的測試結(jié)果側(cè)重于響應速率和響應時間。
在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 代表每秒發(fā)送的請求,num-conn 代表連接的總數(shù),num-call 代表每個連接發(fā)送的請求數(shù)目。
新設(shè)計的測試方案為:首先對比測試單物理機和基于CVM 虛擬化集群的Nginx 方案的響應時間,并發(fā)連接數(shù)從500 增至5000,分別測試10 個數(shù)據(jù)點(步長為500);然后對比測試基于CVM 虛擬化集群的Nginx方案和基于KVM 虛擬化集群的Nginx 方案的響應時間,并發(fā)連接數(shù)從1000 增至7000,分別測試7 個數(shù)據(jù)點(步長為1000)。所有的數(shù)據(jù)點都測試3 遍,最后取算數(shù)平均值,測試結(jié)果經(jīng)過Excel 可視化后,輸出折線圖?;贑VM 虛擬化集群和KVM 虛擬化集群的Nginx 方案測試數(shù)據(jù)分別如表2 和表3 所示,可視化圖表分別如圖3 和圖4 所示。
表2 單物理機和CVM+Nginx 集群響應時間
表3 KVM+Nginx 集群和CVM+Nginx 集群響應時間
圖3 單物理機和CVM+Nginx集群響應時間
圖4 KVM+Nginx集群和CVM+Nginx集群響應時間
從圖3 不難看出,并發(fā)數(shù)在1000 之前,單物理機和CVM+Nginx 集群的響應時間基本上保持一致,在1000 之后,隨著并發(fā)數(shù)的增加,單物理機的響應時間急劇上升,但CVM+Nginx 集群的響應時間還是很快,這就說明CVM+Nginx 集群的性能要顯著優(yōu)于單物理機,處理多任務(wù)的水平會更加出色。
從圖4 可以得到,在并發(fā)數(shù)低于5000 時,KVM+Nginx 集群和CVM+Nginx 集群的響應時間都比較理想,均在20ms 以內(nèi),但并發(fā)數(shù)高于5000 后,KVM+Nginx 集群的響應時間要比CVM+Nginx 集群慢,說明CVM+Nginx 集群的性能要比KVM+Nginx 集群好。
本文提出了一種新的Nginx 的實現(xiàn)方式,即基于CVM 的Nginx 負載均衡集群方案,相比傳統(tǒng)的基于KVM 的Nginx 集群,在相同的硬件條件下,從系統(tǒng)響應時間的性能指標角度進行了參數(shù)的對比,結(jié)果表明新方案擁有更快的相應速度,具有明顯的性能優(yōu)勢,從而驗證了新方案是可行的,可以為客戶端請求更合理地分配負載服務(wù)器,達到了負載均衡的目標,滿足了設(shè)計的基本要求。