糯米文學吧

位置:首頁 > 職業 > 系統架構師

系統架構師知識:負載均衡

負載均衡(Load Balance),顧名思義,是把服務的併發請求均衡地負載到後端多個具有相同能力的服務進行處理分擔,以廉價有效透明的方式擴展網絡設備或服務的帶寬,增加吞吐量,增強服務的整體處理能力,提供服務的靈活性和可用性。

系統架構師知識:負載均衡

  1、什麼是負載均衡?

常見的典型的負載均衡應用場景:

(1)、web集羣:將大量的併發訪問或數據流量分擔到多台節點設備上分別處理,減少用户等待響應的時間

(2)、MapReduce:單個重負載的運算分擔到多台節點設備上做並行處理,每個節點設備處理結束後,將結果彙總,返回給⽤户,系統處理能⼒得到大幅度提高。

  2、負載均衡算法

負載均衡算法是負載均衡設備(包括虛擬設備或相關軟件)在執行負載均衡調度,選擇具體處理的後端服務的時候使用的調度和分發的邏輯。

負載均衡的算法只是規定了調度和分發的邏輯,在不同的負載均衡方案中都可能使用相同和(或)類似的算法,它只是負載均衡方案的一部分。

常見的主流負載均衡算法包括:

(1)、輪詢算法:Round Robin/Weight Round Robin Scheduling

輪詢算法通過依次輪叫的方式依次將請求調度不同的.後端服務器(Real Server)。通常可以分為普通輪詢和加權輪詢兩種方式。算法的優點是簡潔且無狀態。

算法簡單表示為:i = ( i + 1 ) mod n

(2)、Hash算法: 隨機數Hash,Sources Hashing Scheduling

Hash算法,又叫取餘算法。一般是對請求報文中的某項數據(key,一般常用客户端來源IP)計算Hash值,然後按機器數量(n)取模。

算法簡單表示為:idx = Hash(key) % n

Hash算法中,Key的選擇常用實踐如下:

a、請求時間或隨機數

特點是簡單,具有一定分散性,但不穩定,一般用於要求不高的負載均衡場景。

b、來源IP

特點是簡單。如果客户的分佈比較廣,這種方式分散性較好。但如果較多的客户請求來源於同一IP(公司網絡通過路由器上網),分散效果較差。

大多負載均衡設備都支持這種算法,著名的nginx和LVS等軟件也支持。

(3)、一致性Hash算法:Consistency Hash Scheduling

一致性Hash算法最常用於分佈式緩存(如memcached、redis等)的定位,但同時也可以在系統或程序中用於負載均衡,該算法本來的意義就在於分散負載和快速定位。

推薦閲讀:截至目前看過的一致性Hash算法最佳介紹請猛擊這裏。

(4)、最少連接或請求數: (Weight)Least Connection/Request Scheduling

最小連接調度是一種動態調度算法,它通過服務器當前所活躍的連接數來估計服務器的負載情況。

算法主要邏輯是,調度設備或服務記錄後端服務器接受請求的計數,每次請求總是發給計數最小的服務器處理。

(5)、最大空閒:Most idle First(基於監控CPU,內存,帶寬等綜合評估)

(6)、平均最快響應:平均最快響應

(7)、最少流量:Least Traffic Scheduling

還有一種常見的就是基於會話的負載實現,但是嚴格來説Session(一般用於WEB)不能算是算法。Session實現負載均衡的主要過程為:首次請求記錄用户的SessionID,然後再通過輪詢等算法選擇後端服務器,如果用户後續使用同一SessionID發起請求,則無需再選擇服務器,直接轉發給前面根據SessionID找到的對應的後端服務器。

  3、負載均衡模式

負載均衡模式主要是指在整體方案中選擇從服務網絡的哪個層次或哪個產品來實現負載均衡方案。

(1)、外部模式(RR-DNS)

RR-DNS,即DNS輪詢模式,它的原理是利用DNS服務器支持同一域名配置多個獨立IP指向,然後輪詢解析指向IP實現多次訪問的調度和分發,實現負載均衡。

它的主要特點為:

a、負載均衡實現與後端服務完全沒有關係,有DNS在本地解析指向實現輪詢調度。這個方面來看性能最佳效率最高。

b、DNS服務無法檢測到後端服務器是否正常,在TTL失效前,會一直指向失效的服務器,這就要求在實踐生成中,必須解決後端服務器的高可用問題。

c、一般的第三方DNS服務提供商都支持該功能,但如果更新頻率高或附帶更新邏輯,一般會在系統內自鍵DNS服務,然後在註冊為公共DNS服務。

(2)、應用層模式

a、什麼是正向和反向代理?

正向代理:用户通過代理服務訪問internet, 把internet返回的數據轉發給用户。正向代理對於整個網絡請求,它的角色實際是客户端,代理客户對外的訪問請求。

反向代理:接受internet上用户的請求,轉發給內部的多台服務器處理,完成後轉發後端服務器的返回給對應的用户。反向代理對於整個網絡請求,它的角色實際是服務器,代理接受(accept)所有用户的請求。

b、反向代理應用模式

常見的反向代理應用模式,比如通過 Apache, nginx等Web服務器軟件實現WEB應用的負載均衡和高可用。

利用反向代理軟件實現負載均衡是性價比較高的模式。

(3)、網絡層模式

a、IP轉換

IP轉換模式的負載均衡一般是在網絡的IP層實現,通過報文改寫的方式實現VIP到多個內部IP的轉發調度,以達到負載均衡的效果。

它的主要特點包括:

網絡層方案,效率較高,穩定性較好;可與操作系統內核結合;工業級模式和方案;大部分商業設備和產品都以該方式為主;LVS的基本原理也類同。

b、IP轉換之LVS

LVS(Linux Virtual Server),是中國人(98年)寫的工業級的負載平衡調度解決方案,章文嵩博士是該開源軟件創始人。也是目前業界最流行的軟件方式實現負載均衡的模式之一。LVS也是利用IP轉發的原理實現大多數有商業產品實現的能力,並做了部分優化,主要有三種模式的應用。

(a)、通過NAT(Network Address Translation)實現虛擬服務器(VS/NAT)

(b)、通過IP隧道實現虛擬服務器(VS/TUN)

(c)、通過直接路由實現虛擬服務器(VS/DR)

關於LVS的介紹文章非常多,這裏就不再詳細介紹了,推薦參考閲讀<<構建高性能web站點>>和<<大型網站技術架構>>這兩本書中關於負載均衡的部分章節。

c、IP轉換之負載均衡設備

F5等負載均衡設備同樣是在網絡層實現負載均衡,但一般而言造價較為昂貴,性價比較低。