當前位置:首頁 > 公眾號精選 > 21ic電子網(wǎng)
[導讀]優(yōu)化思路淺析 要優(yōu)化 Web 服務(wù)器的性能,我們先來看看 Web 服務(wù)器在 web 頁面處理上的步驟: Web 瀏覽器向一個特定的服務(wù)器發(fā)出 Web 頁面請求; Web 服務(wù)器接收到 web 頁面請求后,尋找所請求的 web 頁面,并將所請求的 Web 頁面?zhèn)魉徒o Web 瀏覽器; Web 瀏覽器

優(yōu)化思路淺析

要優(yōu)化 Web 服務(wù)器的性能,我們先來看看 Web 服務(wù)器在 web 頁面處理上的步驟:

  • Web 瀏覽器向一個特定的服務(wù)器發(fā)出 Web 頁面請求;

  • Web 服務(wù)器接收到 web 頁面請求后,尋找所請求的 web 頁面,并將所請求的 Web 頁面?zhèn)魉徒o Web 瀏覽器;

  • Web 瀏覽器接收到所請求的 web 頁面內(nèi)容,并將它顯示出來。


上面三個步驟都關(guān)系 Web 服務(wù)器,但實際 Web 服務(wù)器性能相關(guān)最大的是在第 2 步,這里 Web 服務(wù)器需要尋找來自瀏覽器所請求的 Web 頁面內(nèi)容。


我們知道,Web 頁面內(nèi)容有靜態(tài)的,也有動態(tài)的,靜態(tài)的內(nèi)容,web 服務(wù)器可以直接將結(jié)果發(fā)回給瀏覽器,對于動態(tài)內(nèi)容,則通常需要交給應(yīng)用服務(wù)器先處理,由應(yīng)用服務(wù)器返回結(jié)果。


當然,也有 Web 服務(wù)器本身可以處理動態(tài)內(nèi)容的,例如 IIS 就可以自已解釋處理 ASP, ASP.NET 這兩種微軟的動態(tài)網(wǎng)頁腳本語言。


從上面簡要的分析里,我們大致可以得到這樣的結(jié)論,影響 Web 頁面訪問的影響因素會有這幾個:

  • Web 服務(wù)器從磁盤中讀取靜態(tài)頁面內(nèi)容的速度,也即時間;

  • Web 服務(wù)器判定請求內(nèi)容是靜態(tài)還是動態(tài)內(nèi)容的時間;

  • Web 服務(wù)器轉(zhuǎn)發(fā)請求給應(yīng)用服務(wù)器的時間;

  • 應(yīng)用服務(wù)器處理(解釋)動態(tài)內(nèi)容所需的時間;

  • Web 服務(wù)器返回 Web 內(nèi)容給瀏覽器的響應(yīng)時間;

  • Web 服務(wù)器接收來自瀏覽器請求的處理性能;

  • Web 訪問請求數(shù)據(jù)在網(wǎng)絡(luò)上傳輸?shù)臅r間:包括從瀏覽器到服務(wù)器,和從服務(wù)器到瀏覽器兩部分;

  • 瀏覽器本地計算和渲染 Web 內(nèi)容的時間,即接收內(nèi)容后展現(xiàn)內(nèi)容的時間。


上面 8 項很容易理解,也很直接,其實還有以下幾項也是關(guān)乎 Web 頁面訪問速度體驗的因素,你可以思考下是否如此?或者說是否會影響到頁面訪問性能。

Web 服務(wù)器執(zhí)行安全策略檢查的時間,或者說性能;


Web 服務(wù)器讀取日志文件、寫日志內(nèi)容、關(guān)閉對日志文件訪問的時間,先讀后寫再關(guān)閉,這三步中的讀與寫又涉及到磁盤訪問性能因素;


同時與 Web 服務(wù)器連接會話的客戶端數(shù)量大小,即并發(fā)訪問量多大。


我們可以將上面一共 11 項影響因素抽像出來,那么就是:

  • Web 服務(wù)器磁盤性能;

  • Web 服務(wù)器與應(yīng)用服務(wù)器交互的性能;

  • 應(yīng)用服務(wù)器處理動態(tài)內(nèi)容的性能,或者說動態(tài)內(nèi)容應(yīng)用處理性能;

  • 客戶端與 Web 服務(wù)器的連接速度,即網(wǎng)絡(luò)傳輸性能;

  • Web 瀏覽器解釋和渲染 Web 內(nèi)容的性能;

  • Web 訪問并發(fā)性能。


