0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學(xué)習在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區
會(huì )員中心
創(chuàng )作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內不再提示

提升應用程序10倍性能的方法介紹

西西 ? 作者:首席架構師 ? 2019-09-28 02:16 ? 次閱讀

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

負載平衡器可以極大地提高性能,因為當其他服務(wù)器等待流量時(shí),它們可以防止一個(gè)服務(wù)器過(guò)載。它們還可以方便地擴展web服務(wù)器的容量,因為您可以添加成本相對較低的服務(wù)器,并確保它們將得到充分利用。

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

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

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

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

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

有兩種不同類(lèi)型的緩存需要考慮:

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

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

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

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

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

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

將內容從過(guò)度使用的機器上移開(kāi)——機器有時(shí)在特定任務(wù)上的運行速度比基準測試慢得多,因為它們忙于其他任務(wù)。在不同的機器上進(jìn)行緩存可以提高緩存資源的性能,也可以提高非緩存資源的性能,因為主機的過(guò)載更少。

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

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

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

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

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

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

技巧4 -壓縮數據

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

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

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

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

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

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

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

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

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

在服務(wù)器上加密數據和在客戶(hù)機上解密數據的持續開(kāi)銷(xiāo)。

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

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

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

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

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

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

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

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

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

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

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

通過(guò)充分利用一個(gè)連接,這些協(xié)議避免了設置和管理多個(gè)連接的開(kāi)銷(xiāo),這是瀏覽器實(shí)現HTTP/1.x的方式所要求的。使用單個(gè)連接對SSL特別有幫助,因為它將SSL/TLS設置安全連接所需的握手時(shí)間降到很低。

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

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

作為支持這些協(xié)議的一個(gè)例子,NGINX從一開(kāi)始就支持SPDY,現在大多數使用SPDY的站點(diǎn)都運行在NGINX上。NGINX也是HTTP/2支持的先驅?zhuān)刂?015年9月,NGINX開(kāi)源和NGINX Plus都支持HTTP/2。

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

技巧7 -更新軟件版本

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

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

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

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

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

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

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

積壓隊列——如果您的連接似乎正在停滯,請考慮增加net.core??梢耘抨牭却齆GINX注意的很大連接數。如果現有連接限制太小,您將看到錯誤消息,您可以逐漸增加此參數,直到錯誤消息停止。

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

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

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

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

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

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

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

客戶(hù)機keepalives—Keepalive連接可以減少開(kāi)銷(xiāo),特別是在使用SSL/TLS時(shí)。對于NGINX,您可以增加客戶(hù)機在給定連接上可以發(fā)出的keepalive_requests的最大數量(默認值為100),您還可以增加keepalive_timeout以允許keepalive連接保持更長(cháng)時(shí)間的打開(kāi)狀態(tài),從而加快后續請求的速度。

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

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

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

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

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

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

有關(guān)優(yōu)化NGINX web服務(wù)器的更多信息,請參閱我們的博客文章“優(yōu)化NGINX以獲得性能”。

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

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

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

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

服務(wù)器宕機。

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

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

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

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

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

結論-性能提高10倍

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

為了幫助您了解每種優(yōu)化的潛在影響,這里有一些關(guān)于上述每種技巧可能帶來(lái)的改進(jìn)的提示,盡管您的經(jīng)驗幾乎肯定會(huì )有所不同:

反向代理服務(wù)器和負載平衡——沒(méi)有負載平衡,或者負載平衡不好,可能會(huì )導致性能非常差的情況。添加反向代理服務(wù)器(如NGINX)可以防止web應用程序在內存和磁盤(pán)之間發(fā)生抖動(dòng)。負載平衡可以將處理從過(guò)載的服務(wù)器轉移到可用的服務(wù)器,并使擴展變得容易。這些變化可以帶來(lái)顯著(zhù)的性能改進(jìn),與當前實(shí)現中最糟糕的時(shí)刻相比,可以輕松實(shí)現10倍的性能改進(jìn),總體性能方面的成就雖小,但卻很可觀(guān)。

