負載均衡在分布式系統是怎么實現的?如何做到負載均衡呢


https://blog.csdn.net/X1021333506/article/details/80975462

 

Nginx詳解(正向代理、反向代理、負載均衡原理)https://blog.csdn.net/tsummerb/article/details/79248015

在網站創立初期,我們一般都使用單台機器對台提供集中式服務,但隨着業務量越來越大,無論性能還是穩定性上都有了更大的挑戰。這時候我們就會想到通過擴容的方式來提供更好的服務。我們一般會把多台機器組成一個集群對外提供服務。然而,我們的網站對外提供的訪問入口都是一個的,比如www.taobao.com。那么當用戶在瀏覽器輸入www.taobao.com的時候如何將用戶的請求分發到集群中不同的機器上呢,這就是負載均衡在做的事情。

 

 

軟件負載解決的兩個核心問題是:選誰、轉發,其中最著名的是LVS(Linux Virtual Server)。

 

負載均衡分類

 

現在我們知道,負載均衡就是一種計算機網絡技術,用來在多個計算機(計算機集群)、網絡連接、CPU、磁碟驅動器或其它資源中分配負載,以達到最佳化資源使用、最大化吞吐率、最小化響應時間、同時避免過載的目的。那么,這種計算機技術的實現方式有多種。大致可以分為以下幾種,其中最常用的是四層和七層負載均衡:

 

 

二層負載均衡

 

負載均衡服務器對外依然提供一個VIP(虛IP),集群中不同的機器采用相同IP地址,但機器的MAC地址不一樣。當負載均衡服務器接受到請求之后,通過改寫報文的目標MAC地址的方式將請求轉發到目標機器實現負載均衡。

 

三層負載均衡

 

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

 

四層負載均衡

 

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

 

七層負載均衡

 

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

對於一般的應用來說,有了Nginx就夠了。Nginx可以用於七層負載均衡。但是對於一些大的網站,一般會采用DNS+四層負載+七層負載的方式進行多層次負載均衡。

 

 

 

常用負載均衡工具

 

硬件負載均衡性能優越,功能全面,但價格昂貴,一般適合初期或者土豪級公司長期使用。因此軟件負載均衡在互聯網領域大量使用。常用的軟件負載均衡軟件有Nginx、LVS、HaProxy等。

Nginx/LVS/HAProxy是目前使用最廣泛的三種負載均衡軟件。

1、LVS主要用來做四層負載均衡。

 

2、Nginx

 

 

 

Nginx(發音同engine x)是一個網頁服務器,它能反向代理HTTP、HTTPS,、SMTP、POP3、IMAP的協議鏈接,以及一個負載均衡器和一個HTTP緩存。

 

Nginx主要用來做七層負載均衡。

並發性能:官方支持每秒5萬並發,實際國內一般到每秒2萬並發,有優化到每秒10萬並發的。具體性能看應用場景。

 

特點:

  • 模塊化設計:良好的擴展性,可以通過模塊方式進行功能擴展。

  • 高可靠性:主控進程和worker是同步實現的,一個worker出現問題,會立刻啟動另一個worker。

  • 內存消耗低:一萬個長連接(keep-alive),僅消耗2.5MB內存。

  • 支持熱部署:不用停止服務器,實現更新配置文件,更換日志文件、更新服務器程序版本。

  • 並發能力強:官方數據每秒支持5萬並發;

  • 功能豐富:優秀的反向代理功能和靈活的負載均衡策略

 

Nginx的基本工作模式

 

 

 

一個master進程,生成一個或者多個worker進程。但這里master是使用root身份啟動的,因為nginx要工作在80端口。而只有管理員才有權限啟動小於低於1023的端口。master主要是負責的作用只是啟動worker,加載配置文件,負責系統的平滑升級。其它的工作是交給worker。那當worker被啟動之后,也只是負責一些web最簡單的工作,而其它的工作都是由worker中調用的模塊來實現的。

模塊之間是以流水線的方式實現功能的。流水線,指的是一個用戶請求,由多個模塊組合各自的功能依次實現完成的。比如:第一個模塊只負責分析請求首部,第二個模塊只負責查找數據,第三個模塊只負責壓縮數據,依次完成各自工作。來實現整個工作的完成。

它們是如何實現熱部署的呢?是這樣的,我們前面說master不負責具體的工作,而是調用worker工作,它只是負責讀取配置文件,因此當一個模塊修改或者配置文件發生變化,是由master進行讀取,因此此時不會影響到worker工作。在master進行讀取配置文件之后,不會立即把修改的配置文件告知worker。而是讓被修改的worker繼續使用老的配置文件工作,當worker工作完畢之后,直接當掉這個子進程,更換新的子進程,使用新的規則。

HAProxy是一個使用C語言編寫的自由及開放源代碼軟件,其提供高可用性、負載均衡,以及基於TCP和HTTP的應用程序代理。

3、Haproxy主要用來做七層負載均衡。

  • 靜態負載均衡算法包括:輪詢、比率、優先權。

  • 動態負載均衡算法包括:最少連接數、最快響應速度、觀察方法、預測法、動態性能分配、動態服務器補充、服務質量、服務類型、規則模式。

 

寫在最后:原文鏈接,非常感謝分享。

 


免責聲明!

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



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