溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

10個(gè)提升web應(yīng)用程序10倍性能的技巧有哪些

發(fā)布時(shí)間:2022-01-11 09:56:54 來源:億速云 閱讀:119 作者:柒染 欄目:編程語言

這篇文章將為大家詳細(xì)講解有關(guān)10個(gè)提升web應(yīng)用程序10倍性能的技巧有哪些,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

提高Web應(yīng)用程序性能比以往任何時(shí)候都更加重要。在線經(jīng)濟(jì)活動(dòng)的份額正在增長(zhǎng);超過5%的發(fā)達(dá)國(guó)家的經(jīng)濟(jì)現(xiàn)在是在互聯(lián)網(wǎng)上的(參見參考資料中的互聯(lián)網(wǎng)統(tǒng)計(jì)數(shù)據(jù))。而我們這個(gè)始終在線、高度連接的現(xiàn)代世界意味著用戶的期望比以往任何時(shí)候都要高。如果您的站點(diǎn)沒有立即響應(yīng),或者您的應(yīng)用程序不能立即工作,用戶將很快轉(zhuǎn)向您的競(jìng)爭(zhēng)對(duì)手。

例如,亞馬遜近10年前的一項(xiàng)研究證明,即使在那時(shí),頁面加載時(shí)間每減少100毫秒,收入也會(huì)增加1%。最近的另一項(xiàng)研究強(qiáng)調(diào)了這樣一個(gè)事實(shí):超過一半的受訪網(wǎng)站所有者表示,由于應(yīng)用程序性能不佳,他們失去了收入或客戶。

一個(gè)網(wǎng)站需要多快?每加載一個(gè)頁面一秒鐘,大約有4%的用戶會(huì)放棄它。頂級(jí)電子商務(wù)網(wǎng)站提供從1秒到3秒的首次互動(dòng)時(shí)間,這提供了很高的轉(zhuǎn)化率。很明顯,web應(yīng)用程序性能的風(fēng)險(xiǎn)很高,而且可能還會(huì)增加。

想要提高性能很容易,但實(shí)際看到結(jié)果卻很難。為了幫助你的旅程,這篇博客文章為你提供了10個(gè)技巧,幫助你將網(wǎng)站性能提高10倍。這是一個(gè)系列文章的第一部分,詳細(xì)介紹了如何在一些經(jīng)過良好測(cè)試的優(yōu)化技術(shù)的幫助下,并在NGINX的支持下,提高應(yīng)用程序的性能。本系列還概述了在此過程中可能獲得的安全性改進(jìn)。

技巧1 -使用反向代理服務(wù)器加速并保護(hù)應(yīng)用程序

如果您的web應(yīng)用程序在一臺(tái)機(jī)器上運(yùn)行,那么性能問題的解決方案可能很明顯:使用一臺(tái)更快的機(jī)器,擁有更多處理器、更多RAM、更快的磁盤陣列,等等。然后,新機(jī)器可以運(yùn)行您的WordPress服務(wù)器,Node.js應(yīng)用程序,Java應(yīng)用程序等,比以前更快。(如果您的應(yīng)用程序訪問數(shù)據(jù)庫服務(wù)器,解決方案可能看起來仍然很簡(jiǎn)單:獲得兩臺(tái)更快的機(jī)器,以及它們之間更快的連接。)

問題是,機(jī)器的速度可能不是問題所在。Web應(yīng)用程序通常運(yùn)行緩慢,因?yàn)橛?jì)算機(jī)在不同類型的任務(wù)之間切換:在數(shù)千個(gè)連接上與用戶交互、從磁盤訪問文件、運(yùn)行應(yīng)用程序代碼等等。應(yīng)用程序服務(wù)器可能會(huì)崩潰——耗盡內(nèi)存、將內(nèi)存塊交換到磁盤,并讓許多請(qǐng)求等待磁盤I/O等單個(gè)任務(wù)。

您可以采用完全不同的方法,而不是升級(jí)硬件:添加反向代理服務(wù)器來卸載這些任務(wù)。反向代理服務(wù)器位于運(yùn)行應(yīng)用程序的機(jī)器前面,處理Internet流量。只有反向代理服務(wù)器直接連接到Internet;與應(yīng)用服務(wù)器的通信是通過一個(gè)快速的內(nèi)部網(wǎng)絡(luò)進(jìn)行的。