反映到我們進行性能優(yōu)化,可以入手的角度就有:

  • 增加帶寬,包括服務(wù)器和客戶端兩邊的 Internet 連接帶寬;

  • 加快動態(tài)內(nèi)容的處理性能;

  • 盡可能多地使用靜態(tài)內(nèi)容,這樣 Web 服務(wù)器就可以無需請求應(yīng)用服務(wù)器,直接將 Web 內(nèi)容發(fā)給瀏覽器端,這里可以入手的方案又有:

  • 動態(tài)內(nèi)容緩存

  • 動態(tài)內(nèi)容靜態(tài)化

  • 多臺服務(wù)器負載均衡同時處理大量的并發(fā)訪問;

  • 提升服務(wù)器磁盤訪問性能,也即通常所說的 I/O 性能;

  • 減少網(wǎng)頁中的 HTTP 請求數(shù);

  • 更換更好性能的 Web 服務(wù)器;

  • 合理部署服務(wù)器,在離客戶端更近的地方部署服務(wù)器,已經(jīng)證明可以明顯地提升訪問性能。


性能優(yōu)化實踐

經(jīng)過前面小節(jié)的簡要分析,我相信你對優(yōu)化 Web 服務(wù)器有一定的思路了,你可以從硬件層面、軟件層面、Web 代碼三個層面去優(yōu)化。


下面我們結(jié)合一個具體的實例來實踐一回,本文所舉例是一個小型的 Web 站點,部分數(shù)據(jù)系假設(shè),如有類同,純屬巧合,僅起拋磚引玉之用。在實際工作中,如果碰到大站點,你可以參考此處的分析,修改優(yōu)化方案。


1. 站點簡介

一個社區(qū)論壇站點,采用 Discuz! 論壇程序構(gòu)建,該程序采用主流的 PHP + MySQL 組成。


網(wǎng)站目前有近 5 萬注冊用戶,絕大多數(shù)是國內(nèi)的用戶,活躍用戶數(shù)在一半左右,每天平均 PV 在 15~20 萬,獨立訪問 IP 數(shù)在 8000 左右。


2. Web 服務(wù)器性能優(yōu)化需求

網(wǎng)站現(xiàn)部署在國外的服務(wù)器,租用虛擬主機來運營,因為訪問量比較大,所以經(jīng)常會收到虛擬主機服務(wù)商的流量很大的通知,要求控制下訪問量。


另外,虛擬主機的服務(wù)器在美國,沒有在國內(nèi)租用虛擬主機的原因是國內(nèi)網(wǎng)站在備案方面非常繁瑣,在網(wǎng)站一開始運營時數(shù)據(jù)量和訪問量都比較小,所以對性能要求不高,數(shù)據(jù)量小,所以服務(wù)器在查詢處理數(shù)據(jù)時速度比較快,也讓人感覺訪問速度不慢,現(xiàn)在隨著數(shù)據(jù)量和訪問量的不斷上升,訪問速度已明顯下降,到了需要改善訪問性能的時候了。


基于目前該社區(qū)網(wǎng)站的情況,提出的優(yōu)化需求是,國內(nèi)訪問速度需要提升一倍,目前首頁加載時間需要 40 秒左右,希望優(yōu)化后能在 20 秒以內(nèi)將首頁加載完成。


另外提出網(wǎng)站數(shù)據(jù)能夠每天自動備份一次,備份數(shù)據(jù)保留一個月的,以便隨時恢復。


上述兩點需求,其中第一條才是性能優(yōu)化需求,第二條是額外的需求了。


3. 性能優(yōu)化方案

根據(jù)其網(wǎng)站的現(xiàn)狀和優(yōu)化需求,結(jié)合自己的經(jīng)驗,加上谷歌的搜索,同時與網(wǎng)站主不斷確認溝通,最終得到以下性能優(yōu)化方案:


由虛擬主機部署改為獨立服務(wù)器部署

