摘要:設(shè)計(jì)了高并發(fā)Web系統(tǒng)的軟硬件框架,提出了HTTP并發(fā)數(shù)的測(cè)量和監(jiān)控方法,給出了軟硬件的配置和優(yōu)化方案,最后以高考網(wǎng)上查分系統(tǒng)為例進(jìn)行了應(yīng)用。
關(guān)鍵詞:網(wǎng)上查分;并發(fā);nginx;PHP
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2013)13-3049-04
通過網(wǎng)絡(luò)對(duì)外發(fā)布信息已被政府部門普遍采用,但由于社會(huì)對(duì)一些熱點(diǎn)信息(如高考分?jǐn)?shù))的極度關(guān)注,用戶每秒數(shù)千次訪問造成的高并發(fā),會(huì)導(dǎo)致Web系統(tǒng)運(yùn)行緩慢。因此需采用先進(jìn)的軟硬件架構(gòu)設(shè)計(jì)Web系統(tǒng),確定軟硬件的最優(yōu)參數(shù),充分發(fā)揮軟硬件的計(jì)算能力,合理決定軟硬件的使用數(shù)量,確保系統(tǒng)的正常運(yùn)行。
1 高并發(fā)系統(tǒng)
Web系統(tǒng)的并發(fā)一般指的是單位時(shí)間內(nèi)系統(tǒng)與用戶之間所有HTTP請(qǐng)求與響應(yīng)的總和[1],隨著用戶每秒HTTP請(qǐng)求數(shù)逐漸增多,系統(tǒng)運(yùn)行負(fù)載逐漸加重,系統(tǒng)每秒可完成的HTTP連接數(shù)逐漸減少。
1.1 軟硬件架構(gòu)
www服務(wù)器的php系統(tǒng)采用FastCGI結(jié)構(gòu),Nginx將php動(dòng)態(tài)網(wǎng)頁請(qǐng)求轉(zhuǎn)發(fā)給駐留內(nèi)存的php-fpm進(jìn)程,php-fpm進(jìn)程運(yùn)行代碼、連接Oracle數(shù)據(jù)庫、返回結(jié)果給Nginx。php對(duì)緩存、數(shù)據(jù)庫采用持久化(persistent)連接提高并發(fā)性能。
Cacti[3]軟件每隔一分鐘采集一次HTTP并發(fā)數(shù)、CPU使用率、互聯(lián)網(wǎng)帶寬等數(shù)據(jù)并繪制圖形,實(shí)現(xiàn)對(duì)系統(tǒng)負(fù)載的定時(shí)監(jiān)控。
1.2 HTTP并發(fā)數(shù)的測(cè)量和監(jiān)控
1.2.1 HTTP最大并發(fā)數(shù)的測(cè)量
1.2.2 HTTP并發(fā)數(shù)的監(jiān)控
2 系統(tǒng)設(shè)置與優(yōu)化
2.1 系統(tǒng)設(shè)置
Linux、Nginx、PHP等軟件的具體安裝步驟、配置過程可見參考文獻(xiàn)[5-6],epoll機(jī)制[7]是Nginx、PHP等軟件實(shí)現(xiàn)高并發(fā)的關(guān)鍵技術(shù),有關(guān)軟件的參數(shù)配置范圍并無現(xiàn)成公式可參考,數(shù)值大小跟服務(wù)器CPU的計(jì)算能力相關(guān)。最優(yōu)參數(shù)的尋找與HTTP最大并發(fā)數(shù)的測(cè)量是個(gè)互動(dòng)過程,假設(shè)服務(wù)器的HTTP最大并發(fā)數(shù)為M,該文提出有關(guān)參數(shù)經(jīng)驗(yàn)數(shù)值如下:
1)Linux中涉及高并發(fā)進(jìn)程的用戶對(duì)系統(tǒng)資源的使用上限:nproc為M、nofile為M、stack為M×4K。
2)Linux中TCP的syn、listen隊(duì)列長(zhǎng)度最少為M,TIME-WAIT狀態(tài)連接數(shù)最大為M。
3)Nginx進(jìn)程總數(shù)為CPU內(nèi)核數(shù)的1或2倍,
4)Nginx每個(gè)進(jìn)程的最大連接數(shù)為M×2
5)PHP-FPM的listen隊(duì)列長(zhǎng)度為M,靜態(tài)駐留內(nèi)存的進(jìn)程數(shù)為32至64。
2.2 系統(tǒng)優(yōu)化
系統(tǒng)優(yōu)化目的是在相同硬件條件下,盡可能地提高系統(tǒng)HTTP最大并發(fā)數(shù),實(shí)現(xiàn)用戶對(duì)Web系統(tǒng)的快速訪問。
2.2.1 頁面長(zhǎng)度與HTTP壓縮傳輸
所有頁面長(zhǎng)度都應(yīng)盡可能的短,在計(jì)算復(fù)雜度確定的前提下,網(wǎng)頁的HTTP最大并發(fā)數(shù)與頁面長(zhǎng)度直接相關(guān)。
頁面可采用HTTP壓縮傳輸,減少對(duì)互聯(lián)網(wǎng)帶寬的需求。ab軟件測(cè)試表明,啟用Nginx靜態(tài)網(wǎng)頁壓縮、PHP-FPM動(dòng)態(tài)網(wǎng)頁壓縮可使長(zhǎng)度大于5K字節(jié)的純文字網(wǎng)頁傳輸長(zhǎng)度減小為原來的1/3左右,頁面越大壓縮比越高,但因壓縮消耗了部分CPU,頁面HTTP最大并發(fā)數(shù)下降1/4左右。
2.2.2 寬帶和DNS
不同寬帶運(yùn)營(yíng)商之間的網(wǎng)絡(luò)互連較慢,系統(tǒng)可使用多個(gè)運(yùn)營(yíng)商的寬帶以保證所有用戶的快速訪問,主要運(yùn)營(yíng)商的寬帶可能需要多條。
域名可采用DNS視圖、DNS輪詢[8]實(shí)現(xiàn):1、實(shí)現(xiàn)各寬帶只對(duì)該運(yùn)營(yíng)商IP地址范圍的用戶提供流量,2、同運(yùn)營(yíng)商多條寬帶之間流量均衡。
2.2.3 防火墻
將允許用戶訪問Web系統(tǒng)HTTP端口的規(guī)則設(shè)置為第一條,減少防火墻CPU的無效計(jì)算,因?yàn)榉阑饓Σ捎米钕绕ヅ湓瓌t,根據(jù)數(shù)據(jù)包滿足條件的第一條過濾規(guī)則決定放行還是阻塞。
關(guān)閉防火墻的入侵檢測(cè)、防網(wǎng)絡(luò)攻擊等功能,測(cè)試表明,當(dāng)HTTP并發(fā)數(shù)達(dá)到數(shù)百時(shí),開啟這些功能將導(dǎo)致防火墻CPU使用率為100%。Linux軟件自帶的iptables防火墻也要關(guān)閉。
2.2.4 負(fù)載均衡器
負(fù)載均衡器將用戶HTTP請(qǐng)求分發(fā)給后臺(tái)的多個(gè)www服務(wù)器,分發(fā)策略有最少連接數(shù)(Least-Connection)、源地址等方式:
1)基于最少連接數(shù)的策略可實(shí)現(xiàn)HTTP請(qǐng)求對(duì)后臺(tái)服務(wù)器的平均分配,但需應(yīng)用系統(tǒng)解決不同服務(wù)器之間的會(huì)話共享問題。
2)基于源地址的策略可以實(shí)現(xiàn)同一IP地址的請(qǐng)求被分發(fā)到同一臺(tái)服務(wù)器上,應(yīng)用系統(tǒng)不存在服務(wù)器之間的會(huì)話共享問題,缺點(diǎn)就是不同服務(wù)器的負(fù)載可能相差較大,因?yàn)镹AT技術(shù)使互聯(lián)網(wǎng)每個(gè)IP地址的實(shí)際用戶數(shù)可能相差較大。
2.2.5 Nginx
關(guān)閉HTTP的長(zhǎng)連接(Keep-Alive),大多數(shù)用戶對(duì)Web系統(tǒng)的訪問是一次性的,打開長(zhǎng)連接將導(dǎo)致高并發(fā)系統(tǒng)短時(shí)間內(nèi)被迫保持大量tcp連接不關(guān)閉,反而加大了系統(tǒng)負(fù)載、降低了并發(fā)性能。
2.2.6 PHP
2)持久化連接用于php與緩存、數(shù)據(jù)庫之間的數(shù)據(jù)交換。
2.2.7 Oracle RAC數(shù)據(jù)庫
Oracle RAC數(shù)據(jù)庫可實(shí)現(xiàn)數(shù)據(jù)庫業(yè)務(wù)的負(fù)載均衡、提高系統(tǒng)可靠性,數(shù)據(jù)庫的索引、SGA大小對(duì)訪問速度也有較大影響[10]。
3 高考網(wǎng)上查分系統(tǒng)
安徽省教育招生考試院從2007開始使用基于JBoss/Oracle軟件的高考網(wǎng)上查分系統(tǒng),投入的查分服務(wù)器有十余臺(tái),多次發(fā)生在并發(fā)高峰時(shí)查分速度變慢問題。
2012年高考網(wǎng)上查分系統(tǒng)使用了本文前述的軟硬件配置和優(yōu)化方案,所有頁面長(zhǎng)度控制在5K字節(jié)以內(nèi),采用HTTP壓縮傳輸。負(fù)載均衡器采用基于源地址的均衡策略,全省50萬考生的成績(jī)數(shù)據(jù)庫大小約為130M字節(jié),Oracle數(shù)據(jù)庫的SGA設(shè)置為512M字節(jié)即可,數(shù)據(jù)庫中作為查詢條件的座位號(hào)、身份證號(hào)創(chuàng)建索引。寬帶、查分服務(wù)器、數(shù)據(jù)庫服務(wù)器的數(shù)量由各設(shè)備HTTP最大并發(fā)數(shù)的測(cè)量和計(jì)算決定。
3.1 查分系統(tǒng)
3.1.1 功能需求
系統(tǒng)正式開放前,使用靜態(tài)頁面index.html發(fā)布提示信息給考生,查分系統(tǒng)正式開放后,由信息輸入index.php、分?jǐn)?shù)輸出out.php兩個(gè)動(dòng)態(tài)頁面組成,考生在信息輸入動(dòng)態(tài)頁面提供座位號(hào)、身份證號(hào)、驗(yàn)證碼,分?jǐn)?shù)輸出動(dòng)態(tài)頁面根據(jù)考生輸入的信息從數(shù)據(jù)庫中查出成績(jī)返回給考生。
3.3 軟硬件數(shù)量
防火墻的HTTP最大并發(fā)數(shù)決定了查分系統(tǒng)的HTTP最大并發(fā)數(shù)為1.02萬。
在對(duì)單臺(tái)服務(wù)器進(jìn)行HTTP最大并發(fā)數(shù)測(cè)量時(shí),數(shù)據(jù)庫查詢引起的Oracle數(shù)據(jù)庫使用率最大約為3%,4臺(tái)查分服務(wù)器同時(shí)運(yùn)行引起的數(shù)據(jù)庫服務(wù)器使用率為12%,使用1臺(tái)Oracle數(shù)據(jù)庫服務(wù)器即可,不需要使用Oralce RAC數(shù)據(jù)庫。
查分系統(tǒng)以增加查分服務(wù)器數(shù)量為代價(jià)使用HTTP壓縮傳輸,將互聯(lián)網(wǎng)帶寬的需求減小為未壓縮前的1/3左右,HTTP最大并發(fā)數(shù)時(shí)所需的帶寬約為1.02萬×5K字節(jié)×8÷3=136Mbits,所以系統(tǒng)需使用2條電信百兆寬帶,移動(dòng)、聯(lián)通、教育科研網(wǎng)寬帶各1條,教育科研網(wǎng)、移動(dòng)、聯(lián)通的寬帶用戶少,預(yù)計(jì)各寬帶的帶寬可滿足實(shí)際需要。
3.4 運(yùn)行效果
4 結(jié)束語
本文設(shè)計(jì)的高并發(fā)Web系統(tǒng)架構(gòu),主要基于Linux/Nginx/PHP等自由軟件,可根據(jù)硬件配置靈活調(diào)整運(yùn)行參數(shù),HTTP并發(fā)數(shù)的測(cè)量和監(jiān)控方法簡(jiǎn)單可行,HTTP最大并發(fā)數(shù)使系統(tǒng)軟硬件的配置和優(yōu)化具有明確方向,可供各類高并發(fā)Web系統(tǒng)建設(shè)時(shí)參考。
參考文獻(xiàn):
[1] 李軍.高并發(fā)Web系統(tǒng)的設(shè)計(jì)與優(yōu)化[D].北京:北京交通大學(xué),2009.
[2] 張宴.實(shí)戰(zhàn)Nginx:取代Apache的高性能Web服務(wù)器[M].北京:電子工業(yè)出版社,2010.
[3] 何斌斌,周恩浩,張波,等.基于Cacti 的校園網(wǎng)絡(luò)監(jiān)控[J].科技信息,2009(23):60-61.
[4] 趙佳,趙銘,李昌華.分級(jí)網(wǎng)格服務(wù)的Apache ab 測(cè)試分析[J].電子設(shè)計(jì)工程,2009,17(3):22-24.
[5] 陶利軍.決戰(zhàn)Nginx系統(tǒng)卷——高性能Web服務(wù)器詳解與運(yùn)維[M].北京:清華大學(xué)出版社,2012.
[6] Nemeth E,Snyder G,Hein T R.Linux系統(tǒng)管理技術(shù)手冊(cè)[M].2版.北京:人民郵電出版社,2008.
[7] 梁明剛,陳西曲.Linux下基于epoll+線程池高并發(fā)服務(wù)器實(shí)現(xiàn)研究[J].武漢工業(yè)學(xué)院學(xué)報(bào),2012,31(3):54-59.
[8] Albitz P,Liu C.DNS與BIND[M].4版.北京:中國電力出版社,2002:309-314.
[9] php.net.PHP Data Objects[EB/OL].(2012)[2012-05-08].http://php.net/manual/en/book.pdo.php.
[10] 潘偉.ORACLE SGA的性能優(yōu)化[J].中國水運(yùn),2009,9(6):117-118.