簡(jiǎn)述:優(yōu)化思路淺析要優(yōu)化Web服務(wù)器的性能,我們先來看看Web服務(wù)器在web頁面處理上的步驟:1、Web瀏覽器向一個(gè)特定的服務(wù)器發(fā)出Web頁面請(qǐng)求;2、Web服務(wù)器接收到web頁面請(qǐng)求后,尋找所請(qǐng)求的web頁面,并將所請(qǐng)求的Web頁面?zhèn)魉徒oWeb
優(yōu)化思路分析
要優(yōu)化Web先來看看服務(wù)器的性能。Web服務(wù)器在web頁面處理步驟:
1、Web瀏覽器向特定的服務(wù)器發(fā)送Web頁面請(qǐng)求;
2、Web接收服務(wù)器web頁面請(qǐng)求后,找到請(qǐng)求web頁面,請(qǐng)求Web頁面?zhèn)魉徒oWeb瀏覽器;
3、Web瀏覽器接收到所請(qǐng)求的web并顯示頁面內(nèi)容。
以上三個(gè)步驟都是相關(guān)的Web但實(shí)際上,服務(wù)器Web與服務(wù)器性能相關(guān)的最大步驟是第二步Web來自瀏覽器要求的服務(wù)器需要找到服務(wù)器Web頁面內(nèi)容。
我們知道,Web頁面內(nèi)容有靜態(tài)、動(dòng)態(tài)、靜態(tài)內(nèi)容,web服務(wù)器可以直接將結(jié)果發(fā)回瀏覽器。對(duì)于動(dòng)態(tài)內(nèi)容,通常需要先交給應(yīng)用服務(wù)器進(jìn)行處理,然后由應(yīng)用服務(wù)器返回結(jié)果。
當(dāng)然,也有Web例如,服務(wù)器本身可以處理動(dòng)態(tài)內(nèi)容IIS可自行解釋處理ASP,ASP.NET這兩種微軟的動(dòng)態(tài)網(wǎng)頁腳本語言。
從以上簡(jiǎn)要分析可以大致得出這樣的結(jié)論,影響Web影響頁面訪問的因素如下:
1、Web服務(wù)器從磁盤中讀取靜態(tài)頁面內(nèi)容的速度,即時(shí)間;
2、Web服務(wù)器確定請(qǐng)求內(nèi)容是靜態(tài)的還是動(dòng)態(tài)的;
3、Web向應(yīng)用服務(wù)器轉(zhuǎn)發(fā)服務(wù)器請(qǐng)求的時(shí)間;
應(yīng)用服務(wù)器處理(解釋)動(dòng)態(tài)內(nèi)容所需的時(shí)間;
5、Web服務(wù)器返回Web內(nèi)容給瀏覽器響應(yīng)時(shí)間;
6、Web瀏覽器要求的處理性能接收服務(wù)器;
7、Web在網(wǎng)絡(luò)上傳輸訪問請(qǐng)求數(shù)據(jù)的時(shí)間:從瀏覽器到服務(wù)器,從服務(wù)器到瀏覽器;
8.瀏覽器本地計(jì)算和渲染W(wǎng)eb內(nèi)容的時(shí)間,即接收內(nèi)容后顯示內(nèi)容的時(shí)間。
上面8項(xiàng)很容易理解,也很直接,其實(shí)還有以下幾項(xiàng)也是關(guān)乎Web您可以考慮頁面訪問速度體驗(yàn)的因素嗎?或者是否會(huì)影響頁面訪問性能。
Web服務(wù)器執(zhí)行安全戰(zhàn)略檢查的時(shí)間或性能;
Web服務(wù)器讀取日志文件,編寫日志內(nèi)容,關(guān)閉日志文件訪問時(shí)間,先讀后寫,然后關(guān)閉。這三個(gè)步驟中的讀寫涉及磁盤訪問性能因素;
同時(shí)與Web服務(wù)器連接會(huì)話的客戶端數(shù)量,即并發(fā)訪問量。
我們可以抽象上述影響因素,即:
1、Web服務(wù)器磁盤性能;
2、Web與應(yīng)用服務(wù)器交互的性能;
3.應(yīng)用服務(wù)器處理動(dòng)態(tài)內(nèi)容或動(dòng)態(tài)內(nèi)容應(yīng)用的性能;
4、客戶端與Web服務(wù)器的連接速度,即網(wǎng)絡(luò)傳輸性能;
5、Web解釋和渲染瀏覽器Web內(nèi)容性能;
6、Web并發(fā)性能訪問。
它反映了我們的性能優(yōu)化,可以從以下角度開始:
1.增加帶寬,包括服務(wù)器和客戶端的兩側(cè)Internet連接帶寬;
加快處理動(dòng)態(tài)內(nèi)容的性能;
3.盡可能多地使用靜態(tài)內(nèi)容,這樣Web服務(wù)器可以直接使用服務(wù)器,無需要求。Web內(nèi)容發(fā)送到瀏覽器端,這里可以開始的方案有:
緩存動(dòng)態(tài)內(nèi)容
動(dòng)態(tài)內(nèi)容靜態(tài)化
多臺(tái)服務(wù)器負(fù)載均衡,同時(shí)處理大量并發(fā)訪問;
通常稱為提高服務(wù)器磁盤的訪問性能I/O性能;
在網(wǎng)頁中減少HTTP請(qǐng)求數(shù);
更換性能更好的Web服務(wù)器;
服務(wù)器的合理部署和服務(wù)器的部署已被證明能夠顯著提高訪問性能。
性能優(yōu)化實(shí)踐
通過對(duì)前一節(jié)的簡(jiǎn)要分析,我相信你會(huì)優(yōu)化它Web服務(wù)器有一定的想法,可以從硬件、軟件、Web優(yōu)化代碼三個(gè)層次。
下面我們結(jié)合一個(gè)具體的例子來練習(xí),本文的例子是一個(gè)小例子Web網(wǎng)站,一些數(shù)據(jù)是假設(shè)的,如果有類似的,純粹是巧合,只有拋磚引玉。在實(shí)際工作中,如果遇到大網(wǎng)站,可以參考這里的分析,修改優(yōu)化方案。
1.站點(diǎn)簡(jiǎn)介
社區(qū)論壇網(wǎng)站采用Discuz!論壇程序構(gòu)建,采用主流PHP MySQL組成。
目前網(wǎng)站注冊(cè)用戶近5萬,大部分是國(guó)內(nèi)用戶,活躍用戶約一半,平均每天PV在15~獨(dú)立訪問20萬IP數(shù)在8000左右。
2.Web優(yōu)化服務(wù)器性能要求
該網(wǎng)站現(xiàn)在部署在國(guó)外的服務(wù)器上,租用虛擬主機(jī)進(jìn)行操作。由于訪問量相對(duì)較大,虛擬主機(jī)服務(wù)提供商經(jīng)常收到大量流量通知,需要控制訪問量。
此外,在美國(guó),虛擬主機(jī)服務(wù)器沒有在中國(guó)租用虛擬主機(jī)的原因是國(guó)內(nèi)網(wǎng)站的備案非常繁瑣。在網(wǎng)站運(yùn)行開始時(shí),數(shù)據(jù)量和訪問量相對(duì)較小,因此性能要求較低,數(shù)據(jù)量較小。因此,服務(wù)器在查詢和處理數(shù)據(jù)時(shí)速度相對(duì)較快,也讓人覺得訪問速度不慢,現(xiàn)在隨著數(shù)據(jù)量和訪問量的不斷增加,訪問速度顯著下降,是時(shí)候提高訪問性能了。
根據(jù)社區(qū)網(wǎng)站的現(xiàn)狀,提出的優(yōu)化要求是國(guó)內(nèi)訪問速度需要翻倍。目前,主頁加載時(shí)間約為40秒。我希望主頁能在優(yōu)化后20秒內(nèi)加載。
此外,建議網(wǎng)站數(shù)據(jù)每天自動(dòng)備份一次,備份數(shù)據(jù)保留一個(gè)月,以便隨時(shí)恢復(fù)。
第一個(gè)是性能優(yōu)化需求,第二個(gè)是額外的需求。
3.性能優(yōu)化方案
根據(jù)網(wǎng)站的現(xiàn)狀和優(yōu)化需求,結(jié)合自己的經(jīng)驗(yàn)和谷歌的搜索,不斷與網(wǎng)站所有者確認(rèn)和溝通,最終獲得以下性能優(yōu)化方案:
從虛擬主機(jī)部署到獨(dú)立服務(wù)器部署
虛擬主機(jī)更有限,無法定制自己的配置Web無法配置服務(wù)器PHP動(dòng)態(tài)緩存,獨(dú)立服務(wù)器可以享受內(nèi)存和處理器資源,不再受虛擬主機(jī)用戶內(nèi)存和處理器資源占用的限制。處理器資源和內(nèi)存資源可以直接提高更多并發(fā)訪問的性能。
我們選擇獨(dú)立服務(wù)器Linode2048型號(hào),2G內(nèi)存,4核處理器(Linode所有VPS都是四核處理器),80G硬盤空間,800G網(wǎng)絡(luò)流量。
由Windows操作系統(tǒng)改為L(zhǎng)inux操作系統(tǒng)
網(wǎng)站使用PHP MySQL程序,PHP在Windows性能有限IIS需要通過ISAPI形式調(diào)用PHP,所以性能不如Linux下Apache直接通過PHP模塊解釋PHP,更不如Nginx與PHP-FPM由于使用了獨(dú)立的服務(wù)器,操作系統(tǒng)也可以自行確定,Linux我們選擇了熟悉的系統(tǒng)UbuntuLinuxServer10.04(一年前沒有12.04),^-^。
Web服務(wù)器采用Nginx,而不使用Apache
選用Nginx而不用Apache原因非常直接和簡(jiǎn)單,因?yàn)榫W(wǎng)站上有許多靜態(tài)附件文件,在處理靜態(tài)內(nèi)容時(shí),Nginx性能是Apache差不多10倍。
在PHP在解釋和偽靜態(tài)規(guī)則方面,Apache要比Nginx但這并不影響我們放棄它。為了緩解這一點(diǎn),我們將面對(duì)它PHP動(dòng)態(tài)緩存。
對(duì)PHP動(dòng)態(tài)緩存查詢,使用eAccelerator這個(gè)加速器
PHP為了改進(jìn)加速器PHP執(zhí)行效率,從而緩存PHP這樣的操作碼PHP以后執(zhí)行不需要分析轉(zhuǎn)換,可以直接調(diào)用PHP操作碼,所以速度提高了很多。
eAccelerator是一個(gè)開源PHP加速器、優(yōu)化和動(dòng)態(tài)內(nèi)容緩存改進(jìn)PHP腳本的緩存性能使PHP在編譯狀態(tài)下,腳本幾乎完全消除了服務(wù)器的成本。它還可以優(yōu)化腳本,以提高其執(zhí)行效率。PHP程序代碼執(zhí)效率可以提高1-10倍,這是非常明顯的。
具體來說,我們的計(jì)劃是正確的eAccelerator優(yōu)化以下設(shè)置:
緩存使用物理內(nèi)存,而不是磁盤。我們知道內(nèi)存的讀寫性能是硬盤的N倍,因此強(qiáng)烈建議在可以安排內(nèi)存資源時(shí)使用內(nèi)存進(jìn)行保存eAccelerator緩存內(nèi)容。
緩存大小設(shè)置為32MB,默認(rèn)情況下,該值是操作系統(tǒng)支持的最大緩存容量。值可以通過修改配置文件來增加,但我們認(rèn)為沒有必要,所以我們放棄了。
Nginx性能優(yōu)化
選用了Nginx,雖然它的性能很好,但我們?nèi)匀恍枰獌?yōu)化它的性能。在這種情況下,我們做了以下優(yōu)化:
使用8個(gè)過程,每個(gè)過程大約需要20個(gè)M這里共使用了150個(gè)內(nèi)存消耗M左右內(nèi)存。
充分使用主服務(wù)器的CPU內(nèi)核:四核,使用CPU粘性配置選項(xiàng)(worker_cpu_affinity),每個(gè)核處理器分配兩個(gè)過程。
開啟gzip壓縮功能:gzip壓縮對(duì)JS,CSS,XML對(duì)圖片文件,JPG其壓縮性能較低。
圖片本地緩存1天:網(wǎng)站上有很多圖片。通常一張圖片上傳后不會(huì)頻繁修改,只會(huì)頻繁訪問,所以把圖片放在網(wǎng)站上。Nginx在緩存中,可以減少服務(wù)器訪問加載次數(shù),提高訪問速度。
JS、CSS文件本地緩存7天:這兩種網(wǎng)頁文件通常不會(huì)修改。緩存可以減少加載次數(shù),提高訪問速度??紤]到不同文件的不同修改頻率,為什么這兩種文件沒有與圖片一起設(shè)置緩存有效期。
Nginx日志每天切割一次:這個(gè)優(yōu)化項(xiàng)能大大降低Nginx經(jīng)過一周的查看,日志文件的大小是每天50份M大約,如果不是每天切割,每月切割,那個(gè)月的日志文件是幾個(gè)G,要Web當(dāng)服務(wù)器在內(nèi)存中加載如此大的文件時(shí),如果系統(tǒng)本身的內(nèi)存不夠,磁盤自然會(huì)被用來緩存,這會(huì)影響性能。每天50M左右,在內(nèi)存上完全可以順利加載,這樣Nginx訪問日志可以在處理訪問時(shí)快速保存。
通過以上優(yōu)化項(xiàng)目,Nginx這里需要占用2000M左右內(nèi)存資源。
對(duì)PHPCGI優(yōu)化工藝性能
Nginx沒有PHP所以模塊是對(duì)的PHP支持是通過的PHP-FPM來實(shí)現(xiàn)的,PHP-FPM在這種情況下,我們配置了20個(gè)過程,每個(gè)過程幾乎占20個(gè)M一共4000左右的內(nèi)存資源M左右。
同時(shí),PHP-FPM與Nginx選擇交互機(jī)制LinuxSocket模式而不是TCP協(xié)議端口,Socks是系統(tǒng)級(jí)處理模式,socks也就是一個(gè)文件連接,而TCP協(xié)議端口需要網(wǎng)絡(luò)協(xié)議處理,性能不如前者,所以我們選擇了前者。
MySQL優(yōu)化數(shù)據(jù)庫性能
由于網(wǎng)站的主程序是由他人開發(fā)的開源程序,我們無法處理數(shù)據(jù)庫查詢的程序優(yōu)化,只能從MySQL尋找突破本身。
我們可以想象,對(duì)于論壇網(wǎng)站來說,閱讀和查看帖子的訪問量通常遠(yuǎn)遠(yuǎn)大于創(chuàng)建和回復(fù)帖子的訪問量MySQL在數(shù)據(jù)庫中,讀表與查詢表數(shù)據(jù)的連接處理更多。
因此,結(jié)合以往的知識(shí),我們應(yīng)該選擇對(duì)讀表、查詢性能更好的存儲(chǔ)引擎,MySQL缺省的MyISAM引擎是一個(gè)適合處理閱讀頻率遠(yuǎn)大于寫作頻率的環(huán)境,查詢效率相當(dāng)可觀,內(nèi)存占用很少,這也與我們租用低內(nèi)存配置有關(guān)VPS相符。
具體到MySQL在配置參數(shù)的優(yōu)化方面,由于服務(wù)器上內(nèi)存資源本身有限,缺失的中型環(huán)境配置文件直接使用。
網(wǎng)絡(luò)應(yīng)用的內(nèi)容分發(fā)
每天站每天訪問超過10萬人,數(shù)萬人獨(dú)立IP訪問,查看以前的訪問統(tǒng)計(jì)數(shù)據(jù),訪問中國(guó)各地區(qū),使用各種網(wǎng)絡(luò)連接訪問,為了確保用戶訪問速度,但也減少對(duì)網(wǎng)站服務(wù)器的要求,我們使用CDN分發(fā)靜態(tài)內(nèi)容,讓來自世界各地的用戶存CDN上的文件,CDN當(dāng)?shù)谝淮卧L問靜態(tài)內(nèi)容時(shí),服務(wù)提供商將緩存到全國(guó)各地的服務(wù)器上。當(dāng)?shù)诙卧L問時(shí),用戶實(shí)際上沒有連接到網(wǎng)站服務(wù)器以獲取文件,而是直接從CDN在服務(wù)器上獲取可以顯著提高網(wǎng)站的性能。
騰佑科技(www.mubashirfilms.com)成立于2009年,總部位于河南鄭州,是一家集互聯(lián)網(wǎng)基礎(chǔ)設(shè)施及軟硬件于一體化的高新技術(shù)企業(yè),具有IDC/ISP/ICP/云牌照、雙軟等資質(zhì),并擁有多個(gè)國(guó)家版權(quán)局認(rèn)證。公司自成立以來,一直致力于發(fā)展互聯(lián)網(wǎng)IDC數(shù)據(jù)中心DataCenter、云計(jì)算Cloud、大數(shù)據(jù)BigDate、人工智能AI、內(nèi)容加速CDN、互聯(lián)網(wǎng)安全、軟件定制開發(fā)等產(chǎn)品服務(wù)及行業(yè)客戶技術(shù)一體化智能解決方案;2018年成為百度智能云AI河南服務(wù)中心。
售前咨詢熱線:400-996-8756
備案提交:0371-89913068
售后客服:0371-89913000
搜索詞
熱門產(chǎn)品推薦