虛擬主機受限比較多,無法自己自定義配置 Web 服務(wù)器,無法配置 PHP 動態(tài)緩存,而且獨立服務(wù)器可以獨享內(nèi)存、處理器資源,不再受虛擬主機商對每個虛擬主機用戶的內(nèi)存和處理器資源占用限制。處理器資源和內(nèi)存資源,對接受更多并發(fā)訪問有直接性能提升效果。


由 Windows 操作系統(tǒng)改為 Linux 操作系統(tǒng)

網(wǎng)站使用的是 PHP + MySQL 程序,PHP 在 Windows 下的性能,受限于 IIS 需要通過 ISAPI 形式調(diào)用 PHP,所以性能不如 Linux 下 Apache 直接通過 PHP 模塊解釋 PHP,更不如 Nginx 與 PHP-FPM 的性能,既然使用了獨立服務(wù)器,操作系統(tǒng)也可以自己確定,Linux 系統(tǒng)我們選用了熟悉的 Ubuntu Linux Server 10.04(一年前還沒有 12.04)。


Web 服務(wù)器采用 Nginx,而不使用 Apache

選用 Nginx 而不用 Apache 的原因非常直接和干脆,因為站點里有很多靜態(tài)的附件文件,在處理靜態(tài)內(nèi)容上,Nginx 性能是 Apache 的差不多 10 倍。


在 PHP 解釋和偽靜態(tài)規(guī)則方面,Apache 要比 Nginx 強,但這不影響我們放棄它,為緩解這一點,我們在后面對 PHP 進行了動態(tài)緩存。


對 PHP 查詢進行動態(tài)緩存,使用 eAccelerator 這個加速器

PHP 加速器是一個為了提高 PHP 執(zhí)行效率,從而緩存起 PHP 的操作碼,這樣 PHP 后面執(zhí)行就不用解析轉(zhuǎn)換了,可以直接調(diào)用 PHP 操作碼,這樣速度上就提高了不少。


eAccelerator 是一個開源 PHP 加速器,優(yōu)化和動態(tài)內(nèi)容緩存,提高了 PHP 腳本的緩存性能,使得 PHP 腳本在編譯的狀態(tài)下,對服務(wù)器的開銷幾乎完全消除。它還有對腳本起優(yōu)化作用,以加快其執(zhí)行效率。使得的 PHP 程序代碼執(zhí)效率能提高 1-10 倍,這個加速還是非常明顯的。


具體地,我們計劃對 eAccelerator 進行以下設(shè)置優(yōu)化:

緩存使用物理內(nèi)存來進行,不使用磁盤來緩存。我們知道內(nèi)存的讀寫性能是硬盤的 N 倍,所以在內(nèi)存資源可以安排情況下,強烈建議使用內(nèi)存來保存 eAccelerator 的緩存內(nèi)容。


緩存大小設(shè)置為 32MB,這個值是操作系統(tǒng)默認支持最大的緩存容量。雖然可以通過修改配置文件來加大這個值,但我們覺得沒有必要,所以就放棄了。


Nginx 性能優(yōu)化

選用了 Nginx,雖然它的性能很好,但我們?nèi)匀恍枰獙λM行性能優(yōu)化,在這個案例中,我們做了以下優(yōu)化:

  • 使用 8 個進程,每個進程大約需要 20M 內(nèi)存消耗,這里一共使用了 150M 左右的內(nèi)存。

  • 充分使用主服務(wù)器的 CPU 內(nèi)核:

  • 四核,使用 CPU 粘性配置選項(worker_cpu_affinity),每核處理器分配兩個進程。

  • 開啟 gzip 壓縮功能:

  • gzip 壓縮對 JS, CSS, XML 壓縮效果非常好,能壓縮一半,即減少一倍的傳輸時間;

  • 對圖片文件,JPG 已經(jīng)壓縮過的,它的壓縮性能要少一些。

  • 圖片本地緩存 1 天:

  • 網(wǎng)站上的圖片很多,通常一張圖片上傳后,不會頻繁的修改,只會頻繁的訪問,所以將圖片放在 Nginx 緩存里,可以減少服務(wù)器訪問加載次數(shù),提升訪問速度。

  • JS、CSS 文件本地緩存 7 天:

  • 這兩種網(wǎng)頁文件,平時都不會去修改它,將它緩存起來,可以減少加載次數(shù),提升訪問速度。

  • 為什么這兩種文件不和圖片一起設(shè)置緩存有效期,是考慮了不同文件的修改頻率不一樣。

  • Nginx 日志每天切割一次:

  • 這個優(yōu)化項能大大減小 Nginx 日志文件的大小,經(jīng)過一周的查看,每天的日志文件是 50M 左右,如果不是每天切割,用月切割,那一個月的日志文件就是幾個 G,要 Web 服務(wù)器在內(nèi)存里加載這么大的文件,系統(tǒng)本身內(nèi)存不夠用,就自然會用到磁盤來緩存,這就影響性能。

  • 每天 50M 左右,在內(nèi)存上完全可以順利加載,這樣 Nginx 在處理訪問時,可以快速的保存訪問日志。