使用反向代理服務(wù)器可以讓應(yīng)用服務(wù)器從等待用戶與web應(yīng)用程序交互的過程中解放出來,并讓它集中精力構(gòu)建頁面,以便反向代理服務(wù)器通過Internet發(fā)送。不再需要等待客戶機(jī)響應(yīng)的應(yīng)用程序服務(wù)器可以以接近優(yōu)化基準(zhǔn)測(cè)試的速度運(yùn)行。

添加反向代理服務(wù)器還可以增加web服務(wù)器設(shè)置的靈活性。例如,如果一個(gè)給定類型的服務(wù)器被重載,可以很容易地添加另一個(gè)相同類型的服務(wù)器;如果服務(wù)器宕機(jī),可以很容易地替換它。

由于它提供的靈活性,反向代理服務(wù)器也是許多其他性能提升功能的先決條件,比如:

  • 負(fù)載平衡(參見技巧2)——負(fù)載平衡器運(yùn)行在反向代理服務(wù)器上,以便在多個(gè)應(yīng)用服務(wù)器之間均勻地共享流量。有了負(fù)載平衡器,您就可以添加應(yīng)用程序服務(wù)器,而不需要更改您的應(yīng)用程序。

  • 緩存靜態(tài)文件(參見技巧3)——直接請(qǐng)求的文件,如圖像文件或代碼文件,可以存儲(chǔ)在反向代理服務(wù)器上,并直接發(fā)送到客戶機(jī),這樣可以更快地為資產(chǎn)提供服務(wù),并卸載應(yīng)用程序服務(wù)器,從而使應(yīng)用程序運(yùn)行得更快。

  • 保護(hù)您的站點(diǎn)——反向代理服務(wù)器可以配置為高安全性,并進(jìn)行監(jiān)視,以便快速識(shí)別和響應(yīng)攻擊,保護(hù)應(yīng)用程序服務(wù)器。

NGINX軟件是專門為用作反向代理服務(wù)器而設(shè)計(jì)的,具有上面描述的附加功能。NGINX使用事件驅(qū)動(dòng)的處理方法,這比傳統(tǒng)服務(wù)器更有效。NGINX  Plus添加了更高級(jí)的反向代理特性,比如應(yīng)用程序健康檢查、特殊的請(qǐng)求路由、高級(jí)緩存和支持。

10個(gè)提升web應(yīng)用程序10倍性能的技巧有哪些

技巧2 -添加一個(gè)負(fù)載平衡器

添加負(fù)載平衡器是一個(gè)相對(duì)容易的更改,它可以顯著提高站點(diǎn)的性能和安全性。不需要使核心web服務(wù)器更大更強(qiáng)大,而是使用負(fù)載平衡器在多個(gè)服務(wù)器之間分配流量。即使應(yīng)用程序編寫得很差,或者存在伸縮性問題,負(fù)載平衡器也可以在不進(jìn)行任何其他更改的情況下改善用戶體驗(yàn)。

首先,負(fù)載均衡器是一個(gè)反向代理服務(wù)器(請(qǐng)參閱技巧1)——它接收Internet流量并將請(qǐng)求轉(zhuǎn)發(fā)到另一臺(tái)服務(wù)器。訣竅在于負(fù)載均衡器支持兩個(gè)或多個(gè)應(yīng)用程序服務(wù)器,使用多種算法在服務(wù)器之間分割請(qǐng)求。最簡(jiǎn)單的負(fù)載平衡方法是輪詢,將每個(gè)新請(qǐng)求發(fā)送到列表上的下一個(gè)服務(wù)器。其他方法包括向活動(dòng)連接最少的服務(wù)器發(fā)送請(qǐng)求。NGINX  Plus具有在同一服務(wù)器上繼續(xù)給定用戶會(huì)話的功能,這稱為會(huì)話持久性。

負(fù)載平衡器可以極大地提高性能,因?yàn)楫?dāng)其他服務(wù)器等待流量時(shí),它們可以防止一個(gè)服務(wù)器過載。它們還可以方便地?cái)U(kuò)展web服務(wù)器的容量,因?yàn)槟梢蕴砑映杀鞠鄬?duì)較低的服務(wù)器,并確保它們將得到充分利用。

可以負(fù)載平衡的協(xié)議包括HTTP、HTTPS、SPDY、HTTP/2、WebSocket、FastCGI、SCGI、uwsgi、memcached,以及其他幾種應(yīng)用程序類型,包括基于TCP的應(yīng)用程序和其他第4層協(xié)議。分析您的web應(yīng)用程序,以確定您使用的是哪種應(yīng)用程序,以及在哪些地方性能比較差。

