利用nginx加速web訪問

2021-09-06 21:02:10 字數 3528 閱讀 4246

起因

----------

在最近新系統的設計中對於首頁開啟速度的問題做了一些考慮,由於頁面上還是以動態資料為主,所以簡單的靜態化資料可能並不行,所以需要從業務和技術結合的角度去考慮這個問題。由於有些資料並不敏感,其實可以放入快取並定時更新。另外就是有些本身是靜態,能否加快併發相應速度。

這裡對動態資料想到了2種辦法:1)把action設定成單例,請求的結果直接加在快取裡,再用乙個定時執行緒去重新整理這個快取;2)讓輸出的結果頁靜態化,定時更新結果頁。

前者控制起來非常靈活,利用雙緩衝也能讓人感覺不到緩衝時的速度下降,缺點就是要改動比較多的**。後者正好相反,靜態化要依靠外層的框架配置,**完全不用改動。

選型-----------

目前比較流行的反向**伺服器有squid和nginx,查了一下資料,發現nginx比較擅長反向**和負載均衡,而squid強在自身的快取機制,另外lightd貌似多用來做伺服器。經過比較感覺nginx的配置檔案簡單一些,所以決定用這個先嘗試一下。

效能測試

----------------

安裝完成當然是先做一下效能測試了,這次同樣使用ab來進行壓力測試。為了做對比,這裡也啟動了乙個tomcat,nginx配置成其的反向**。我就在本機進行訪問,但測試結果令我驚嘆。

測試命令:ab -n 10000 -k -c 1000 http://localhost:8080/pscms_hlj_web/images/logo.jpg

nginx的效能遠遠勝出,這應該是這個頁面會被快取的原因,另外支援epoll肯定也有較高的io效能提公升。但這個測試中也發現tomcat已經很穩的掛掉了,nginx的高併發支援真不是蓋的。

結論----------

真實系統中不可能有那麼多靜態的內容,因為瀏覽器本地也會有快取,但是nginx會在很大程度上提公升對併發響應的能力。對於一些不需要頻繁更新的動態內容也可以做定時快取,這樣也可以大大加快頁面的開啟速度並降低後端壓力。線上系統可以把、js、css、靜態html都快取起來,後端只接受動態內容的請求,從而提速web訪問速度。

其他發現

--------------

其實nginx是把快取的內容經過hash後放到檔案中的,雖然測試中來看肯定是在記憶體中拿的結果,但是肯定還是有一次寫入。後來查到linux下面有乙個自帶的檔案系統,在/dev/shm下面,預設是記憶體大小的一半。這樣真的可以把快取的內容指向這個檔案裡面就行了。

另外,nginx也可以很方便的實現雙機熱備和負載均衡。負載均衡可以配置weight來調整訪問比例,系統會自動把請求進行轉向。雙機熱備會在所有節點都不可用時自動轉向,這在系統公升級的時候可以做到不中斷服務。這些實現做類似如下配置即可: 

upstream  testproxy     

**:

利用nginx加速web訪問

起因 在最近新系統的設計中對於首頁開啟速度的問題做了一些考慮,由於頁面上還是以動態資料為主,所以簡單的靜態化資料可能並不行,所以需要從業務和技術結合的角度去考慮這個問題。由於有些資料並不敏感,其實可以放入快取並定時更新。另外就是有些本身是靜態,能否加快併發相應速度。這裡對動態資料想到了2種辦法 1 ...

利用nginx加速web訪問

在最近新系統的設計中對於首頁開啟速度的問題做了一些考慮,由於頁面上還是以動態資料為主,所以簡單的靜態化資料可能並不行,所以需要從業務和技術結合的角度去考慮這個問題。由於有些資料並不敏感,其實可以放入快取並定時更新。另外就是有些本身是靜態,能否加快併發相應速度。這裡對動態資料想到了2種辦法 1 把ac...

利用nginx加速web訪問

起因 在最近新系統的設計中對於首頁開啟速度的問題做了一些考慮,由於頁面上還是以動態資料為主,所以簡單的靜態化資料可能並不行,所以需要從業務和技術結合的角度去考慮這個問題。由於有些資料並不敏感,其實可以放入快取並定時更新。另外就是有些本身是靜態,能否加快併發相應速度。這裡對動態資料想到了2種辦法 1 ...