nginx和lvs各自的優(yōu)劣以及適合的使用環(huán)境
在最開始呢,咱們先說一下什么叫負(fù)載均衡,負(fù)載均衡呢,就是將一批請求,根據(jù)請求的內(nèi)容,分發(fā)到不同的后端去進(jìn)行相應(yīng)的處理,從而提供負(fù)載分擔(dān),主備切換等功能。
對于不同的負(fù)載均衡軟件,有不同的流量分發(fā)算法,今天,我們最市面上比較主流的兩種負(fù)載均衡做一個對比,看看他們分別的優(yōu)缺點(diǎn),以及在很多情況下如何去做配合。
【四層和七層】
首先,說說四層和七層的區(qū)別;
四層負(fù)載均衡,指的是IP+端口的負(fù)載均衡;
七層負(fù)載均衡,指的是基于WEB請求,URL等應(yīng)用層信息的負(fù)載均衡。
當(dāng)然,同理,還有基于MAC地址的二層負(fù)載均衡和基于IP地址的三層負(fù)載均衡。
四層負(fù)載均衡,主要分析IP層和TCP/UDP層。
七層負(fù)載均衡,要分析應(yīng)用層協(xié)議,比如HTTP協(xié)議,URL,cookie等信息。
【關(guān)于LVS】
LVS的負(fù)載能力很強(qiáng),因?yàn)槠涔ぷ髂J椒浅:唵?,僅進(jìn)行請求的分發(fā),而且其工作在第四層,沒有流量,在效率方面最高。
LVS是在四層,可以對幾乎所有的應(yīng)用作負(fù)載均衡。
但是LVS對于故障后端感知并不敏感,比如在DR模式下,要是有一個后端服務(wù)器沒有配置VIP,就會導(dǎo)致請求的一部分?jǐn)?shù)據(jù)會直接丟失。
且LVS對于網(wǎng)絡(luò)環(huán)境的穩(wěn)定性要求較高,如果請求失敗了,只能依賴于前端的應(yīng)用自身的重試機(jī)制,負(fù)載均衡不對請求進(jìn)行重新下發(fā)。
而且LVS也很受限于網(wǎng)絡(luò)架構(gòu),在設(shè)計(jì)之初就要考慮到網(wǎng)絡(luò)架構(gòu)是否滿足LVS負(fù)載的前置條件。
【關(guān)于nginx】
同樣的,nginx也可以用于負(fù)載均衡,但是由于nginx需要對源端/目的端都建立連接,所以處理流量的速度受限于機(jī)器I/O,CPU內(nèi)存等一系列配置,所以nginx的負(fù)載能力相對較差。
nginx安裝,配置都比較簡單,與LVS對比,nginx不需要很嚴(yán)格的網(wǎng)絡(luò)架構(gòu),只要網(wǎng)絡(luò)可以聯(lián)通即可。
且nginx自身的重試機(jī)制,可以保證請求下發(fā)失敗之后,會重新下發(fā)到健康的后端上。
但是,nginx因?yàn)闆]有現(xiàn)成的熱備機(jī)制,所以,存在單點(diǎn)故障的問題,一般需要搭配keepalived使用。
不過,nginx作為一款應(yīng)用層負(fù)載均衡(后來引入stream模塊之后,四層也支持了),可以提供負(fù)載分擔(dān),貯備切換,HTTPS寫在,帶寬限速,隱藏真實(shí)IP,隱藏真實(shí)端口,屏蔽攻擊等能力,這是LVS所不能提供的。
【對比】
lvs和nginx都是現(xiàn)在很主流的負(fù)載均衡方式,他們各有優(yōu)缺點(diǎn),在生產(chǎn)環(huán)境需要根據(jù)其特點(diǎn)做選擇。
LVS | Nginx | |
四層 | 四層/七層 | |
抗負(fù)載能力 | 強(qiáng) | 弱 |
配置性 |
可配置性低
同時也減少了人為出錯的概率
|
可配置性高
可以配置一些高級功能
|
穩(wěn)定性 |
穩(wěn)定性高
有完整的雙機(jī)熱備方案
|
穩(wěn)定性低,有單機(jī)故障
無現(xiàn)成的雙機(jī)熱備方案
|
網(wǎng)絡(luò)架構(gòu)依賴 |
強(qiáng)依賴
非常依賴網(wǎng)絡(luò)架構(gòu)設(shè)計(jì)
當(dāng)然可以采用比較簡單的NAT方式解決此問題
|
無依賴 |
網(wǎng)絡(luò)穩(wěn)定性依賴 |
依賴
數(shù)據(jù)包分發(fā)到壞的后端,不會重新分發(fā),會直接返回錯誤
|
不依賴
數(shù)據(jù)包分發(fā)到壞的后端并返回錯誤后,會嘗試重新分發(fā)到健康的后端
|
網(wǎng)絡(luò)流量 |
僅請求流量經(jīng)過lvs的網(wǎng)絡(luò),響應(yīng)流量由后端服務(wù)器的網(wǎng)絡(luò)返回。
FULL_NAT同Nginx。
|
所有的請求和響應(yīng)流量都會經(jīng)過nginx |
宿主機(jī)性能要求 |
要求較低
lvs僅僅做分發(fā)請求,流量并不從它本身出去,所以瓶頸僅僅受限于網(wǎng)絡(luò)帶寬和網(wǎng)卡性能
|
要求較高
因?yàn)閚ginx需要對源端和目的端都單獨(dú)建立連接,中間還涉及到一些數(shù)據(jù)包的解析處理,所以依賴宿主機(jī)的I/O性能和CPU內(nèi)存
|
轉(zhuǎn)發(fā)方式 |
同步轉(zhuǎn)發(fā)
lvs服務(wù)器接收到請求之后,立即redirect到一個后端服務(wù)器,由客戶端直接和后端服務(wù)器建立連接。
|
異步轉(zhuǎn)發(fā)
在保持客戶端連接的同時,發(fā)起一個相同內(nèi)容的新請求到后端,等后端返回結(jié)果后,由nginx返回給客戶端
|
其他 |
支持rewrite重寫規(guī)則:能夠根據(jù)域名、url的不同,將http請求分到不同的后端服務(wù)器群組。
節(jié)省帶寬:支持gzip壓縮,可以添加瀏覽器本地緩存的header頭。
|
【兩者配合】
在使用上,一般最前端所采取的的策略應(yīng)是lvs,也就是dns的指向應(yīng)為lvs均衡器,主要原因在于nginx雖然功能強(qiáng)大,但是當(dāng)作為后端的服務(wù)器規(guī)模龐大時,nginx的網(wǎng)絡(luò)帶寬就成了一個巨大的瓶頸。
但是當(dāng)lvs作為負(fù)載均衡的話,一旦后端接受到請求的服務(wù)器出了問題,那么這次請求就失敗了。
所以在很多情況下,nginx會作為lvs的節(jié)點(diǎn)進(jìn)行負(fù)載均衡,這樣,既可以避免nginx的性能造成很嚴(yán)重的帶寬瓶頸,也可以利用nginx的錯誤重傳避免lvs一錘子買賣,還能利用nginx的各種高級功能,包括https卸載,報(bào)文頭修改等。
以上就是nginx和lvs各自的優(yōu)劣以及適合的使用環(huán)境的詳細(xì)內(nèi)容,更多關(guān)于nginx和lvs對比的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
服務(wù)器使用Nginx部署Springboot項(xiàng)目的詳細(xì)教程(jar包)
這篇文章主要介紹了服務(wù)器使用Nginx部署Springboot項(xiàng)目的詳細(xì)教程(jar包),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07Nginx/Openresty中啟用http2支持的方法教程
Openresty/Nginx默認(rèn)是不支持http2的,需要將http2模塊編譯進(jìn)應(yīng)用中。這篇文章主要給大家介紹了關(guān)于在Nginx/Openresty中啟用http2支持的方法教程,文中介紹的非常詳細(xì),對大家具有一的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-07-07nginx開啟ws訪問和4層負(fù)載的編譯參數(shù)示例
這篇文章主要為大家介紹了nginx開啟ws訪問和4層負(fù)載的編譯參數(shù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07Nginx動態(tài)壓縮gzip的實(shí)現(xiàn)示例
有時候適當(dāng)?shù)膲嚎s傳輸?shù)奈募PP或網(wǎng)站的性能有極大的提升,本文主要介紹了Nginx動態(tài)壓縮gzip的實(shí)現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下2024-08-08Nginx如何配置Http、Https、WS、WSS的方法步驟
這篇文章主要介紹了Nginx如何配置Http、Https、WS、WSS的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05阿里云國際版使用Nginx作為HTTPS轉(zhuǎn)發(fā)代理服務(wù)器的處理方法
本文介紹了使用NGINX作為HTTPS流量轉(zhuǎn)發(fā)代理的兩種方法。它總結(jié)了NGINX使用HTTP?CONNECT隧道和NGINX流充當(dāng)HTTPS轉(zhuǎn)發(fā)代理的解決方案的原則,環(huán)境構(gòu)建要求,應(yīng)用場景和關(guān)鍵問題2022-05-05