用于負(fù)載平衡的同一或多個(gè)服務(wù)器還可以處理其他幾個(gè)任務(wù),比如SSL終止、對(duì)HTTP/1的支持。客戶端使用x和HTTP/2,并緩存靜態(tài)文件。

NGINX通常用于負(fù)載平衡。要了解更多,請(qǐng)下載我們的電子書,選擇軟件負(fù)載平衡器的五個(gè)理由。您可以使用NGINX和NGINX  Plus獲得負(fù)載平衡的基本配置說明,第1部分以及NGINX Plus管理指南中的完整文檔。NGINX  Plus是我們的商業(yè)產(chǎn)品,支持更專業(yè)的負(fù)載平衡特性,比如基于服務(wù)器響應(yīng)時(shí)間的負(fù)載路由,以及基于微軟NTLM協(xié)議的負(fù)載平衡能力。

技巧3 -緩存靜態(tài)和動(dòng)態(tài)內(nèi)容

通過更快地將內(nèi)容交付給客戶機(jī),緩存提高了web應(yīng)用程序的性能。緩存可以包括幾種策略:在需要時(shí)對(duì)內(nèi)容進(jìn)行預(yù)處理以實(shí)現(xiàn)快速交付、將內(nèi)容存儲(chǔ)在更快的設(shè)備上、將內(nèi)容存儲(chǔ)在離客戶機(jī)更近的地方,或者組合使用。

有兩種不同類型的緩存需要考慮:

  • 靜態(tài)內(nèi)容緩存——不經(jīng)常更改的文件,如圖像文件(JPEG、PNG)和代碼文件(CSS、JavaScript),可以存儲(chǔ)在邊緣服務(wù)器上,以便從內(nèi)存或磁盤快速檢索。

  • 緩存動(dòng)態(tài)內(nèi)容——許多Web應(yīng)用程序?yàn)槊總€(gè)頁面請(qǐng)求生成新的HTML。通過在短時(shí)間內(nèi)緩存生成的HTML的一個(gè)副本,您可以顯著減少必須生成的頁面總數(shù),同時(shí)仍然交付足夠新鮮的內(nèi)容來滿足您的需求。

例如,如果一個(gè)頁面每秒有10個(gè)視圖,而您將其緩存1秒,那么對(duì)該頁面的90%的請(qǐng)求將來自緩存。如果單獨(dú)緩存靜態(tài)內(nèi)容,即使是新生成的頁面版本也可能主要由緩存的內(nèi)容組成。

緩存web應(yīng)用程序生成的內(nèi)容有三種主要技術(shù):

  • 將內(nèi)容移動(dòng)到離用戶更近的地方——將內(nèi)容的副本保持在離用戶更近的地方,可以減少其傳輸時(shí)間。

  • 將內(nèi)容移動(dòng)到更快的機(jī)器上——內(nèi)容可以保存在更快的機(jī)器上,以便更快地檢索。

  • 將內(nèi)容從過度使用的機(jī)器上移開——機(jī)器有時(shí)在特定任務(wù)上的運(yùn)行速度比基準(zhǔn)測(cè)試慢得多,因?yàn)樗鼈兠τ谄渌蝿?wù)。在不同的機(jī)器上進(jìn)行緩存可以提高緩存資源的性能,也可以提高非緩存資源的性能,因?yàn)橹鳈C(jī)的過載更少。

web應(yīng)用程序的緩存可以從內(nèi)部(web應(yīng)用程序服務(wù)器)到外部實(shí)現(xiàn)。首先,緩存用于動(dòng)態(tài)內(nèi)容,以減少應(yīng)用服務(wù)器上的負(fù)載。然后,緩存用于靜態(tài)內(nèi)容(包括動(dòng)態(tài)內(nèi)容的臨時(shí)副本),進(jìn)一步卸載應(yīng)用服務(wù)器。然后緩存將從應(yīng)用服務(wù)器轉(zhuǎn)移到速度更快和/或更接近用戶的機(jī)器上,從而減輕應(yīng)用服務(wù)器的負(fù)擔(dān),減少檢索和傳輸時(shí)間。

