負載均衡


一、負載均衡概念

負載均衡,英文名稱為Load Balance,就是指將負載(工作任務)進行平衡、分攤到多個操作單元上進行運行,從而協同完成工作任務。它是建立在現有的網絡基礎架構之上,給企業提供了更廉價更有效的擴展選擇。

二、負載均衡的作用

負載均衡建立在現有網絡結構之上,它提供了一種廉價有效透明的方法擴展網絡設備和服務器的帶寬、增加吞吐量、加強網絡數據處理能力、提高網絡的靈活性和可用性。

三、負載均衡的分類

負載均衡根據不同的應用場景進行了不同的分類

1、根據軟硬件場景分類

(1)軟件負載均衡

  軟件負載均衡技術是在一個或多個交互的網絡系統中的多台服務器上安裝一個或多個相應的負載均衡軟件來實現的一種均衡負載技術。軟件可以很方便的安裝在服務器上,並且實現一定的均衡負載功能。軟件負載均衡技術配置簡單、操作也方便,最重要的是成本很低。該技術適用於一些中小型網站系統,可以滿足一般的均衡負載需求。常見的軟件負載均衡有:LVS、Nginx、HAProxy。

(2)硬件負載均衡

  硬件負載均衡技術是在多台服務器間安裝相應的負載均衡設備,也就是負載均衡器來完成均衡負載技術,與軟件負載均衡技術相比,能達到更好的負載均衡效果。由於硬件負載均衡技術需要額外的增加負載均衡器,成本比較高,所以適用於流量高的大型網站系統。常見的負載均衡器有:F5負載均衡器、思科、Radware的AppDirector系列、梭子魚負載均衡

2、根據地域場景分類

(1)本地負載均衡

  本地負載均衡針對本地范圍的服務器群做負載均衡,本地負載均衡不需要花費高額成本購置高性能服務器,只需利用現有設備資源,就可有效避免服務器單點故障造成數據流量的損失,通常用來解決數據流量過大、網絡負荷過重的問題。同時它擁有形式多樣的均衡策略把數據流量合理均衡的分配到各台服務器。如果需要在現在服務器上升級擴充,不需改變現有網絡結構、停止現有服務,僅需要在服務群中簡單地添加一台新服務器。

(2)全局負載均衡

  全局負載均衡針對不同地理位置、不同網絡結構的服務器群做負載均衡,全局負載均衡主要解決全球用戶只需一個域名或IP地址就能訪問到離自己距離最近的服務器獲得最快的訪問速度,它在多區域都擁有自己的服務器站點,同時也適用於那些子公司站點分布廣的大型公司通過企業內部網(Intranet)達到資源合理分配的需求。全局負載均衡具備的特點:

  • 提高服務器響應速度,解決網絡擁塞問題,達到高質量的網絡訪問效果。
  • 能夠遠距離為用戶提供完全的透明服務,真正實現與地理位置無關性
  • 能夠避免各種單點失效,既包括數據中心、服務器等的單點失效,也包括專線故障引起的單點失效。

3、根據OSI通信模型場景分類

OSI是一個開放性的通信系統互連參考模型,OSI模型有7層結構, OSI的7層從上到下分別是 7、應用層;6、表示層;5、會話層;4、傳輸層;3、網絡層;2、數據鏈路層;1、物理層;其中高層(即7、6、5、4層)定義了應用程序的功能,下面3層(即3、2、1層)主要面向通過網絡的端到端的數據流。在這七層模型種,高層次都是依賴於低層次的。層次越高,使用起來越方便。下面兩張圖是網絡上找的OSI圖:

 

 

 

 

從上圖可以看出:

TELNET、HTTP、FTP、NFS、SMTP、DNS等屬於第七層應用層的概念。

TCP、UDP、SPX等屬於第四層傳輸層的概念。

IP、IPX等屬於第三層網絡層的概念。

ATM、FDDI等屬於第二層數據鏈路層的概念。

根據負載均衡技術實現在OSI七層模型的不同層次,是可以給負載均衡分類的,工作在應用層的負載均衡稱之為七層負載均衡、工作在傳輸層的負載均衡稱之為四層負載均衡。其中最常用的是四層和七層負載均衡,具體分類如下:

(1)二層負載均衡

  二層負載均衡是基於數據鏈路層的負載均衡。負載均衡服務器對外提供一個VIP(虛IP),集群中不同的機器采用相同IP地址,但是機器的MAC地址不一樣。當負載均衡服務器接受到請求之后,通過改寫報文的目標MAC地址的方式將請求轉發到目標機器實現負載均衡。在Linux平台上最好的鏈路層負載均衡開源產品是LVS(Linux Virtual Server)。工作原理如下圖:

 

 

 

(2)三層負載均衡

  三層負載均衡是基於網絡層的負載均衡,負載均衡服務器對外依然提供一個VIP(虛IP),但是集群中不同的機器采用不同的IP地址。當負載均衡服務器接受到請求之后,根據不同的負載均衡算法,通過IP將請求轉發至不同的真實服務器。

(3)四層負載均衡

  四層負載均衡工作在OSI模型的傳輸層,由於在傳輸層,只有TCP/UDP協議,這兩種協議中除了包含源IP、目標IP以外,還包含源端口號及目的端口號。四層負載均衡服務器在接受到客戶端請求后,以后通過修改數據包的地址信息(IP+端口號)將流量轉發到應用服務器。

