負載均衡 LVS vs Nginx 對比,還傻傻分不清?

来源:https://www.cnblogs.com/javastack/archive/2022/04/26/16194825.html
-Advertisement-
Play Games

作者:等不到的口琴 鏈接:www.cnblogs.com/Courage129/p/14383897.html 今天總結一下負載均衡中LVS與Nginx的區別,好幾篇博文一開始就說LVS是單向的,Nginx是雙向的,我個人認為這是不准確的,LVS三種模式中,雖然DR模式以及TUN模式只有請求的報文經 ...


作者:等不到的口琴
鏈接:www.cnblogs.com/Courage129/p/14383897.html

今天總結一下負載均衡中LVS與Nginx的區別,好幾篇博文一開始就說LVS是單向的,Nginx是雙向的,我個人認為這是不准確的,LVS三種模式中,雖然DR模式以及TUN模式只有請求的報文經過Director,但是NAT模式,Real Server回覆的報文也會經過Director Server地址重寫:

首先要清楚的一點是,LVS是一個四層的負載均衡器,雖然是四層,但並沒有TCP握手以及分手,只是偷窺了IP等信息,而Nginx是一個七層的負載均衡器,所以效率勢必比四層的LVS低很多,但是可操作性比LVS高,後面所有的討論都是基於這個區別。

為什麼四冊比七層效率高?

四層是TCP層,使用IP+埠四元組的方式。只是修改下IP地址,然後轉發給後端伺服器,TCP三次握手是直接和後端連接的。只不過在後端機器上看到的都是與代理機的IP的established而已,LVS中沒有握手。

7層代理則必須要先和代理機三次握手後,才能得到7層(HTT層)的具體內容,然後再轉發。意思就是代理機必須要與client和後端的機器都要建立連接。顯然性能不行,但勝在於七層,人工可操作性高,能寫更多的轉發規則。

Nginx特點

Nginx 專為性能優化而開發,性能是其最重要的要求,十分註重效率,有報告 Nginx 能支持高達 50000 個併發連接數。

正向代理與反向代理

正向代理:區域網中的電腦用戶想要直接訪問伺服器是不可行的,伺服器可能Hold不住,只能通過代理伺服器來訪問,這種代理服務就被稱為正向代理,特點是客戶端知道自己訪問的是代理伺服器。

反向代理:客戶端無法感知代理,因為客戶端訪問網路不需要配置,只要把請求發送到反向代理伺服器,由反向代理伺服器去選擇目標伺服器獲取數據,然後再返回到客戶端。

此時反向代理伺服器和目標伺服器對外就是一個伺服器,暴露的是代理伺服器地址,隱藏了真實伺服器 IP 地址。

負載均衡

客戶端發送多個請求到伺服器,伺服器處理請求,有一些可能要與資料庫進行交互,伺服器處理完畢之後,再將結果返回給客戶端。

普通請求和響應過程如下圖:


但是隨著信息數量增長,訪問量和數據量增長,單台的Server以及Database就成了系統的瓶頸,這種架構無法滿足日益增長的需求,這時候要麼提升單機的性能,要麼增加伺服器的數量。

關於提升性能,這兒就不贅述,提提如何增加伺服器的數量,構建集群,將請求分發到各個伺服器上,將原來請求集中到單個伺服器的情況改為請求分發到多個伺服器,也就是我們說的負載均衡。

圖解負載均衡:

關於伺服器如何拆分組建集群,這兒主要講講負載均衡,也就是圖上的Proxy,可以是LVS,也可以是Nginx。假設有 15 個請求發送到代理伺服器,那麼由代理伺服器根據伺服器數量,這兒假如是平均分配,那麼每個伺服器處理 5 個請求,這個過程就叫做負載均衡。

動靜分離

為了加快網站的解析速度,可以把動態頁面和靜態頁面交給不同的伺服器來解析,加快解析的速度,降低由單個伺服器的壓力。

動靜分離之前的狀態

動靜分離之後