改進(jìn)的緩存可以極大地加快應(yīng)用程序的速度。對(duì)于許多web頁面,靜態(tài)數(shù)據(jù)(如大型圖像文件)占內(nèi)容的一半以上。在沒有緩存的情況下,檢索和傳輸這樣的數(shù)據(jù)可能需要幾秒鐘,但是如果數(shù)據(jù)是本地緩存的,那么只需要幾秒鐘。

作為在實(shí)踐中如何使用緩存的示例,NGINX和NGINX  Plus使用兩個(gè)指令來設(shè)置緩存:proxy_cache_path和proxy_cache。您可以指定緩存位置和大小、緩存中保存的最大時(shí)間文件以及其他參數(shù)。使用第三個(gè)(也是非常流行的)指令proxy_cache_use_陳腐,您甚至可以在提供新鮮內(nèi)容的服務(wù)器繁忙或宕機(jī)時(shí)直接使用緩存來提供陳舊的內(nèi)容,從而為客戶機(jī)提供一些內(nèi)容,而不是什么也沒有。從用戶的角度來看,這可能會(huì)極大地提高站點(diǎn)或應(yīng)用程序的正常運(yùn)行時(shí)間。

NGINX Plus具有高級(jí)緩存功能,包括支持緩存清除和在儀表板上顯示緩存狀態(tài),以便實(shí)時(shí)監(jiān)控活動(dòng)。

有關(guān)NGINX緩存的更多信息,請(qǐng)參閱參考文檔和NGINX Plus管理指南。

注意:緩存跨越了開發(fā)應(yīng)用程序的人員、進(jìn)行資本投資決策的人員和實(shí)時(shí)運(yùn)行網(wǎng)絡(luò)的人員之間的組織界線。復(fù)雜的緩存策略(如這里提到的那些)是DevOps透視圖價(jià)值的一個(gè)很好的例子,在DevOps透視圖中,應(yīng)用程序開發(fā)人員、體系結(jié)構(gòu)和操作透視圖被合并,以幫助滿足站點(diǎn)功能、響應(yīng)時(shí)間、安全性和業(yè)務(wù)結(jié)果(如完成的事務(wù)或銷售)的目標(biāo)。

技巧4 -壓縮數(shù)據(jù)

壓縮是一個(gè)巨大的潛在性能加速器。對(duì)于照片(JPEG和PNG)、視頻(MPEG -  4)和音樂(MP3)等,都有精心設(shè)計(jì)和高效的壓縮標(biāo)準(zhǔn)。這些標(biāo)準(zhǔn)中的每一個(gè)都將文件大小減少一個(gè)數(shù)量級(jí)或更多。

文本數(shù)據(jù)——包括HTML(包括純文本和HTML標(biāo)記)、CSS和JavaScript等代碼——通常是未壓縮傳輸?shù)?。壓縮這些數(shù)據(jù)可能會(huì)對(duì)web應(yīng)用程序的性能產(chǎn)生不成比例的影響,特別是對(duì)于移動(dòng)連接緩慢或受限的客戶端。

這是因?yàn)槲谋緮?shù)據(jù)通常足以讓用戶與頁面交互,而在頁面中,多媒體數(shù)據(jù)可能更具支持性或裝飾性。智能內(nèi)容壓縮可以減少HTML、Javascript、CSS和其他基于文本的內(nèi)容的帶寬需求,通常可以減少30%或更多,并相應(yīng)地減少加載時(shí)間。

如果使用SSL,壓縮會(huì)減少必須經(jīng)過SSL編碼的數(shù)據(jù)量,從而抵消了壓縮數(shù)據(jù)所需的一些CPU時(shí)間。

壓縮文本數(shù)據(jù)的方法各不相同。例如,請(qǐng)參閱技巧6了解SPDY和HTTP/2中的一個(gè)新的文本壓縮方案,該方案專門針對(duì)頭數(shù)據(jù)進(jìn)行了調(diào)整。作為文本壓縮的另一個(gè)例子,您可以在NGINX中打開GZIP壓縮。在預(yù)壓縮服務(wù)上的文本數(shù)據(jù)之后,可以使用gzip_static指令直接提供壓縮后的.gz文件。

技巧5 -優(yōu)化SSL/TLS

安全套接字層(SSL)協(xié)議及其后續(xù)協(xié)議傳輸層安全(TLS)協(xié)議正在越來越多的網(wǎng)站上使用。SSL/TLS對(duì)從源服務(wù)器傳輸?shù)接脩舻臄?shù)據(jù)進(jìn)行加密,以幫助提高站點(diǎn)安全性。影響這一趨勢(shì)的部分原因是,谷歌現(xiàn)在使用SSL/TLS作為對(duì)搜索引擎排名的積極影響。