緩存動(dòng)態(tài)和靜態(tài)內容——如果您的web服務(wù)器負擔過(guò)重,并且其性能是應用服務(wù)器的兩倍,那么僅通過(guò)緩存動(dòng)態(tài)內容就可以在峰值時(shí)間內提高10倍。靜態(tài)文件的緩存也可以提高性能的個(gè)位數倍數。

壓縮數據——使用媒體文件壓縮,如照片的JPEG、圖形的PNG、電影的MPEG - 4和音樂(lè )文件的MP3,可以大大提高性能。一旦這些都被使用,那么壓縮文本數據(代碼和HTML)可以將初始頁(yè)面加載時(shí)間提高兩倍。

優(yōu)化SSL/TLS——安全握手對性能有很大的影響,因此優(yōu)化握手可以使初始響應能力提高2倍,特別是對于文本較多的站點(diǎn)。在SSL/TLS下優(yōu)化媒體文件傳輸可能只會(huì )帶來(lái)很小的性能改進(jìn)。

實(shí)現HTTP/2和SPDY——當與SSL/TLS一起使用時(shí),這些協(xié)議可能會(huì )導致站點(diǎn)整體性能的增量改進(jìn)。

調優(yōu)Linux和web服務(wù)器軟件(如NGINX)——諸如優(yōu)化緩沖、使用keepalive連接和將耗費大量時(shí)間的任務(wù)卸載到單獨的線(xiàn)程池等修復可以顯著(zhù)提高性能;例如,線(xiàn)程池可以將磁盤(pán)密集型任務(wù)的速度提高近一個(gè)數量級。

我們希望您親自嘗試這些技巧。我們希望聽(tīng)到您能夠實(shí)現的應用程序性能改進(jìn)。在下面的評論中分享你的結果,或者用#NGINX和#webperf的散列標簽發(fā)布你的故事!

互聯(lián)網(wǎng)統計資料

Resources for Internet Statistics

Statista.com – Share of the internet economy in the gross domestic product in G?20 countries in 2016

Kissmetrics – How Loading Time Affects Your Bottom Line (infographic)

Econsultancy – Site speed: case studies, tips and tools for improving your conversion rate

作者:首席架構師 來(lái)源:今日頭條

聲明:本文內容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權轉載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習之用,如有內容侵權或者其他違規問(wèn)題,請聯(lián)系本站處理。 舉報投訴
  • 應用程序
    +關(guān)注

    關(guān)注

    37

    文章

    3168

    瀏覽量

    56974
  • 平衡器
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

    9332
