優(yōu)化思路淺析
公司主營(yíng)業(yè)務(wù):網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出麗水免費(fèi)做網(wǎng)站回饋大家。要優(yōu)化 Web 服務(wù)器的性能,我們先來看看 Web 服務(wù)器在 web 頁(yè)面處理上的步驟:成都服務(wù)器托管
1. Web 瀏覽器向一個(gè)特定的服務(wù)器發(fā)出 Web 頁(yè)面請(qǐng)求; 2. Web 服務(wù)器接收到 web 頁(yè)面請(qǐng)求后,尋找所請(qǐng)求的 web 頁(yè)面,并將所請(qǐng)求的 Web 頁(yè)面?zhèn)魉徒o Web 瀏覽器; 3. Web 瀏覽器接收到所請(qǐng)求的 web 頁(yè)面內(nèi)容,并將它顯示出來。
上面三個(gè)步驟都關(guān)系 Web 服務(wù)器,但實(shí)際 Web 服務(wù)器性能相關(guān)大的是在第 2 步,這里 Web 服務(wù)器需要尋找來自瀏覽器所請(qǐng)求的 Web 頁(yè)面內(nèi)容。
我們知道,Web 頁(yè)面內(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ù)器先處理,由應(yīng)用服務(wù)器返回結(jié)果。
當(dāng)然,也有 Web 服務(wù)器本身可以處理動(dòng)態(tài)內(nèi)容的,例如 IIS 就可以自已解釋處理 ASP, ASP.NET 這兩種微軟的動(dòng)態(tài)網(wǎng)頁(yè)腳本語(yǔ)言。
從上面簡(jiǎn)要的分析里,我們大致可以得到這樣的結(jié)論,影響 Web 頁(yè)面訪問的影響因素會(huì)有這幾個(gè):成都服務(wù)器托管
Web 服務(wù)器從磁盤中讀取靜態(tài)頁(yè)面內(nèi)容的速度,也即時(shí)間;
Web 服務(wù)器判定請(qǐng)求內(nèi)容是靜態(tài)還是動(dòng)態(tài)內(nèi)容的時(shí)間;
Web 服務(wù)器轉(zhuǎn)發(fā)請(qǐng)求給應(yīng)用服務(wù)器的時(shí)間;
應(yīng)用服務(wù)器處理(解釋)動(dòng)態(tài)內(nèi)容所需的時(shí)間;
Web 服務(wù)器返回 Web 內(nèi)容給瀏覽器的響應(yīng)時(shí)間;
Web 服務(wù)器接收來自瀏覽器請(qǐng)求的處理性能;
Web 訪問請(qǐng)求數(shù)據(jù)在網(wǎng)絡(luò)上傳輸?shù)臅r(shí)間:包括從瀏覽器到服務(wù)器,和從服務(wù)器到瀏覽器兩部分;
瀏覽器本地計(jì)算和渲染 Web 內(nèi)容的時(shí)間,即接收內(nèi)容后展現(xiàn)內(nèi)容的時(shí)間。
上面 8 項(xiàng)很容易理解,也很直接,其實(shí)還有以下幾項(xiàng)也是關(guān)乎 Web 頁(yè)面訪問速度體驗(yàn)的因素,你可以思考下是否如此?或者說是否會(huì)影響到頁(yè)面訪問性能。
Web 服務(wù)器執(zhí)行安全策略檢查的時(shí)間,或者說性能;
Web 服務(wù)器讀取日志文件、寫日志內(nèi)容、關(guān)閉對(duì)日志文件訪問的時(shí)間,先讀后寫再關(guān)閉,這三步中的讀與寫又涉及到磁盤訪問性能因素;
同時(shí)與 Web 服務(wù)器連接會(huì)話的客戶端數(shù)量大小,即并發(fā)訪問量多大。
我們可以將上面一共 11 項(xiàng)影響因素抽像出來,那么就是:成都服務(wù)器托管
Web 服務(wù)器磁盤性能;
Web 服務(wù)器與應(yīng)用服務(wù)器交互的性能;
應(yīng)用服務(wù)器處理動(dòng)態(tài)內(nèi)容的性能,或者說動(dòng)態(tài)內(nèi)容應(yīng)用處理性能;
客戶端與 Web 服務(wù)器的連接速度,即網(wǎng)絡(luò)傳輸性能;
Web 瀏覽器解釋和渲染 Web 內(nèi)容的性能;
Web 訪問并發(fā)性能。
反映到我們進(jìn)行性能優(yōu)化,可以入手的角度就有:成都服務(wù)器托管
增加帶寬,包括服務(wù)器和客戶端兩邊的 Internet 連接帶寬;
加快動(dòng)態(tài)內(nèi)容的處理性能;
盡可能多地使用靜態(tài)內(nèi)容,這樣 Web 服務(wù)器就可以無需請(qǐng)求應(yīng)用服務(wù)器,直接將 Web 內(nèi)容發(fā)給瀏覽器端,這里可以入手的方案又有:成都服務(wù)器托管
動(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)頁(yè)中的 HTTP 請(qǐng)求數(shù);
更換更好性能的 Web 服務(wù)器;
合理部署服務(wù)器,在離客戶端更近的地方部署服務(wù)器,已經(jīng)證明可以明顯地提升訪問性能。
性能優(yōu)化實(shí)踐
經(jīng)過前面小節(jié)的簡(jiǎn)要分析,我相信你對(duì)優(yōu)化 Web 服務(wù)器有一定的思路了,你可以從硬件層面、軟件層面、Web 代碼三個(gè)層面去優(yōu)化。
下面我們結(jié)合一個(gè)具體的實(shí)例來實(shí)踐一回,本文所舉例是一個(gè)小型的 Web 站點(diǎn),部分?jǐn)?shù)據(jù)系假設(shè),如有類同,純屬巧合,僅起拋磚引玉之用。在實(shí)際工作中,如果碰到大站點(diǎn),你可以參考此處的分析,修改優(yōu)化方案。
1. 站點(diǎn)簡(jiǎn)介
一個(gè)社區(qū)論壇站點(diǎn),采用 Discuz! 論壇程序構(gòu)建,該程序采用主流的 PHP + MySQL 組成。
網(wǎng)站目前有近 5 萬注冊(cè)用戶,絕大多數(shù)是國(guó)內(nèi)的用戶,活躍用戶數(shù)在一半左右,每天平均 PV 在 15~20 萬,獨(dú)立訪問 IP 數(shù)在 8000 左右。
2. Web 服務(wù)器性能優(yōu)化需求
網(wǎng)站現(xiàn)部署在國(guó)外的服務(wù)器,租用虛擬主機(jī)來運(yùn)營(yíng),因?yàn)樵L問量比較大,所以經(jīng)常會(huì)收到虛擬主機(jī)服務(wù)商的流量很大的通知,要求控制下訪問量。
另外,虛擬主機(jī)的服務(wù)器在美國(guó),沒有在國(guó)內(nèi)租用虛擬主機(jī)的原因是國(guó)內(nèi)網(wǎng)站在備案方面非常繁瑣,在網(wǎng)站一開始運(yùn)營(yíng)時(shí)數(shù)據(jù)量和訪問量都比較小,所以對(duì)性能要求不高,數(shù)據(jù)量小,所以服務(wù)器在查詢處理數(shù)據(jù)時(shí)速度比較快,也讓人感覺訪問速度不慢,現(xiàn)在隨著數(shù)據(jù)量和訪問量的不斷上升,訪問速度已明顯下降,到了需要改善訪問性能的時(shí)候了。成都網(wǎng)站建設(shè)公司
基于目前該社區(qū)網(wǎng)站的情況,提出的優(yōu)化需求是,國(guó)內(nèi)訪問速度需要提升一倍,目前首頁(yè)加載時(shí)間需要 40 秒左右,希望優(yōu)化后能在 20 秒以內(nèi)將首頁(yè)加載完成。
另外提出網(wǎng)站數(shù)據(jù)能夠每天自動(dòng)備份一次,備份數(shù)據(jù)保留一個(gè)月的,以便隨時(shí)恢復(fù)。
上述兩點(diǎn)需求,其中第一條才是性能優(yōu)化需求,第二條是額外的需求了。成都網(wǎng)站建設(shè)公司
3. 性能優(yōu)化方案
根據(jù)其網(wǎng)站的現(xiàn)狀和優(yōu)化需求,結(jié)合自己的經(jīng)驗(yàn),加上谷歌的搜索,同時(shí)與網(wǎng)站主不斷確認(rèn)溝通,最終得到以下性能優(yōu)化方案:成都服務(wù)器托管
由虛擬主機(jī)部署改為獨(dú)立服務(wù)器部署
虛擬主機(jī)受限比較多,無法自己自定義配置 Web 服務(wù)器,無法配置 PHP 動(dòng)態(tài)緩存,而且獨(dú)立服務(wù)器可以獨(dú)享內(nèi)存、處理器資源,不再受虛擬主機(jī)商對(duì)每個(gè)虛擬主機(jī)用戶的內(nèi)存和處理器資源占用限制。處理器資源和內(nèi)存資源,對(duì)接受更多并發(fā)訪問有直接性能提升效果。
獨(dú)立服務(wù)器,我們選用 Linode 2048 型號(hào),2G 內(nèi)存,4 核處理器(Linode 所有 VPS 都是四核處理器),80G 硬盤空間,800G 網(wǎng)絡(luò)流量。
由 Windows 操作系統(tǒng)改為 Linux 操作系統(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)我們選用了熟悉的 Ubuntu Linux Server 10.04(一年前還沒有 12.04),^-^。
Web 服務(wù)器采用 Nginx,而不使用 Apache
選用 Nginx 而不用 Apache 的原因非常直接和干脆,因?yàn)檎军c(diǎn)里有很多靜態(tài)的附件文件,在處理靜態(tài)內(nèi)容上,Nginx 性能是 Apache 的差不多 10 倍。
在 PHP 解釋和偽靜態(tài)規(guī)則方面,Apache 要比 Nginx 強(qiáng),但這不影響我們放棄它,為緩解這一點(diǎn),我們?cè)诤竺鎸?duì) PHP 進(jìn)行了動(dòng)態(tài)緩存。
對(duì) PHP 查詢進(jìn)行動(dòng)態(tài)緩存,使用 eAccelerator 這個(gè)加速器
PHP 加速器是一個(gè)為了提高 PHP 執(zhí)行效率,從而緩存起 PHP 的操作碼,這樣 PHP 后面執(zhí)行就不用解析轉(zhuǎn)換了,可以直接調(diào)用 PHP 操作碼,這樣速度上就提高了不少。
eAccelerator 是一個(gè)開源 PHP 加速器,優(yōu)化和動(dòng)態(tài)內(nèi)容緩存,提高了 PHP 腳本的緩存性能,使得 PHP 腳本在編譯的狀態(tài)下,對(duì)服務(wù)器的開銷幾乎完全消除。 它還有對(duì)腳本起優(yōu)化作用,以加快其執(zhí)行效率。使得的 PHP 程序代碼執(zhí)效率能提高 1-10 倍,這個(gè)加速還是非常明顯的。
具體地,我們計(jì)劃對(duì) eAccelerator 進(jìn)行以下設(shè)置優(yōu)化:成都服務(wù)器托管
緩存使用物理內(nèi)存來進(jìn)行,不使用磁盤來緩存。我們知道內(nèi)存的讀寫性能是硬盤的 N 倍,所以在內(nèi)存資源可以安排情況下,強(qiáng)烈建議使用內(nèi)存來保存 eAccelerator 的緩存內(nèi)容。
緩存大小設(shè)置為 32MB,這個(gè)值是操作系統(tǒng)默認(rèn)支持大的緩存容量。雖然可以通過修改配置文件來加大這個(gè)值,但我們覺得沒有必要,所以就放棄了。成都網(wǎng)站建設(shè)公司
Nginx 性能優(yōu)化
選用了 Nginx,雖然它的性能很好,但我們?nèi)匀恍枰獙?duì)它進(jìn)行性能優(yōu)化,在這個(gè)案例中,我們做了以下優(yōu)化:成都服務(wù)器托管
使用 8 個(gè)進(jìn)程,每個(gè)進(jìn)程大約需要 20M 內(nèi)存消耗,這里一共使用了 150M 左右的內(nèi)存。
充分使用主服務(wù)器的 CPU 內(nèi)核:四核,使用 CPU 粘性配置選項(xiàng)(worker_cpu_affinity),每核處理器分配兩個(gè)進(jìn)程。
開啟 gzip 壓縮功能:gzip 壓縮對(duì) JS, CSS, XML 壓縮效果非常好,能壓縮一半,即減少一倍的傳輸時(shí)間;對(duì)圖片文件,JPG 已經(jīng)壓縮過的,它的壓縮性能要少一些。
圖片本地緩存 1 天:網(wǎng)站上的圖片很多,通常一張圖片上傳后,不會(huì)頻繁的修改,只會(huì)頻繁的訪問,所以將圖片放在 Nginx 緩存里,可以減少服務(wù)器訪問加載次數(shù),提升訪問速度。
JS、CSS 文件本地緩存 7 天:這兩種網(wǎng)頁(yè)文件,平時(shí)都不會(huì)去修改它,將它緩存起來,可以減少加載次數(shù),提升訪問速度。為什么這兩種文件不和圖片一起設(shè)置緩存有效期,是考慮了不同文件的修改頻率不一樣。
Nginx 日志每天切割一次:這個(gè)優(yōu)化項(xiàng)能大大減小 Nginx 日志文件的大小,經(jīng)過一周的查看,每天的日志文件是 50M 左右,如果不是每天切割,用月切割,那一個(gè)月的日志文件就是幾個(gè) G,要 Web 服務(wù)器在內(nèi)存里加載這么大的文件,系統(tǒng)本身內(nèi)存不夠用,就自然會(huì)用到磁盤來緩存,這就影響性能。每天 50M 左右,在內(nèi)存上完全可以順利加載,這樣 Nginx 在處理訪問時(shí),可以快速的保存訪問日志。
經(jīng)過上述幾個(gè)優(yōu)化項(xiàng)目,Nginx 這邊一共需要占用 200M 左右內(nèi)存資源。
對(duì) PHP CGI 進(jìn)程性能進(jìn)行優(yōu)化
Nginx 沒有 PHP 模塊,所以它對(duì) PHP 的支持是通過 PHP-FPM 來實(shí)現(xiàn)的,PHP-FPM 是跑進(jìn)程來處理并發(fā)請(qǐng)求,在這個(gè)案例中,我們配置了 20 個(gè)進(jìn)程,每個(gè)進(jìn)程差不多占用 20M 左右內(nèi)存資源,一共是 400M 左右。
同時(shí),PHP-FPM 與 Nginx 交互機(jī)制,選用 Linux Socket 模式而不是 TCP 協(xié)議端口,Socks 是系統(tǒng)級(jí)處理模式,socks 也就是一個(gè)文件連接,而 TCP 協(xié)議端口,需要經(jīng)過網(wǎng)絡(luò)協(xié)議處理,性能不如前者,所以我們選擇了前者。
MySQL 數(shù)據(jù)庫(kù)性能優(yōu)化
因?yàn)榫W(wǎng)站主程序是選用他人開發(fā)的開源程序,所以對(duì)數(shù)據(jù)庫(kù)查詢的程序優(yōu)化我們無法處理,只能從 MySQL 本身尋找突破口。成都機(jī)柜租用
我們可以想像一下,對(duì)于論壇網(wǎng)站,通??促N、查貼的訪問量要遠(yuǎn)大于創(chuàng)建貼子、回復(fù)貼子的訪問量,體現(xiàn)在 MySQL 數(shù)據(jù)庫(kù)上,就是讀表與查詢表數(shù)據(jù)的連接處理更多。
因此我們要選擇對(duì)讀表、查詢性能更好的存儲(chǔ)引擎,結(jié)合以前了解的知識(shí),MySQL 缺省的 MyISAM 引擎就是被設(shè)計(jì)為適合處理讀頻率遠(yuǎn)大于寫頻率的環(huán)境,查詢效率相當(dāng)可觀,而且內(nèi)存占用很少,這也與我們租用低內(nèi)存配置的 VPS 相符。
具體到 MySQL 配置參數(shù)的優(yōu)化上,受限于服務(wù)器上內(nèi)存資源本身有限,就直接采用缺省的中型環(huán)境配置文件。
內(nèi)容分發(fā)網(wǎng)絡(luò)應(yīng)用
站點(diǎn)每天十多萬的訪問,上萬獨(dú)立 IP 訪問,查看先前的訪問統(tǒng)計(jì),訪問來自國(guó)內(nèi)各個(gè)地區(qū),使用多種網(wǎng)絡(luò)連接訪問進(jìn)來,為保證來自各網(wǎng)絡(luò)的用戶訪問速度,同時(shí)也減少對(duì)網(wǎng)站服務(wù)器的請(qǐng)求,我們采用了 CDN 來分發(fā)靜態(tài)內(nèi)容,這樣各地的用戶可以就近訪問到已緩存在 CDN 上的文件,CDN 服務(wù)商會(huì)在靜態(tài)內(nèi)容第一次訪問時(shí)緩存到他們?nèi)珖?guó)各地的服務(wù)器上,當(dāng)?shù)诙卧L問時(shí),用戶實(shí)際是沒有連接到網(wǎng)站服務(wù)器上獲取文件的,而是直接從 CDN 服務(wù)器上獲取,可以明顯的提升網(wǎng)站性能。
網(wǎng)站標(biāo)題:Web服務(wù)器性能與站點(diǎn)訪問性能優(yōu)化
新聞來源:http://jinyejixie.com/article16/cjgdg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、響應(yīng)式網(wǎng)站、企業(yè)網(wǎng)站制作、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)