盡管越來越受歡迎,但SSL/TLS涉及的性能問題仍然是許多站點(diǎn)的癥結(jié)所在。SSL/TLS降低網(wǎng)站性能有兩個(gè)原因:

  • 每當(dāng)打開新連接時(shí),建立加密密鑰所需的初始握手。瀏覽器使用HTTP/1的方式。為每臺(tái)服務(wù)器建立多個(gè)連接。

  • 在服務(wù)器上加密數(shù)據(jù)和在客戶機(jī)上解密數(shù)據(jù)的持續(xù)開銷。

為了鼓勵(lì)使用SSL/TLS,  HTTP/2和SPDY(在下一篇技巧文章中描述)的作者設(shè)計(jì)了這些協(xié)議,使瀏覽器在每個(gè)瀏覽器會(huì)話中只需要一個(gè)連接。這大大減少了SSL開銷的兩個(gè)主要來源之一。然而,現(xiàn)在可以做更多的工作來改進(jìn)通過SSL/TLS交付的應(yīng)用程序的性能。

優(yōu)化SSL/TLS的機(jī)制因web服務(wù)器而異。例如,NGINX使用OpenSSL在標(biāo)準(zhǔn)的商用硬件上運(yùn)行,以提供類似于專用硬件解決方案的性能。NGINX  SSL性能有良好的文檔記錄,并將執(zhí)行SSL/TLS加密和解密的時(shí)間和CPU消耗降到很低。

此外,有關(guān)如何提高SSL/TLS性能的詳細(xì)信息,請(qǐng)參閱本文。簡(jiǎn)而言之,這些技術(shù)是:

  • 會(huì)話緩存——使用ssl_session_cache指令緩存使用SSL/TLS保護(hù)每個(gè)新連接時(shí)使用的參數(shù)。

  • 會(huì)話票證或ID——這些信息存儲(chǔ)在票證或ID中關(guān)于特定SSL/TLS會(huì)話的信息,這樣就可以順利地重用連接,而不需要新的握手。

  • 通過緩存SSL/TLS證書信息,減少握手時(shí)間。

NGINX和NGINX Plus可用于SSL/TLS終止——處理客戶機(jī)流量的加密和解密,同時(shí)與其他服務(wù)器進(jìn)行明文通信。要設(shè)置NGINX或NGINX  Plus來處理SSL/TLS終止,請(qǐng)參閱HTTPS連接和加密TCP連接的說明。

技巧6 -實(shí)現(xiàn)HTTP/2或SPDY

對(duì)于已經(jīng)使用SSL/TLS、HTTP/2和SPDY的站點(diǎn),很可能會(huì)提高性能,因?yàn)閱蝹€(gè)連接只需要一次握手。對(duì)于還沒有使用SSL/TLS的站點(diǎn),HTTP/2和SPDY將遷移到SSL/TLS(這通常會(huì)降低性能),從響應(yīng)性的角度來看,這是一種洗刷。

谷歌在2012年引入SPDY,作為在HTTP/1.x之上實(shí)現(xiàn)更快性能的一種方式。HTTP/2是最近批準(zhǔn)的基于SPDY的IETF標(biāo)準(zhǔn)。SPDY得到了廣泛的支持,但是很快就會(huì)被棄用,取而代之的是HTTP/2。

SPDY和HTTP/2的關(guān)鍵特性是使用單個(gè)連接,而不是多個(gè)連接。單個(gè)連接是多路復(fù)用的,因此它可以同時(shí)攜帶多個(gè)請(qǐng)求和響應(yīng)。

通過充分利用一個(gè)連接,這些協(xié)議避免了設(shè)置和管理多個(gè)連接的開銷,這是瀏覽器實(shí)現(xiàn)HTTP/1.x的方式所要求的。使用單個(gè)連接對(duì)SSL特別有幫助,因?yàn)樗鼘SL/TLS設(shè)置安全連接所需的握手時(shí)間降到很低。

SPDY協(xié)議要求使用SSL/TLS;HTTP/2并沒有正式要求它,但是到目前為止,所有支持HTTP/2的瀏覽器都只在啟用SSL/TLS時(shí)才使用它。也就是說,支持HTTP/2的瀏覽器只有在網(wǎng)站使用SSL且服務(wù)器接受HTTP/2流量時(shí)才使用它。否則,瀏覽器通過HTTP/1.x進(jìn)行通信。