光看兩張圖可能有人不理解這樣做的意義是什麼,我們在進行數據請求時,以淘寶購物為例,商品詳情頁有很多東西是動態的,隨著登錄人員的不同而改變,例如用戶ID,用戶頭像,但是有些內容是靜態的,例如商品詳情頁,那麼我們可以通過CDN(全局負載均衡與CDN內容分發)將靜態資源部署在用戶較近的伺服器中,用戶數據信息安全性要更高,可以放在某處集中,這樣相對於將說有數據放在一起,能分擔主伺服器的壓力,也能加速商品詳情頁等內容傳輸速度。

Nginx的優勢

可操作性大

Nginx是一個應用層的程式,所以用戶可操作性的空間大得多,可以作為網頁靜態伺服器,支持 Rewrite 重寫規則;支持 GZIP 壓縮,節省帶寬;可以做緩存;可以針對 http 應用本身來做分流策略,靜態分離,針對功能變數名稱、目錄結構等相比之下 LVS 並不具備這樣的功能,所以 nginx 單憑這點可以利用的場合就遠多於 LVS 了;但 nginx 有用的這些功能使其可調整度要高於 LVS,所以經常要去觸碰,人為出現問題的幾率也就大

網路依賴小

nginx 對網路的依賴較小,理論上只要 ping 得通,網頁訪問正常,nginx 就能連得通,nginx 同時還能區分內外網,如果是同時擁有內外網的節點,就相當於單機擁有了備份線路;LVS 就比較依賴於網路環境,目前來看伺服器在同一網段內並且 LVS 使用 direct 方式分流,效果較能得到保證。另外註意,LVS 需要向托管商至少申請多於一個 ip 來做 visual ip

安裝簡單

nginx 安裝和配置比較簡單,測試起來也很方便,因為它基本能把錯誤用日誌列印出來。LVS 的安裝和配置、測試就要花比較長的時間,因為同上所述,LVS 對網路依賴性比較大,很多時候不能配置成功都是因為網路問題而不是配置問題,出了問題要解決也相應的會麻煩的多

nginx 也同樣能承受很高負載且穩定,但負載度和穩定度差 LVS 還有幾個等級:nginx 處理所有流量所以受限於機器 IO 和配置;本身的 bug 也還是難以避免的;nginx 沒有現成的雙機熱備方案,所以跑在單機上還是風險比較大,單機上的事情全都很難說

支持健康檢查以及請求重發

nginx 可以檢測到伺服器內部的故障(健康檢查),比如根據伺服器處理網頁返回的狀態碼、超時等等,並且會把返回錯誤的請求重新提交到另一個節點。目前 LVS 中 ldirectd 也能支持針對伺服器內部的情況來監控,但 LVS 的原理使其不能重發請求。比如用戶正在上傳一個文件,而處理該上傳的節點剛好在上傳過程中出現故障,nginx 會把上傳切到另一臺伺服器重新處理,而 LVS 就直接斷掉了

LVS 的優勢

抗負載能力強

因為 LVS 工作方式的邏輯是非常簡單的,而且工作在網路的第 4 層,僅作請求分發用,沒有流量,所以在效率上基本不需要太過考慮。LVS 一般很少出現故障,即使出現故障一般也是其他地方(如記憶體、CPU 等)出現問題導致 LVS 出現問題

配置性低

這通常是一大劣勢同時也是一大優勢,因為沒有太多的可配置的選項,所以除了增減伺服器,並不需要經常去觸碰它,大大減少了人為出錯的幾率

工作穩定

因為其本身抗負載能力很強,所以穩定性高也是順理成章的事,另外各種 LVS 都有完整的雙機熱備方案,所以一點不用擔心均衡器本身會出什麼問題,節點出現故障的話,LVS 會自動判別,所以系統整體是非常穩定的

無流量

LVS 僅僅分發請求,而流量並不從它本身出去,所以可以利用它這點來做一些線路分流之用。沒有流量同時也保住了均衡器的 IO 性能不會受到大流量的影響

