1. 程式人生 > >萬字雄文講透現代網路負載均衡和代理技術,終於弄懂負載均衡那點事

萬字雄文講透現代網路負載均衡和代理技術,終於弄懂負載均衡那點事

作者:Matt Klein

譯者:崔秀龍

原題:Introduction to modern network load balancing and proxying

最近我注意到,針對負載均衡和代理這兩項現代網路技術,有教育意義的介紹性材料相當稀缺。這引起我的思考:為什麼會這樣?在可靠的分佈系統的架構中,負載均衡是核心概念之一,這一地位要求有對應的高質量資訊。

然而經過搜尋之後,發現這方面的內容的確匱乏。Wikipedia 上的負載均衡 和 代理伺服器頁面只包含了一些相關主題的概念,這些概念的闡述,尤其是微服務架構相關的部分顯得相當概括和晦澀。Google 搜尋 Load Balancing,則會出現一些供應
商頁面,充斥了各種時髦用詞,卻罕有細節。

本文裡我會嘗試對現代網路負載均衡和代理技術進行一些講解,來彌補上述的材料缺失。平心而論,相關內容中的大量主題足以支撐起一本專著。為了符合我對部落格長度的控制習慣,我會將其中一些複雜主題進行概括和提煉,用簡單的概要方式進行陳述;根據讀者的興趣和反饋,我可能會在後續文章中對某些話題的細節進行更多的闡述。

上面的內容就是我開始寫作本文的動機,下面開始正式內容。

1


網路負載均衡和代理是什麼?

Wikipedia 對負載均衡的定義 是:

In computing, load balancing improves the distribution of workloads across multiple computing resources, such as computers, a computer cluster, network links, central processing units, or disk drives. Load balancing aims to optimize resource use, maximize throughput, minimize response time, and avoid overload of any single resource. Using multiple components with load balancing instead of a single component may increase reliability and availability through redundancy. Load balancing usually involves dedicated software or hardware, such as a multilayer switch or a Domain Name System server process.

中文版:

負載平衡(Load balancing)是一種計算機網路技術,用來在多個計算機(計算機叢集)、網路連線、CPU、磁碟驅動器或其他資源中分配負載,以達到最優化資源使用、最大化吞吐率、最小化響應時間、同時避免過載的目的。使用帶有負載平衡的多個伺服器元件,取代單一的元件,可以通過冗餘提高可靠性。負載平衡服務通常是由專用軟體和硬體來完成。

上面的定義不僅包含了網路,還包含了計算的所有方面。作業系統、網路以及容器編排器等都有各自的負載均衡技術,用於使用各自的資源進行各自的任務排程。本文僅就網路負載均衡進行探討。

圖 1:網路負載均衡概覽

圖 1 對網路負載均衡進行了一個高層次的概括。多個客戶端向多個後端發起資源請求,負載均衡器處於客戶端和後端之間,簡單來說完成如下任務:

  • 服務發現:系統中有哪些後端可用?這些後端的地址(也就是:負載均衡器如何同這些後端通訊)?

  • 健康檢查:哪些後端是健康的可以用於接收請求?

  • 負載均衡:用什麼演算法來把獨立的請求分發給健康的後端?

在分散式系統中合理的使用負載均衡能帶來很多好處:

  • 命名抽象:每個客戶端不再需要知道每一個後端(服務發現),客戶端可以通過預定義的機制來找到負載均衡器,然後讓負載均衡器完成命名解析功能。這些機制包括內建庫,以及路人皆知的 DNS/IP/埠 地址,後面會深入討論。

  • 錯誤隔離:通過健康檢查以及一些其他的演算法和技術,負載均衡器的路由方法能夠有效的繞過癱瘓或過載的後端。這樣運維人員在面對系統故障時,就可以更加從容的進行錯誤處理。

  • 成本和效能收益:分散式系統的網路的一致性比較差。系統通常要跨越多個網路區域。同一區域內,網路資源通常是低售的;而在跨區域的情況下,超售則是常態(超售和低售的鑑別,是通過網絡卡上可消耗的頻寬和路由器之間的可用頻寬進行比對得出的結論)。智慧的負載均衡會盡可能保證通訊在同一區域內進行,從而提高效能(降低延遲)並降低總體系統成本(降低區域間的頻寬和光纖需求)。

負載均衡器 vs 代理伺服器

業內談到網路負載均衡器,Load Balancer 以及 Proxy 這兩個術語經常會同樣對待,本文中也把這兩個詞條等價處理(賣弄一下:並非所有的代理都是負載均衡器,但是負載均衡是主流代理的首要功能)。

有人可能會問,有的負載均衡功能是作為客戶端庫的內建功能完成的,這種負載均衡器就不是代理伺服器。這一話題本就容易混淆,這一質問更加讓人糊塗。文中會詳述這種負載均衡器的拓撲,這種嵌入的負載均衡方式只是代理的一種特例,應用通過內嵌的庫來完成代理職能,跟典型的負載均衡器的區別