當(dāng)您實(shí)現(xiàn)SPDY或HTTP/2時(shí),您不再需要典型的HTTP性能優(yōu)化,例如域分片、資源合并和圖像spriting。這些更改使您的代碼和部署更簡(jiǎn)單、更容易管理。要了解更多關(guān)于HTTP/2帶來的變化,請(qǐng)閱讀我們的白皮書《Web應(yīng)用程序開發(fā)人員的HTTP/2》。

10個(gè)提升web應(yīng)用程序10倍性能的技巧有哪些

作為支持這些協(xié)議的一個(gè)例子,NGINX從一開始就支持SPDY,現(xiàn)在大多數(shù)使用SPDY的站點(diǎn)都運(yùn)行在NGINX上。NGINX也是HTTP/2支持的先驅(qū),截至2015年9月,NGINX開源和NGINX  Plus都支持HTTP/2。

隨著時(shí)間的推移,我們NGINX希望大多數(shù)站點(diǎn)能夠完全啟用SSL并遷移到HTTP/2。這將導(dǎo)致安全性的提高,并且,隨著新的優(yōu)化的發(fā)現(xiàn)和實(shí)現(xiàn),更簡(jiǎn)單的代碼執(zhí)行得更好。

技巧7 -更新軟件版本

提高應(yīng)用程序性能的一個(gè)簡(jiǎn)單方法是根據(jù)組件的穩(wěn)定性和性能為軟件堆棧選擇組件。此外,由于高質(zhì)量組件的開發(fā)人員可能會(huì)追求性能增強(qiáng)并隨著時(shí)間的推移修復(fù)bug,因此使用較新的穩(wěn)定版本的軟件是值得的。新版本得到了開發(fā)人員和用戶社區(qū)的更多關(guān)注。更新的構(gòu)建還利用了新的編譯器優(yōu)化,包括針對(duì)新硬件的調(diào)優(yōu)。

穩(wěn)定的新版本通常比舊版本更兼容,性能更高。當(dāng)您關(guān)注軟件更新時(shí),更容易掌握調(diào)優(yōu)優(yōu)化、bug修復(fù)和安全警報(bào)。

使用舊的軟件也會(huì)阻止您利用新功能。例如,上面描述的HTTP/2目前需要OpenSSL  1.0.1。從2016年年中開始,HTTP/2將需要于2015年1月發(fā)布的OpenSSL 1.0.2。

NGINX用戶可以從移動(dòng)到較新版本的NGINX或NGINX  Plus開始;它們包括新的功能,如套接字分片和線程池(請(qǐng)參閱技巧9),并且都在不斷地進(jìn)行性能調(diào)優(yōu)。然后深入了解您的堆棧中的軟件,并盡可能地使用較新的版本。

技巧8 -調(diào)優(yōu)Linux的性能

Linux是當(dāng)今大多數(shù)web服務(wù)器實(shí)現(xiàn)的底層操作系統(tǒng),作為基礎(chǔ)設(shè)施的基礎(chǔ),Linux代表著提高性能的重要機(jī)會(huì)。默認(rèn)情況下,許多Linux系統(tǒng)都進(jìn)行了保守的調(diào)優(yōu),以使用很少的資源并匹配典型的桌面工作負(fù)載。這意味著web應(yīng)用程序用例至少需要一定程度的調(diào)優(yōu)才能獲得很大的性能。

Linux優(yōu)化是特定于web服務(wù)器的。以NGINX為例,下面是一些你可以考慮的加速Linux的變化:

  • 積壓隊(duì)列——如果您的連接似乎正在停滯,請(qǐng)考慮增加net.core。可以排隊(duì)等待NGINX注意的很大連接數(shù)。如果現(xiàn)有連接限制太小,您將看到錯(cuò)誤消息,您可以逐漸增加此參數(shù),直到錯(cuò)誤消息停止。

  • 文件描述符-  NGINX為每個(gè)連接使用最多兩個(gè)文件描述符。如果您的系統(tǒng)正在提供大量連接,您可能需要增加sys.fs。file_max是文件描述符的系統(tǒng)范圍限制,nofile是用戶文件描述符的限制,以支持增加的負(fù)載。

  • 臨時(shí)端口——當(dāng)用作代理時(shí),NGINX為每個(gè)上游服務(wù)器創(chuàng)建臨時(shí)(“臨時(shí)”)端口。您可以增加由net.ipv4設(shè)置的端口值范圍。ip_local_port_range,以增加可用端口的數(shù)量。您還可以在網(wǎng)絡(luò).ipv4重用非活動(dòng)端口之前減少超時(shí)。tcp_fin_timeout設(shè)置,允許更快的周轉(zhuǎn)。