經(jīng)過上述幾個優(yōu)化項目,Nginx 這邊一共需要占用 200M 左右內(nèi)存資源。


對 PHP CGI 進程性能進行優(yōu)化

Nginx 沒有 PHP 模塊,所以它對 PHP 的支持是通過 PHP-FPM 來實現(xiàn)的,PHP-FPM 是跑進程來處理并發(fā)請求,在這個案例中,我們配置了 20 個進程,每個進程差不多占用 20M 左右內(nèi)存資源,一共是 400M 左右。


同時,PHP-FPM 與 Nginx 交互機制,選用 Linux Socket 模式而不是 TCP 協(xié)議端口,Socks 是系統(tǒng)級處理模式,socks 也就是一個文件連接,而 TCP 協(xié)議端口,需要經(jīng)過網(wǎng)絡(luò)協(xié)議處理,性能不如前者,所以我們選擇了前者。


MySQL 數(shù)據(jù)庫性能優(yōu)化

因為網(wǎng)站主程序是選用他人開發(fā)的開源程序,所以對數(shù)據(jù)庫查詢的程序優(yōu)化我們無法處理,只能從 MySQL 本身尋找突破口。


我們可以想像一下,對于論壇網(wǎng)站,通??促N、查貼的訪問量要遠大于創(chuàng)建貼子、回復貼子的訪問量,體現(xiàn)在 MySQL 數(shù)據(jù)庫上,就是讀表與查詢表數(shù)據(jù)的連接處理更多。


因此我們要選擇對讀表、查詢性能更好的存儲引擎,結(jié)合以前了解的知識,MySQL 缺省的 MyISAM 引擎就是被設(shè)計為適合處理讀頻率遠大于寫頻率的環(huán)境,查詢效率相當可觀,而且內(nèi)存占用很少,這也與我們租用低內(nèi)存配置的 VPS 相符。


具體到 MySQL 配置參數(shù)的優(yōu)化上,受限于服務(wù)器上內(nèi)存資源本身有限,就直接采用缺省的中型環(huán)境配置文件。


內(nèi)容分發(fā)網(wǎng)絡(luò)應(yīng)用

站點每天十多萬的訪問,上萬獨立 IP 訪問,查看先前的訪問統(tǒng)計,訪問來自國內(nèi)各個地區(qū),使用多種網(wǎng)絡(luò)連接訪問進來,為保證來自各網(wǎng)絡(luò)的用戶訪問速度,同時也減少對網(wǎng)站服務(wù)器的請求,我們采用了 CDN 來分發(fā)靜態(tài)內(nèi)容,這樣各地的用戶可以就近訪問到已緩存在 CDN 上的文件,CDN 服務(wù)商會在靜態(tài)內(nèi)容第一次訪問時緩存到他們?nèi)珖鞯氐姆?wù)器上,當?shù)诙卧L問時,用戶實際是沒有連接到網(wǎng)站服務(wù)器上獲取文件的,而是直接從 CDN 服務(wù)器上獲取,可以明顯的提升網(wǎng)站性能。

..~ . ~ ....~ . ~ ....~ . ~ ....~ . ~ ..
. ~ ..~ . ..~ . ~ ....~ . ~ ....~ . ~ ..

作者:Coagent

來源:www.jianshu.com/p/QsGiYD


免責聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

21ic電子網(wǎng)

掃描二維碼,關(guān)注更多精彩內(nèi)容

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