Nginx與七層負載均衡

2021-07-01 19:50:09 字數 1211 閱讀 2641

我們知道四層負載均衡主要採用更改ip資料報的位址的方式來進行分流,響應結果通常由後端機器直接返回給客戶端(例如lvs的dr模式)。而七層負載均衡主要應用於http協議,所使用的技術和四層不一樣。具體過程是客戶端傳送http請求到七層負載均衡伺服器,七層伺服器則將請求傳送給後端伺服器,後端伺服器處理完請求後將結果傳送回七層伺服器,然後由七層伺服器將響應結果返回給客戶端。在這個過程中所有的請求響應流量都要經過七層負載均衡裝置,僅從這點就可以看出來七層負載均衡的效率上要比四層差(另外一點是七層比四層要多做幾層協議的解析封裝工作)。

雖然七層裝置達不到4層裝置動輒幾十萬每秒的qps,但是由於不用處理後端業務邏輯,僅僅是**請求獲取響應,相對來說也可以達到比較高的併發處理速度(一般來說只要後端伺服器足夠多,業務處理足夠快,七層裝置不太容易會成為瓶頸)。在傳統的同步阻塞io模型下,七層伺服器每次向後端伺服器傳送請求需要等待響應結果,這樣cpu大部分時間都在等待io完成,效率非常低。為了解決這個問題可以採用非阻塞的方式,七層伺服器開多個工作執行緒,每個工作執行緒通過輪詢的方式去檢查io事件是否完成,如果沒有完成則讓出cpu讓其他工作執行緒處理。這種方式比同步阻塞的方式要好,但是只有在工作執行緒很多的情況下效率才比較高,而工作執行緒一多帶來的記憶體開銷以及執行緒切換的開銷也非常大,阻礙了進一步提公升併發處理能力。這時可以採用非同步非阻塞io模型,也就是說不再開很多個工作執行緒,而是由乙個工作執行緒註冊很多個io事件,如果有io事件準備完畢,則可以直接處理。如果沒有準備完畢,則阻塞乙個固定超時時間,在這個時間之內如果有多個io事件都準備完畢了,則可以依次處理這些io事件。從整體上來看節省了上下文切換的開銷,提公升了cpu的利用率,因此也提公升了併發處理能力。這也是當前select/poll/epoll/kqueue這些機制的基本原理。

一般常用的七層負載均衡裝置有nginx和varnish,兩者都可以進行負載均衡處理,但是應用方式和場景略有不同。varnish配置簡單並且具有比較強大的快取加速功能,因此通常用在靜態資源請求的分流上。而nginx主要的特點是高效,可以編寫各種各樣的第三方模組提供定製化的功能。例如可以在nginx上做認證,灰度流量切換以及文字壓縮等等功能。在處理過程中我們知道nginx伺服器通過upstream模組選擇後端伺服器**請求,通過實現特定的後端伺服器選擇演算法就可以做到灰度流量切換的功能。另外在獲取後端服務的結果之後,還可以通過nginx的filter模組對結果進行各種處理,包括文字壓縮增加footer等功能。從這個角度來說,nginx比varnish使用要靈活許多。

【參考】

四七層**區別:

nginx平台初探:

Nginx與七層負載均衡

我們知道四層負載均衡主要採用更改ip資料報的位址的方式來進行分流,響應結果通常由後端機器直接返回給客戶端 例如lvs的dr模式 而七層負載均衡主要應用於http協議,所使用的技術和四層不一樣。具體過程是客戶端傳送http請求到七層負載均衡伺服器,七層伺服器則將請求傳送給後端伺服器,後端伺服器處理完請...

Nginx 七層負載均衡

目錄nginx 負載均衡的實現需要配置ngx http upstream module模組 官方文件 使用此模組時,需要用到反向 相關的ngx http proxy module模組 官方文件 切記不可混淆兩個模組 例項 也可以設定每個伺服器分配請求的權重 root lb01 cat etc ngi...

七層負載均衡之nginx

一 nginx 1.名詞解釋 nginx engine x 是乙個高效能的http和反向 伺服器,反向 reverse proxy 方式是指以 伺服器來接受internet上的連線請求,然後將請求 給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求連線的客戶端,此時 伺服器對...