收藏 人收藏

    評論

    相關(guān)推薦

     華為云MongoDB彈性伸縮能力提升100

    的高性能并非一蹴而就,這與華為云深厚的技術(shù)積累息息相關(guān)。   10數據重構性能提升,得益于將數據復制功能卸載到分布式共享存儲。分布式存儲
    發(fā)表于 08-03 13:00

    如何提升EMC性能?

    兩個(gè)方面的性能,即電磁發(fā)射 / 干擾 EME 和電磁抗擾 EMS。EME 中包含傳導和輻射;而 EMS 中又包含靜電、脈沖群、浪涌等。為提升用戶(hù)系統穩定性,接下來(lái)我們將為大家講述如何靈活應用以上方法優(yōu)化電源 EMC,本文將從電源
    發(fā)表于 10-29 07:07

    可用于提高虛擬現實(shí)應用程序圖形性能的各種技術(shù)介紹

    本指南介紹了可用于提高虛擬現實(shí)應用程序圖形性能的各種技術(shù)。 在本指南的最后,您可以檢查您的知識。您將了解諸如混疊、mipmapping和凹凸貼圖等主題
    發(fā)表于 08-02 08:38

    快速識別應用程序性能瓶頸

    RATIONAL QUANTIFY FOR WINDOWS能查明應用程序性能瓶頸,從而確保使用JAVA、VISUAL C/C++和VISUAL BASIC開(kāi)發(fā)的應用程序的質(zhì)量和性能。
    發(fā)表于 04-18 22:15 ?20次下載

    ABB變頻器提升機控制應用程序

    ABB變頻器提升機控制應用程序
    發(fā)表于 01-21 12:00 ?3次下載

    keil C51應用程序和安裝方法

    keil C51應用程序和安裝方法
    發(fā)表于 11-27 08:00 ?11次下載

    altium designer10文件應用程序免費下載

    本文檔的主要內容詳細介紹的是altium designer10文件應用程序免費下載
    發(fā)表于 01-15 16:48 ?43次下載
    altium designer<b class='flag-5'>10</b>文件<b class='flag-5'>應用程序</b>免費下載

    關(guān)閉WIN10升級工具應用程序免費下載

    本文檔的主要內容詳細介紹的是關(guān)閉WIN10升級工具應用程序免費下載。
    發(fā)表于 01-22 08:00 ?2次下載
    關(guān)閉WIN<b class='flag-5'>10</b>升級工具<b class='flag-5'>應用程序</b>免費下載

    win10的Proteus 8應用程序安裝教程免費下載

    本文檔的主要內容詳細介紹的是win10的Proteus 8應用程序安裝教程免費下載。
    發(fā)表于 04-26 08:00 ?25次下載
    win<b class='flag-5'>10</b>的Proteus 8<b class='flag-5'>應用程序</b>安裝教程免費下載

    不同IDE下應用程序RW段分散鏈接的方法~

    今天痞子衡給大家介紹的是MCUXpresso IDE下將應用程序RW段分散鏈接的幾種方法。早期的 MCU 芯片,一般都會(huì )嵌入內部 Flash 和 RAM,并且 Flash 和 RAM 都只...
    發(fā)表于 12-07 13:21 ?9次下載
    不同IDE下<b class='flag-5'>應用程序</b>RW段分散鏈接的<b class='flag-5'>方法</b>~

    NVIDIA BlueField DPU應用程序的不同編譯方法

      隨著(zhù)我們進(jìn)入 NVIDIA BlueField DPU 應用程序開(kāi)發(fā)的新世界,高效地設置構建步驟非常重要,以便您能夠無(wú)縫地{code =》 compile =》 unit-test}。在本文中,我介紹了為 DPU 編譯應用程序
    的頭像 發(fā)表于 04-20 14:12 ?1451次閱讀
    NVIDIA BlueField DPU<b class='flag-5'>應用程序</b>的不同編譯<b class='flag-5'>方法</b>

    DPU編譯應用程序的不同方法

    當我們進(jìn)入 NVIDIA BlueField DPU 應用程序開(kāi)發(fā)的新世界,有效地設置構建步驟非常重要,以便您能夠無(wú)縫地編碼→編譯→單元測試。在本文中,我介紹了 DPU 編譯應用程序的不同方法
    的頭像 發(fā)表于 04-22 14:25 ?1461次閱讀
    DPU編譯<b class='flag-5'>應用程序</b>的不同<b class='flag-5'>方法</b>

    基于A(yíng)WTK開(kāi)發(fā)應用程序需要遵循的規范和方法

    AWTK 是 ZLG 開(kāi)源的跨平臺 GUI 引擎,本文介紹一下基于 AWTK 開(kāi)發(fā)應用程序需要遵循的規范和方法,以保證應用程序也能跨平臺運行。
    的頭像 發(fā)表于 09-07 11:52 ?1183次閱讀

    PGO到底是什么?PGO如何提高應用程序性能呢?

    方法。PGO技術(shù)在編譯優(yōu)化中起了很大的作用,能夠優(yōu)化代碼、減少程序體積、提升程序性能等。 PGO技術(shù)可以分為三個(gè)步驟,首先是收集運行特征數據,然后是根據收集到的數據生成優(yōu)化參數,最后
    的頭像 發(fā)表于 10-26 17:37 ?1637次閱讀

    應用程序中的服務(wù)器錯誤怎么解決?

    在使用應用程序時(shí),可能會(huì )遇到服務(wù)器錯誤的問(wèn)題。這種錯誤通常會(huì )導致應用程序無(wú)法正常運行 ,給用戶(hù)帶來(lái)不便。下面將介紹應用程序中的服務(wù)器錯誤及其解決方法
    的頭像 發(fā)表于 03-12 15:13 ?1621次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看