對(duì)于NGINX,請(qǐng)查看NGINX性能調(diào)優(yōu)指南,了解如何優(yōu)化您的Linux系統(tǒng),使其能夠輕松處理大量網(wǎng)絡(luò)流量!

技巧9 -調(diào)優(yōu)Web服務(wù)器的性能

無論使用什么web服務(wù)器,都需要根據(jù)web應(yīng)用程序性能對(duì)其進(jìn)行調(diào)優(yōu)。下面的建議通常適用于任何web服務(wù)器,但是為NGINX提供了特定的設(shè)置。主要包括:優(yōu)化

訪問日志—您可以緩沖內(nèi)存中的條目,并將它們作為一個(gè)組寫入磁盤,而不是立即為每個(gè)請(qǐng)求寫入一個(gè)日志條目。對(duì)于NGINX,將buffer=size參數(shù)添加到access_log指令中,以便在內(nèi)存緩沖區(qū)滿時(shí)將日志條目寫入磁盤。如果添加flush=time參數(shù),緩沖區(qū)內(nèi)容也會(huì)在指定的時(shí)間之后寫入磁盤。

緩沖—緩沖將響應(yīng)的一部分保存在內(nèi)存中,直到緩沖區(qū)填滿為止,這可以提高與客戶機(jī)的通信效率。不適合內(nèi)存的響應(yīng)被寫入磁盤,這會(huì)降低性能。當(dāng)NGINX緩沖打開時(shí),使用proxy_buffer_size和proxy_buffers指令來管理它。

  • 客戶機(jī)keepalives連接可以減少開銷,特別是在使用SSL/TLS時(shí)。對(duì)于NGINX,您可以增加客戶機(jī)在給定連接上可以發(fā)出的keepalive_requests的最大數(shù)量(默認(rèn)值為100),您還可以增加keepalive_timeout以允許keepalive連接保持更長(zhǎng)時(shí)間的打開狀態(tài),從而加快后續(xù)請(qǐng)求的速度。

  • 上游保持連接到應(yīng)用程序服務(wù)器、數(shù)據(jù)庫服務(wù)器等的連接;也可以從保持連接中獲益。對(duì)于上游連接,您可以增加keepalive,即為每個(gè)工作進(jìn)程保持打開狀態(tài)的空閑keepalive連接的數(shù)量。這允許增加連接重用,減少了打開全新連接的需要。有關(guān)更多信息,請(qǐng)參考我們的博客文章、HTTP  Keepalive連接和Web性能。

  • 限制客戶端使用的資源可以提高性能和安全性。對(duì)于NGINX,  limit_conn和limit_conn_zone指令限制來自給定源的連接數(shù)量,而limit_rate限制帶寬。這些設(shè)置可以阻止合法用戶“占用”資源,還有助于防止攻擊。limit_req和limit_req_zone指令限制客戶機(jī)請(qǐng)求。對(duì)于到上游服務(wù)器的連接,使用max_conns參數(shù)到上游配置塊中的服務(wù)器指令。這將限制到上游服務(wù)器的連接,防止過載。關(guān)聯(lián)的queue指令創(chuàng)建一個(gè)隊(duì)列,該隊(duì)列在達(dá)到max_conns限制之后,在指定的時(shí)間長(zhǎng)度內(nèi)保存指定數(shù)量的請(qǐng)求。

  • 工作進(jìn)程負(fù)責(zé)處理請(qǐng)求。NGINX使用基于事件的模型和依賴于操作系統(tǒng)的機(jī)制來有效地在工作進(jìn)程之間分發(fā)請(qǐng)求。建議將worker_processes的值設(shè)置為每個(gè)CPU一個(gè)。如果需要,可以在大多數(shù)系統(tǒng)上安全地啟動(dòng)worker_connections的較大數(shù)量(默認(rèn)為512);嘗試找出最適合您的系統(tǒng)的值。

  • 套接字分片;通常,一個(gè)套接字偵聽器將新連接分配給所有工作進(jìn)程。套接字分片為每個(gè)工作進(jìn)程創(chuàng)建套接字偵聽器,內(nèi)核在套接字偵聽器可用時(shí)將連接分配給它們。這可以減少鎖爭(zhēng)用,提高多核系統(tǒng)的性能。要啟用套接字分片,請(qǐng)?jiān)趌isten指令上包含reuseport參數(shù)。

  • 線程池;任何計(jì)算機(jī)進(jìn)程都可以通過一個(gè)緩慢的操作來阻塞。對(duì)于web服務(wù)器軟件,磁盤訪問可以支持許多更快的操作,比如在內(nèi)存中計(jì)算或復(fù)制信息。當(dāng)使用線程池時(shí),慢操作被分配給一組單獨(dú)的任務(wù),而主處理循環(huán)繼續(xù)運(yùn)行更快的操作。當(dāng)磁盤操作完成時(shí),結(jié)果返回到主處理循環(huán)。在NGINX中,兩個(gè)操作read()系統(tǒng)調(diào)用和sendfile()被卸載到線程池。

10個(gè)提升web應(yīng)用程序10倍性能的技巧有哪些

小費(fèi)。當(dāng)更改任何操作系統(tǒng)或支持服務(wù)的設(shè)置時(shí),每次更改一個(gè)設(shè)置,然后測(cè)試性能。如果更改導(dǎo)致問題,或者沒有使站點(diǎn)運(yùn)行得更快,請(qǐng)將其更改回來。

技巧10 -監(jiān)控活動(dòng)以解決問題和瓶頸

應(yīng)用程序開發(fā)和交付的高性能方法的關(guān)鍵是密切和實(shí)時(shí)地觀察應(yīng)用程序的實(shí)際性能。您必須能夠監(jiān)視特定設(shè)備內(nèi)和跨web基礎(chǔ)設(shè)施的活動(dòng)。

監(jiān)控站點(diǎn)活動(dòng)主要是被動(dòng)的——它告訴您發(fā)生了什么,然后讓您發(fā)現(xiàn)問題并修復(fù)它們。

監(jiān)視可以捕獲幾種不同類型的問題。它們包括:

  • 服務(wù)器宕機(jī)。

  • 服務(wù)器正在中斷連接。

  • 服務(wù)器的緩存丟失率很高。

  • 服務(wù)器沒有發(fā)送正確的內(nèi)容。

像New  Relic或Dynatrace這樣的全局應(yīng)用程序性能監(jiān)視工具可以幫助您從遠(yuǎn)程位置監(jiān)視頁面加載時(shí)間,而NGINX可以幫助您監(jiān)視應(yīng)用程序交付端。應(yīng)用程序性能數(shù)據(jù)告訴您,什么時(shí)候您的優(yōu)化對(duì)用戶產(chǎn)生了真正的影響,以及什么時(shí)候您需要考慮向基礎(chǔ)設(shè)施添加容量來維持流量。

為了幫助快速識(shí)別和解決問題,NGINX Plus添加了應(yīng)用程序感知的健康檢查——經(jīng)常重復(fù)的合成事務(wù),用于提醒您注意問題。NGINX  Plus還具有會(huì)話耗盡功能,在現(xiàn)有任務(wù)完成時(shí)停止新連接,啟動(dòng)速度較慢,允許恢復(fù)的服務(wù)器在負(fù)載平衡的組中加快速度。當(dāng)有效使用時(shí),健康檢查允許您在問題嚴(yán)重影響用戶體驗(yàn)之前識(shí)別問題,而會(huì)話耗盡和啟動(dòng)緩慢允許您替換服務(wù)器,并確保流程不會(huì)對(duì)感知的性能或正常運(yùn)行時(shí)間產(chǎn)生負(fù)面影響。圖中顯示了內(nèi)建的NGINX  Plus活動(dòng)監(jiān)視儀表板,用于具有服務(wù)器、TCP連接和緩存的web基礎(chǔ)設(shè)施。

10個(gè)提升web應(yīng)用程序10倍性能的技巧有哪些

結(jié)論-性能提高10倍

任何一個(gè)web應(yīng)用程序的性能改進(jìn)都有很大的不同,實(shí)際的收益取決于您的預(yù)算、您可以投入的時(shí)間和現(xiàn)有實(shí)現(xiàn)中的差距。那么,如何為自己的應(yīng)用程序?qū)崿F(xiàn)10倍的性能改進(jìn)呢?

關(guān)于10個(gè)提升web應(yīng)用程序10倍性能的技巧有哪些就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

web
AI