(4)七層負載均衡

  七層負載均衡工作在OSI模型的應用層,應用層協議較多,常用http、radius、dns等。七層負載就可以基於這些協議來負載。這些應用層協議中會包含很多有意義的內容。比如同一個Web服務器的負載均衡,除了根據IP加端口進行負載外,還可根據七層的URL、瀏覽器類別、語言來決定是否要進行負載均衡。 比如Nginx反向代理實現負載均衡。

四、負載均衡常用的算法

負載均衡算法分為兩類:

  • 靜態負載均衡
  • 動態負載均衡

常見的靜態均衡算法:輪詢法、隨機法、源地址哈希法、加權輪詢法、加權隨機法、鍵值范圍法。

常見的動態負載均衡算法:最小連接數法、最快響應速度法、觀察模式法。

1、輪詢法

將請求按順序輪流地分配到每個節點上,不關心每個節點實際的連接數和當前的系統負載。

  • 優點:簡單高效,易於水平擴展,每個節點滿足字面意義上的均衡;
  • 缺點:沒有考慮機器的性能問題,根據木桶最短木板理論,集群性能瓶頸更多的會受性能差的服務器影響。

 

 

2、隨機法

將請求隨機分配到各個節點。由概率統計理論得知,隨着客戶端調用服務端的次數增多,其實際效果越來越接近於平均分配,也就是輪詢的結果。

  • 優點:簡單高效,易於水平擴展,每個節點滿足字面意義上的均衡;
  • 缺點:沒有考慮機器的性能問題,根據木桶最短木板理論,集群性能瓶頸更多的會受性能差的服務器影響。

 

 

3、源地址哈希法

源地址哈希的思想是根據客戶端的IP地址,通過哈希函數計算得到一個數值,用該數值對服務器節點數進行取模,得到的結果便是要訪問節點序號。采用源地址哈希法進行負載均衡,同一IP地址的客戶端,當后端服務器列表不變時,它每次都會落到到同一台服務器進行訪問。

  • 優點:相同的IP每次落在同一個節點,可以人為干預客戶端請求方向,例如灰度發布;
  • 缺點:如果某個節點出現故障,會導致這個節點上的客戶端無法使用,無法保證高可用。當某一用戶成為熱點用戶,那么會有巨大的流量涌向這個節點,導致冷熱分布不均衡,無法有效利用起集群的性能。所以當熱點事件出現時,一般會將源地址哈希法切換成輪詢法。

 

 

4、加權輪詢法

不同的后端服務器可能機器的配置和當前系統的負載並不相同,因此它們的抗壓能力也不相同。給配置高、負載低的機器配置更高的權重,讓其處理更多的請;而配置低、負載高的機器,給其分配較低的權重,降低其系統負載,加權輪詢能很好地處理這一問題,並將請求順序且按照權重分配到后端。加權輪詢算法要生成一個服務器序列,該序列中包含n個服務器。n是所有服務器的權重之和。在該序列中,每個服務器的出現的次數,等於其權重值。並且,生成的序列中,服務器的分布應該盡可能的均勻。比如序列{a, a, a, a, a, b, c}中,前五個請求都會分配給服務器a,這就是一種不均勻的分配方法,更好的序列應該是:{a, a, b, a, c, a, a}。

  • 優點:可以將不同機器的性能問題納入到考量范圍,集群性能最優最大化;
  • 缺點:生產環境復雜多變,服務器抗壓能力也無法精確估算,靜態算法導致無法實時動態調整節點權重,只能粗糙優化。

5、加權隨機法

與加權輪詢法一樣,加權隨機法也根據后端機器的配置,系統的負載分配不同的權重。不同的是,它是按照權重隨機請求后端服務器,而非順序。

6、鍵值范圍法

根據鍵的范圍進行負載,比如0到10萬的用戶請求走第一個節點服務器,10萬到20萬的用戶請求走第二個節點服務器……以此類推。

  • 優點:容易水平擴展,隨着用戶量增加,可以增加節點而不影響舊數據;
  • 缺點:容易負債不均衡,比如新注冊的用戶活躍度高,舊用戶活躍度低,那么壓力就全在新增的服務節點上,舊服務節點性能浪費。而且也容易單點故障,無法滿足高可用。

7、最小連接數法

根據每個節點當前的連接情況,動態地選取其中當前積壓連接數最少的一個節點處理當前請求,盡可能地提高后端服務的利用效率,將請求合理地分流到每一台服務器。俗稱閑的人不能閑着,大家一起動起來。

  • 優點:動態,根據節點狀況實時變化;
  • 缺點:提高了復雜度,每次連接斷開需要進行計數;
  • 實現:將連接數的倒數當權重值。

8、最快響應速度法

根據請求的響應時間,來動態調整每個節點的權重,將響應速度快的服務節點分配更多的請求,響應速度慢的服務節點分配更少的請求,俗稱能者多勞,扶貧救弱。

  • 優點:動態,實時變化,控制的粒度更細,跟靈敏;
  • 缺點:復雜度更高,每次需要計算請求的響應速度;
  • 實現:可以根據響應時間進行打分,計算權重。

9、觀察模式法

觀察者模式是綜合了最小連接數和最快響應度,同時考量這兩個指標數,進行一個權重的分配。

五、參考資料

1、https://baike.baidu.com/item/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1/932451?fr=aladdin#4

2、https://blog.csdn.net/qq_29373285/article/details/88777503


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM