負載均衡技術(一)———負載均衡技術介紹

weixin_34119545發表於2018-11-15

此文已由作者張小剛授權網易雲社群釋出。

歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。

 

本文主要是對負載均衡技術進行一個簡單的介紹,並結合在實際生產環境中負載均衡技術的應用情況,讓大家對負載均衡技術,以及這一技術在公司的應用情況有一個簡單的瞭解。

 

什麼是負載均衡技術

 

負載均衡技術,是現代計算機領域的基礎技術之一,其基本原理是通過執行在前面的負載均衡伺服器,根據執行的負載均衡演算法,將流量分配到後端伺服器上,從而提高整個系統的擴充套件能力,實現服務的並行擴充套件,同時,負載均衡技術還可以起到對外網遮蔽內網伺服器,從而提高系統的可用性。

 

常用的負載均衡方式有硬體負載均衡和軟體負載均衡兩種:

 

  • 硬體負載均衡:指的是採用專門負載均衡硬體裝置來進行負載均衡操作,由於由專門的硬體裝置進行,因此有很強的效能,但缺點是價格昂貴,擴充套件,升級成本較高,不利於進行二次開發。

  • 軟體負載均衡:就是用軟體來執行負載均衡操作,雖然效能比不上專門的硬體,但價格相對低廉(不需要專用的硬體),易擴充套件,便於進行二次開發,現在已經被大量公司採用,用於實際的生產服務環境中。本文的重點就是對於軟體負載均衡服務的介紹。

 

軟體負載均衡服務介紹

 

軟體負載均衡服務一般分為兩種:四層負載均衡和七層負載均衡,四層和七層指的是負載均衡服務執行的位置,分別對應ISO網路協議中的傳輸層和網路層。在實際應用中,四層負載均衡一般就是位於層的TCP協議(或者SSL協議)的負載均衡,而七層負載均衡就是HTTP協議(或者HTTPS)協議的負載均衡。

 

除此之外,還有針對ICMP,POP3郵件協議,針對資料庫協議的負載均衡等,但應用最為廣泛的,還是基於HTTP和TCP協議負載均衡,這也是由於實際應用環境決定的:HTTP協議是現在應用最為廣泛的應用層協議,也是基於“頁面”的老一代網際網路的基礎,得到了極為廣泛的應用,可以說,HTTP協議就是網際網路技術最重要的協議。而TCP協議作為傳輸層的基礎協議,可以直接相容應用層的各種協議。在實際的應用場景中,對於web服務,直接使用HTTP負載均衡,而對於需要長連線的,或者其他非HTTP協議的服務,如mysql,redis等,則統一使用TCP負載均衡。

 

常見的負載均衡服務有Apache,LVS,Nginx,Haproxy等:

 

  • 按照型別看,Apache,Nginx屬於七層負載均衡,LVS屬於四層負載均衡,Haproxy同時支援四層和七層負載均衡。

  • 按照功能看,LVS,Haproxy是專門的負載均衡伺服器,Apache和Nginx除了作為負載均衡伺服器外,還可以作為獨立的web伺服器,直接提供web服務。

 

負載均衡服務在生產環境中的應用

 

在一個系統中,負載均衡服務往往是執行在系統最前面的應用,起著承載系統流量,請求轉發,負載均衡的作用,下圖是公司中常見的兩種負載均衡服務的形式:

 

LVS作為入口的模式

 

在這種模式下,流量通過外層的LVS做四層負載均衡,然後經過nginx進行七層負載均衡,再轉發給後端服務,後端可以根據需要直接接應用伺服器或者在繼續對接負載均衡服務,具體架構如下圖所示:

 

Alt pic

 

上圖是現在杭研大部分負載均衡服務的應用形式,即通過LVS叢集的DR模式將流量分發到公用的Nginx叢集,然後對接給後端使用者。

 

場景分析

 

這種工作模式是針對一般的web應用設計的,LVS的單臂模式可以處理大量流量,而工作與後端的Nginx叢集,可以通過限流等方式來防止DDos攻擊,而通過共享IP,可以減少對外網IP資源的使用,而Nginx 的熱載入功能可以在不更改LVS配置的情況下新增後端的使用者伺服器。

 

Haproxy作為入口的模式

 

這種模式是通過Haproxy進行四層負載均衡,後面對接web伺服器或者其他負載均衡服務,架構如下圖所示:

 

Alt pic

 

場景分析

 

這種場景主要是針對兩種情況:

 

  • 一種是當有大流量上傳需求的時候(如網易相簿),由於Nginx在處理Post請求的時候會寫磁碟,當有大量上傳請求的時候可能會造成磁碟寫滿從而請求失敗的情況,因此在處理有大併發,大流量上傳的時候,採用的是使用Haproxy叢集,工作在七層負載均衡預設,用來處理使用者的上傳請求。

  • 第二種是直接使用四層負載均衡,由於LVS的DR模式有網路的限制(必須在同一個二層),而且需要修改應用伺服器的內容(繫結VIP,設定返回路由,關閉部分ARP響應)。而實際使用者的伺服器大部分不滿足這兩個條件,因此需要採用無侵入(基於FULL NAT模式),且無網路要求(基於四層協議)的Haproxy叢集來滿足這一需求。但是由於Haproxy的負載能力不如LVS(單程式模型,工作在使用者模式,雙向流量),因此會根據需要搭建多個Hapoxy叢集。

  • 在上面兩個不同情況下,Haproxy工作的模式不同。在第一種情況,Haproxy工作在七層負載均衡模式下,負責HTTP請求轉發。而第二種模式,Haproxy工作在四層負載均衡模式,相當於流量轉發的左右,一般用來處理不需要獲取原始IP的情況或者流量不是很大的情況。

 

總結

 

本文主要介紹了負載均衡服務的基礎知識和公司中負載均衡服務的應用情況,在下一篇文章中,會對常用的負載均衡伺服器:LVS,Haproxy,Nginx,Apache進行介紹。

 

免費體驗雲安全(易盾)內容安全、驗證碼等服務

更多網易技術、產品、運營經驗分享請點選

 

相關文章:
【推薦】 “網易有錢”sketch使用分享

相關文章