LVS 基本上能支持所有應用,因為 LVS 工作在第 4 層,所以它可以對幾乎所有應用做負載均衡,包括 http、資料庫、聊天室等

參考:https://www.jianshu.com/p/3ed7575c8c47

近期熱文推薦:

1.1,000+ 道 Java面試題及答案整理(2022最新版)

2.勁爆!Java 協程要來了。。。

3.Spring Boot 2.x 教程,太全了!

4.別再寫滿屏的爆爆爆炸類了,試試裝飾器模式,這才是優雅的方式!!

5.《Java開發手冊(嵩山版)》最新發佈,速速下載!

覺得不錯,別忘了隨手點贊+轉發哦!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 最近在做項目時候,遇到一個這樣子的需求, 點到卡包裡面卡券使用使用,需要展示卡券使用附近門店, 思路 資料庫地址表設計 通用的區域街道地址表tz_sys_area 欄位名稱 類型 備註 area_id bigint 區域ID area_name varchar(32) 區功能變數名稱稱 parent_ ...
  • 前言 大家都很喜歡聽歌吧,沒有人不喜歡聽歌。心情好的時候要聽歌,心情不好的時候也要聽歌,反正歌是大家都喜歡聽的。 最近我想在網站上下載幾首音樂放到我的u盤裡聽,但是上網上一找,各大音樂網站下載歌曲(尤其是好聽的歌曲)都需要vip。 對於像我這樣的窮人來說,肯定是不會花幾十塊錢去下載幾首音樂啦,而且作 ...
  • C++類與對象(3)—多態 一個介面有多種形態,傳入的對象不一樣,同一個介面執行的操作不同 多態的基本概念 多態分為兩類 靜態多態:函數重載和運算符重載屬於靜態多態,復用函數名 動態多態:派生類和虛函數實現運行時多態 靜態多態胡動態多態的區別 靜態多態的函數地址早綁定,編譯階段搞定函數地址 動態多態 ...
  • 前言 碌者勞其心力,懶人使用工具。程式員作為懶人推動社會進步,有目共睹。 adb 已提供了開發者可以使用的全部工具,但是重覆執行一系列adb命令也令人心煩,所以,如果業務需求固定,直接在python腳 本執行adb命令。 核心代碼很簡單 cmd = 'adb shell' os.system(cmd ...
  • 朴素的字元串匹配演算法的時間複雜度為O(m*n),m、n分別為主串、模式串的長度。容易理解的是,主串和模式串的指針同步進行,當遇到不匹配的字元時,主串指針將移動到當前指針下一位,因此最壞情況下m個字元都要匹配n次。而KMP演算法能在O(m + n)的時間複雜度內完成查找,原理不再介紹,下麵介紹實現過程。 ...
  • 對抗防採集選擇python更方便些,如果需要處理複雜的網頁,解析網頁內容生成結構化數據或者對網頁內容精細的解析則可以選擇java,簡單一點的數據採集我們可以選擇python的爬蟲,需要具體到結構的化採集存儲最好採用java ...
  • 今天給大家分享啥呢? 1.聲音的基礎 (1)聲音是由震動產生的,表現為波的形式。波有頻率,振幅等參數。對於聲波而言:頻率越大,音調越高,反正越低。振幅越大,聲音越大,反之越小。 (2)採樣率,幀率:波是連續的(無窮的),電腦的存儲是離散(有限)的。要想用有限存儲無限,幾乎不可能。因此,要每隔一段時 ...
  • 一個去阿裡面試的小伙伴私信我說:今天被一個死鎖的問題難到了。 平常我都特意看了死鎖這塊的內容,但是回答的時候就想不起來。 這裡可能存在一個誤區,認為技術是要靠記的。 大家可以想想,平時寫代碼的時候,這些代碼是背下來的嗎? 遇到一個需求的時候,能夠立刻提供解決思路,這個也是記下來的嗎? 所有的技術問題 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...