十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
下文給大家?guī)黻P(guān)于負載均衡那點事兒的一些淺見,希望能夠給大家在實際運用中帶來一定的幫助,負載均衡涉及的東西比較多,理論也不多,網(wǎng)上有很多書籍,今天我們就用創(chuàng)新互聯(lián)在行業(yè)內(nèi)累計的經(jīng)驗來做一個解答。

網(wǎng)絡(luò)負載均衡和代理是什么?
定義 是:
1:網(wǎng)絡(luò)負載均衡概覽
對網(wǎng)絡(luò)負載均衡進行了一個高層次的概括。多個客戶端向多個后端發(fā)起資源請求,負載均衡器處于客戶端和后端之間,簡單來說完成如下任務(wù):
服務(wù)發(fā)現(xiàn):系統(tǒng)中有哪些后端可用?這些后端的地址(也就是:負載均衡器如何同這些后端通信)?
健康檢查:哪些后端是健康的可以用于接收請求?
負載均衡:用什么算法來把獨立的請求分發(fā)給健康的后端?
命名抽象:每個客戶端不再需要知道每一個后端(服務(wù)發(fā)現(xiàn)),客戶端可以通過預(yù)定義的機制來找到負載均衡器,然后讓負載均衡器完成命名解析功能。這些機制包括內(nèi)置庫,以及路人皆知的 DNS/IP/端口 地址,后面會深入討論。
錯誤隔離:通過健康檢查以及一些其他的算法和技術(shù),負載均衡器的路由方法能夠有效的繞過癱瘓或過載的后端。這樣運維人員在面對系統(tǒng)故障時,就可以更加從容的進行錯誤處理。
成本和性能收益:分布式系統(tǒng)的網(wǎng)絡(luò)的一致性比較差。系統(tǒng)通常要跨越多個網(wǎng)絡(luò)區(qū)域。同一區(qū)域內(nèi),網(wǎng)絡(luò)資源通常是低售的;而在跨區(qū)域的情況下,超售則是常態(tài)(超售和低售的鑒別,是通過網(wǎng)卡上可消耗的帶寬和路由器之間的可用帶寬進行比對得出的結(jié)論)。智能的負載均衡會盡可能保證通信在同一區(qū)域內(nèi)進行,從而提高性能(降低延遲)并降低總體系統(tǒng)成本(降低區(qū)域間的帶寬和光纖需求)。
負載均衡器 vs 代理服務(wù)器
以及 Proxy 這兩個術(shù)語經(jīng)常會同樣對待,本文中也把這兩個詞條等價處理(賣弄一下:并非所有的代理都是負載均衡器,但是負載均衡是主流代理的首要功能)。
四層(連接/會話)負載均衡
2:TCP 終端四層負載均衡
圖 2 展示了一個傳統(tǒng)的四層 TCP 負載均衡器。這個例子中,客戶端向負載均衡器發(fā)起了一個 TCP 連接,負載均衡器 了這一連接(也就是說直接響應(yīng)了 SYN),接下來選擇一個后端,然后創(chuàng)建了到后端的新的 TCP 連接(就是發(fā)起了新的 SYN)。圖中的細節(jié)不需太過關(guān)注,后面的四層負載均衡章節(jié)會進行詳細討論。
七層(應(yīng)用)負載均衡
(應(yīng)用)負載均衡呢?例如下面幾個四層的案例:
圖 3 描述了七層的 HTTP/2 負載均衡。這里客戶端發(fā)起了對負載均衡的單個連接。負載均衡器連接到了兩個后端。當客戶端向負載均衡器發(fā)送兩個 HTTP/2 流的時候,兩個流會分別送往不同后端。這樣多工客戶端的大量不同的請求會被高效的分發(fā)給多個后端。這就是七層負載均衡對現(xiàn)代協(xié)議的重要性的來由(因為對應(yīng)用流量的洞察能力,七層負載均衡還有很多其他好處,后面會詳細描述)。
七層負載均衡和 OSI 模型
次:
2
服務(wù)發(fā)現(xiàn)
健康檢查
主動式:負載均衡器周期性的向后端發(fā)送 ping (例如一個發(fā)送到
被動式:負載均衡器通過對主數(shù)據(jù)流的分析來確定健康情況。比如一個四層負載均衡器,在發(fā)現(xiàn)連續(xù)三個連接錯誤的情況下,就會判定一個后端不可用;七層負載均衡可能會在連續(xù)三個 HTTP 503 響應(yīng)之后判定這一后端為不健康狀態(tài)。
負載均衡
Session 粘連
TLS 終端
觀測性
安全性和拒絕服務(wù)***防范
配置和控制平面
還有很多
3
中間代理
4:中間代理負載均衡拓撲
圖 4 描述的這種拓撲對多數(shù)讀者來說都是最熟悉的。這一類別包括了 Cisco、Juniper、F5 等硬件產(chǎn)品;云軟件解決方案例如 Amazone 的 ALB 和 NLB 以及 Google 的 Cloud Load Balancer,還有 HAProxy、NGINX 以及 Envoy 這樣的純軟件自主方案。中間代理方案的優(yōu)勢在于對用戶提供的簡便性。
邊緣代理
5:邊緣代理負載均衡拓撲
圖 5 實際上是中間代理的一種變體,這種負載均衡器可以通過 Internet 進行訪問。在這一場景下,負載均衡器通常需要提供一些附加的 “API 網(wǎng)關(guān)”類功能,例如 TLS 終端、頻率限制、認證以及流量路由等。優(yōu)勢和劣勢跟中間服代理類似。在一個大的面向 Internet 的分布式系統(tǒng)中,邊緣服務(wù)器通常是一個必要的組成部分。
嵌入式客戶庫
6:通過嵌入客戶端庫實現(xiàn)負載均衡
圖 6 所示的客戶端庫中。不同的庫所支持的功能差別很大,此類產(chǎn)品中最知名的功能豐富的包括 Finagle、Eureka/Ribbon/Hystrix 以及 gRPC(大致基于 Google 的一個稱為 Stubby 的內(nèi)部系統(tǒng))。這種方式的好處是把所有負載均衡特性完全分布到每個客戶端,從而避免了前面說到的單點失敗和性能瓶頸。
Sidecar 代理
7:Sidecar 代理實現(xiàn)負載均衡
嵌入式客戶庫的一個變體就是
不同負載均衡器拓撲的總結(jié)和優(yōu)劣勢
4
四層負載均衡器還有用么?
服務(wù)對服務(wù)的場景中取代四層負載均衡器,但四層負載均衡器對邊緣通信還是非常有意義的,這是因為所有現(xiàn)代的大型分布式架構(gòu)都是用了兩層的四層/七層負載均衡架
TCP/UDP 終端負載均衡器
8:四層終端負載均衡器
圖 8中的終端負載均衡器。這和我們介紹四層負載均衡的時候講到的內(nèi)容是一致的。這種類型的負載均衡器中,使用了兩個的獨立的 TCP 連接:一個用于客戶端和負載均衡器之間;另一個用在負載均衡器和后端之間。
TCP/UDP 透傳負載均衡器
圖 9所說的透傳負載均衡器。這種類型的負載均衡過程中,TCP連接沒有被負載均衡器終結(jié),每個鏈接的數(shù)據(jù)包,在經(jīng)過連接分析和網(wǎng)絡(luò)地址轉(zhuǎn)換(
連接跟蹤:跟蹤全部活動 TCP 連接的過程。這里包括很多內(nèi)容,例如握手是否完成,是否收到 FIN,連接發(fā)呆了多久,這個連接轉(zhuǎn)發(fā)給哪一個后端等。
NAT:是使用連接跟蹤數(shù)據(jù),來更改數(shù)據(jù)包的 IP/端口信息使之穿過負載均衡器的過程。
;同時還會把源 IP 替換為負載均衡器的 IP。當后端響應(yīng) TCP 連接時,數(shù)據(jù)包就會返回給負載均衡器,負載均衡器中的鏈接跟蹤和 NAT 再次發(fā)揮作用,反向送回數(shù)據(jù)包。
性能和資源消耗:透傳型的負載均衡器沒有終結(jié) TCP 連接,無需緩存任何的 TCP 連接窗口。每個連接的狀態(tài)存儲非常小,通常使用高效的哈希表查詢即可。正因如此,相對終端負載均衡器來說,透傳型負載均衡器能夠處理更大數(shù)量的活動鏈接,單位時間內(nèi)處理更多的數(shù)據(jù)包。
允許后端進行擁塞控制: 是一種機制,讓 Internete 端點對外發(fā)數(shù)據(jù)進行流量控制,防止超量使用帶寬和緩沖。
為直接服務(wù)器返回(Direct Server Return = DSR)做基線,以及四層負載均衡集群:透傳負載均衡也是高級四層負載均衡(例如后面將要說到的 DSR 和使用分布式一致性哈希的集群)的基礎(chǔ)。
Direct Server Return (DSR)
10:四層 DSR
圖 10展示的就是 DSR 負載均衡。DSR 構(gòu)建在前文提到的透傳負載均衡器的基礎(chǔ)之上。DSR 是一種優(yōu)化方案,只有入站/請求數(shù)據(jù)包通過負載均衡;出站/響應(yīng)數(shù)據(jù)包繞過負載均衡器直接返回給客戶端。使用 DSR 方案的有趣之處在于,很多負載的響應(yīng)比請求數(shù)據(jù)量大很多(比如典型的 HTTP 請求和響應(yīng))。假設(shè) 10% 的流量是請求,另外 90% 是響應(yīng),如果使用了 DSR 負載均衡,僅需要 1/10 的容量就能夠滿足系統(tǒng)需要。從前的負載均衡非常昂貴,這一方案能夠顯著降低系統(tǒng)成本并提高可靠性(更少就是更好)。DSR 負載均衡器用下面的方式擴展了透傳負載均衡的概念:
使用高可用配對方式實現(xiàn)容錯
圖 11 所示。典型的高可用負載均衡器配置會滿足如下設(shè)計:
副作用:
使用分布式一致性哈希進行容錯和伸縮
圖 12 模式的并行四層負載均衡系統(tǒng)。這類系統(tǒng)的目標是:
fault tolerance and scaling via clustering and distributed consistent hashing 的最佳引用,具體工作模式是:
任播來保證所有單一 Flow 能夠到達同一個邊緣路由器。一個 Flow 通常是一個由源 IP/端口和目的 IP/端口 構(gòu)成的元組。(簡單說,ECMP 是一個在使用一致性哈希連接的獨立加權(quán)網(wǎng)絡(luò)上分發(fā)數(shù)據(jù)包的方式)。邊緣路由器并不在意哪些數(shù)據(jù)包去了哪里。一般會傾向于把來自于一個 Flow 所有數(shù)據(jù)包發(fā)送給同一套連接,以此避免亂序包導(dǎo)致的性能損失。
一致性哈希選擇一個后端。從負載均衡器到后端的數(shù)據(jù)包會使用 GRE 進行封裝。
Maglev 以及 Amazon 的 Network Load Balancer (NLB)。目前還沒有任何開源負載均衡器實現(xiàn)了這一設(shè)計,然而據(jù)我所知,有公司要在 2018 年發(fā)布一個這樣的產(chǎn)品。我很期待他的出現(xiàn),這一產(chǎn)品將會填補開源網(wǎng)絡(luò)組件的重要空白。
當前七層負載均衡的技術(shù)狀態(tài)
協(xié)議支持
動態(tài)配置
Istio就是一個這種系統(tǒng)的例子。請參考 Service Mesh Data Plan vs Control Plan 來獲取更多這方面的內(nèi)容。
高級負載均衡
可觀測性
擴展性
容錯
更多
5
13:全局負載均衡
會有越來越多的獨立負載均衡器以商品設(shè)備的面目呈現(xiàn)。我認為真正的創(chuàng)新和商業(yè)機會來自于控制平面。展示了一個全局負載均衡系統(tǒng)。在本例中有一些不同的東西:
Envoy's universal data plane API
6
看了以上關(guān)于負載均衡那點事兒的一些淺見,如果大家還有什么地方需要了解的可以在創(chuàng)新互聯(lián)行業(yè)資訊里查找自己感興趣的或者找我們的專業(yè)技術(shù)工程師解答的,創(chuàng)新互聯(lián)技術(shù)工程師在行業(yè)內(nèi)擁有十幾年的經(jīng)驗了。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。