負載均衡常用手段解析

2021-02-14 InfoQ
作者 | Laura Nolan,Murali Suriar 包括 CDN(內容交付網絡)和雲提供商在內,多站點的大型網際網路系統可以選擇多種方式來均衡進入其網絡的流量。在本文中,我們將描述常見的流量均衡設計,包括技術和權衡手段。

如果你是早期的雲計算服務提供商,你可以使用一個單獨的客戶 web 伺服器,為它分配一個 IP 地址,並配置一個 DNS(域名系統)記錄來將它與一個易讀的名字關聯起來,之後通過 BGP(邊界網關協議)來傳播 IP 地址,這是種在網絡間交換路由信息的標準方式。

在冗餘的網絡路徑上分發流量,在不可用的基礎設施周圍進行路由來提高可用性(會導致不對稱路由等現象),這些從本質上講並不是負載均衡。

隨著客戶服務流量的增長,業務方希望獲得更高的可用性。你添加了另一個具有公網 IP 地址的 web 伺服器,並更新了 DNS 記錄來將用戶引導到這兩個 web 伺服器(希望稍微公平一些)。直到某一個 web 伺服器意外宕機前,這種方法都是可行的。假設你快速檢測到故障,可以通過更新 DNS 配置(手動方式或使用軟體)來停止引用損壞的伺服器。

遺憾的是,由於 DNS 記錄是有緩存的,這些緩存記錄可能會在客戶端或者 DNS 層次結構中的其他名稱伺服器中,在它們過期之前,大約有 50% 的請求仍然可能失敗。DNS 記錄的 TTL(time to live,生存時間)通常為幾分鐘或更長,因此這會對系統的可用性造成重大影響。

更糟糕的是一些客戶端完全忽略了 TTL,所以一些請求將在一段時間內被定向到已經宕機的 web 伺服器上。設置非常短的 DNS TTL 也不是什麼好主意;這意味著 DNS 服務的負載增加,延遲增加,因為客戶端不得不更加頻繁地執行 DNS 查找。如果你的 DNS 服務不可用,那麼使用更短的 TTL 訪問服務將更快地降級,因為緩存服務 IP 地址的客戶端更少。

為了解決這個問題,你可以添加一對冗餘的 4 層(Layer 4)網絡均衡器,並在相同的虛擬 IP(VIP)地址提供服務。它們可以是硬體設備,或者像 HAProxy 這樣的軟體均衡器。這意味著 DNS 記錄僅僅指向虛擬 IP 而不再做負載均衡。

4 層負載均衡器將來自用戶的連接均衡分布在兩個 web 伺服器上

4 層均衡器將來自網際網路的流量均衡地引導至後端伺服器。這通常是基於每個 IP 包的 5 元組的哈希(一個數學函數)完成的:源 IP 地址和目標 IP 地址,以及埠加上協議(如 TCP 或 UDP)。這種方式快速、高效(並且仍然維持了 TCP 的基本屬性),並且不需要均衡器維護每個連接的狀態。

4 層均衡器可以進行健康檢查,並僅僅向那些通過檢查的 web 伺服器發送流量。與 DNS 均衡不同的是,如果一個 web 伺服器崩潰,將流量重定向到另一個 web 伺服器上的延遲很小,儘管現有連接將被重置。

4 層均衡器可以做加權平均,處理不同容量的後端,它為運維人員提供了強大的能力和靈活性,同時在計算能力方面相對便宜。

系統繼續擴張。即使你的數據中心出現故障,你的客戶也希望能繼續保持運轉。你會構建一個新的數據中心,其中包含自己的一組後端服務和另一組 4 層均衡器,它們在與之前一樣的虛擬 IP 上提供服務。DNS 設置不變。這兩個站點的邊緣路由器都在傳播地址信息,包括服務的虛擬 IP。根據終端用戶和系統之間的網絡連接情況,以及它們的路由策略配置,發送到虛擬 IP 的請求可以到達任一個站點。這被稱為 anycast(任播)。大多數情況下,這種方法都很有效。如果其中一個站點出現故障,你可以停止通過 BGP 傳播服務虛擬 IP,這樣流量就可以迅速轉移到另一個站點。

使用 anycast(任播)從多個站點提供服務

這個設置有幾個問題。最糟糕的是,你無法控制流量的走向或者限制發送到某個特定站點的流量。通常,決定路由的網絡協議和配置應該將用戶路由到最近的站點,不過就網絡延遲而言,你並沒有明顯的方法來實現這個目標。

為了維持穩定性,你需要控制每個站點的流量,你可以為每個站點分配不同的虛擬 IP,並使用 DNS 的簡單循環或加權 循環 來均衡流量。

從多個站點提供服務:每個站點使用一個主虛擬 IP,二級站點備份,使用地理感知 DNS

現在產生了兩個新的問題。

首先,使用 DNS 均衡意味著你有緩存記錄,這不太適用於那些需要迅速重定向流量的場景。

第二,每當用戶做一次新的 DNS 查詢,虛擬 IP 會將用戶連接到一個隨機的站點,而不一定是離用戶最近的那一個。如果你的服務站點分布廣泛,根據用戶和服務站點之間的網絡延遲,各個用戶感知到的系統響應性能會有較大波動。

讓每個站點不斷傳播虛擬 IP,並為所有其他站點(以及任何有問題的站點的虛擬 IP)提供服務,你可以通過這種方式解決第一個問題。一些網絡技巧(比如從備份中傳播不那麼特殊的路由信息)可以確保虛擬 IP 對應的主站只要是可用的,那麼它便是首選。這是通過 BGP 完成的,因此在更新 BGP 後的一到兩分鐘內,我們應該會看到流量的移動。

除了讓距離用戶最近的健康站點為其提供服務以外,並沒有一個更加優雅的選擇。很多大型網際網路服務嘗試使用 DNS 來向不同位置的用戶返回不同的結果,並在一定程度上取得了成功。不過這種方法總是有點 複雜和容易出錯,因為網際網路的尋址方案並不是按地理位置組織的,地址塊可以改變位置(例如,當公司重新組織其網絡時),很多終端用戶仍然可以通過緩存名稱伺服器獲得服務。

隨著時間的推移,你的客戶開始對一些更加高級的特性提出要求。

雖然 4 層負載均衡器可以高效地在多個 web 伺服器之間分配負載,但這種分配是只在源 IP 地址和目標 IP 地址、協議和埠上進行的。4 層均衡器對請求的內容一無所知,所以也無法實現很多高級特性。相對而言,7 層(L7)負載均衡器知道請求的結構和內容,可以做得更多。

在 7 層均衡器中可以實現的一些特性包括緩存、限流、錯誤注入和代價敏感的負載均衡(部分請求需要更多的服務端處理時間)。

它們還可以基於請求的屬性(例如 HTTP cookies)進行均衡、終止 SSL 連接,並幫助抵禦應用層拒絕服務(DoS)攻擊。7 層均衡器成本較高,不易擴容——它們為處理請求做了更多的計算,而且每個活動請求都會消耗一些系統資源。在一個或多個 7 層均衡器池前運行 4 層均衡器可以幫助解決擴展問題。

負載均衡是一個複雜的難題。除了本文描述的策略之外,還有不同的 負載均衡算法、用於實現負載均衡器的高可用技術、客戶端負載均衡技術以及最近興起的服務網格。

隨著雲計算的發展,核心的負載均衡模式也在不斷演進,大型 web 服務也將繼續改進負載均衡所能提供的控制和靈活性。

https://opensource.com/article/18/10/internet-scale-load-balancing

解決技術難題,除了具備過硬的技術理論知識的儲備,你還需要掌握一些好用的開發工具。近年來,微服務有多熱相信不用我贅述。微服務是一種用於開發高度可伸縮軟體系統的架構風格。這種架構可用於開發企業、政府、學校和慈善機構的企業級應用。InfoQ 編輯準備了一份頂級的微服務開源工具清單送給大家,請在公眾號對話框回復關鍵詞:微服務,獲取清單詳細內容。

註:請在公眾號對話框回復關鍵詞,留言區回復收不到連結哦~

相關焦點

  • 解密網際網路級別的負載均衡常用手段
    在本文中,我們將描述常見的流量均衡設計,包括技術和權衡手段。如果你是早期的雲計算服務提供商,你可以使用一個單獨的客戶 web 伺服器,為它分配一個 IP 地址,並配置一個 DNS(域名系統)記錄來將它與一個易讀的名字關聯起來,之後通過 BGP(邊界網關協議)來傳播 IP 地址,這是種在網絡間交換路由信息的標準方式。
  • 負載均衡原理的解析
    二、DNS負載均衡DNS負責提供域名解析服務,當訪問某個站點時,實際上首先需要通過該站點域名的DNS伺服器來獲取域名指向的IP位址,在這一過程中,DNS伺服器完成了域名到IP位址的映射,同樣,這樣映射也可以是一對多的
  • 負載均衡基礎知識
    七層負載均衡工作在OSI模型的應用層,因為它需要解析應用層流量,所以七層負載均衡在接到客戶端的流量以後,還需要一個完整的TCP/IP協議棧。七層負載均衡會與客戶端建立一條完整的連接並將應用層的請求流量解析出來,再按照調度算法選擇一個應用伺服器,並與應用伺服器建立另外一條連接將請求發送過去,因此七層負載均衡的主要工作就是代理。二、四層和七層負載均衡的區別?
  • 負載均衡原理的概述、原理解析
    負載均衡作為目前伺服器集群部署的一款常用設備,當一臺機器性能無法滿足業務的增長需求時,不是去找一款性能更好的機器,而是通過負載均衡,利用集群來滿足客戶增長的需求
  • 掃盲負載均衡
    在各地建有多個機房,機房有多個不同的網絡鏈路入口的大型網際網路站,會從DNS解析開始,通過「域名」-->"CNAME"-->"負載調度服務"-->"就近的數據中心入口"的路徑,先將來訪的用戶根據IP位址分配到一個合適的數據中心,然後才到各式的負載均衡。
  • 負載均衡詳解
    2.1DNS負載均衡最早的負載均衡技術,利用域名解析實現負載均衡,在DNS伺服器,配置多個A記錄,這些A記錄對應的伺服器構成集群。大型網站總是部分使用DNS解析,作為第一級負載均衡。如下圖:優點使用簡單:負載均衡工作,交給DNS伺服器處理,省掉了負載均衡伺服器維護的麻煩提高性能:可以支持基於地址的域名解析,解析成距離用戶最近的伺服器地址,可以加快訪問速度,改善性能;缺點
  • 詳解幾種常用負載均衡
    大致可以分為以下幾種,其中最常用的是四層和七層負載均衡: 二層負載均衡負載均衡伺服器對外依然提供一個VIP(虛IP),集群中不同的機器採用相同IP位址,但機器的MAC地址不一樣。當負載均衡伺服器接受到請求之後,通過改寫報文的目標MAC地址的方式將請求轉發到目標機器實現負載均衡。
  • 負載均衡技術和知識全面解析
    負載均衡包括伺服器負載均衡,防火牆負載均衡和鏈路負載均衡等類型,各種負載均衡應用場景如下: 伺服器負載均衡:在數據中心等組網環境中,可以採用伺服器負載均衡,將網絡服務分擔給多臺伺服器進行處理,提高數據中心的業務處理能力。
  • 通俗易懂負載均衡器
    負載均衡基本上意味著在多個伺服器之間分配網絡流量,這樣可以確保沒有任何一臺伺服器自己承擔所有負載。當網絡流量平衡時,應用程式就可以平穩運行。像往常一樣,我帶來了另一本漫畫教程,該教程將以最簡單的方式解釋負載均衡器。從上圖可以看到,有一個簡單的客戶端-伺服器方案。這裡只有一個客戶端,因此我們的伺服器可以輕鬆地滿足客戶端的請求。
  • 不懂負載均衡?最通俗易懂的解釋來了!
    負載均衡技術常見的軟體負載均衡技術有以下幾種:1、基於DNS的負載均衡由於在DNS伺服器中,可以為多個不同的地址配置相同的名字,最終查詢這個名字的客戶機將在解析這個名字時得到其中一個地址,所以這種代理方式是通過DNS服務中的隨機名字解析域名和IP來實現負載均衡
  • 淺談幾種常用負載均衡架構
    大致可以分為以下幾種,其中最常用的是四層和七層負載均衡:  負載均衡伺服器對外依然提供一個 VIP(虛IP),集群中不同的機器採用相同 IP位址,但機器的 MAC 地址不一樣。當負載均衡伺服器接受到請求之後,通過改寫報文的目標 MAC 地址的方式將請求轉發到目標機器實現負載均衡。
  • 系統設計基礎 負載均衡
    軟體負載均衡軟體負載均衡是通過負載均衡軟體來實現負載均衡功能的。常見的負載均衡軟體有LVS和Nginx。其中LVS是Linux內核的四層負載均衡,四層和七層的區別在於他們協議和靈活性的不同。在DNS系統中有一個比較重要的的資源類型叫做主機記錄也稱為A記錄,A記錄是用於名稱解析的重要記錄,它將特定的主機名映射到對應主機的IP位址上。如果你有一個自己的域名,那麼要想別人能訪問到你的網站,你需要到特定的DNS解析服務商的伺服器上填寫A記錄,過一段時間後,別人就能通過你的域名訪問你的網站了。
  • 負載均衡的原理
    我們有個中間層啊,對,就是DNS,我們可以設置一下,讓我們網站的域名映射到多個伺服器的IP,用戶面對的是我們系統的域名,然後我們可以採用一種輪詢的方式, 用戶1的機器做域名解析的時候,DNS返回IP1, 用戶2的機器做域名解析的時候,DNS返回IP2. 這樣不就可以實現各個機器的負載相對均衡了嗎?」
  • gRPC服務發現&負載均衡
    LB上有所有服務的地址映射表,通常由運維配置註冊,當服務消費方調用某個目標服務時,它向LB發起請求,由LB以某種策略,比如輪詢(Round-Robin)做負載均衡後將請求轉發到目標服務。LB一般具備健康檢查能力,能自動摘除不健康的服務實例。
  • 圖解大型網站--負載均衡架構
    有關NGINX Plus如何實現此處描述的功能的詳細信息,請查看以下資源:大型網站負載均衡的利器全局負載均衡系統(GSLB)內容緩存系統(CDN)伺服器負載均衡系統(SLB)DNS域名解析的基本過程修改DNS記錄全部生效起碼要3-4小時,甚至更久;分配不均,如果幾臺Web伺服器之間的配置不同,能夠承受的壓力也就不同,但是DNS解析分配的訪問卻是均勻分配的。用戶群的分配不均衡導致DNS解析的不均衡。會話保持,如果是需要身份驗證的網站,在不修改軟體構架的情況下,這點是比較致命的,因為DNS解析無法將驗證用戶的訪問持久分配到同一伺服器。
  • 負載均衡的幾種方式
    這裡要注意的一點是雖說叫負載均衡,但是有時候我們的分配算法就是不是均衡的。比如配個nginx,做兩臺伺服器的負載均衡,一臺機子比較老是以前的配置比較低,一臺是新機子配置高,那我們的分配權重可能就是3-7分,而不是五五開。所以是預想分配。但是業界還是習慣按照負載均衡來表達這個任務分配機制。負載分類負載均衡常見的有: 軟體負載均衡、硬體負載均衡、DNS負載均衡。
  • linux負載均衡總結性說明(四層負載/七層負載)
    二,負載均衡分類1)二層負載均衡(mac)根據OSI模型分的二層負載,一般是用虛擬mac地址方式,外部對虛擬MAC地址請求,負載均衡接收後分配後端實際的MAC地址響應)2)三層負載均衡(ip)一般採用虛擬IP位址方式,外部對虛擬的ip地址請求,負載均衡接收後分配後端實際的IP位址響應)3)四層負載均衡(tcp)在三次負載均衡的基礎上,用ip
  • 負載均衡概念入門
    幸運的是,我們現在有負載均衡的概念來幫助我們處理這一需求。負載均衡是一個通用的術語,指的是為了確保你所管理的資源得到有效分配而做的任何事情。對於網絡伺服器的系統管理員來說,負載均衡通常意味著確保網絡伺服器軟體(如Nginx)配置了足夠的worker節點以處理激增的訪客。
  • DNS全局負載均衡(GSLB)基本原理
    DNS全局負載均衡(GSLB)基本原理原理採用「全局負載均衡(GSLB
  • 什麼是負載均衡(Load balancing)
    大致可以分為以下幾種,其中最常用的是四層和七層負載均衡:負載均衡伺服器對外依然提供一個VIP(虛IP),集群中不同的機器採用相同IP位址,但機器的MAC地址不一樣。當負載均衡伺服器接受到請求之後,通過改寫報文的目標MAC地址的方式將請求轉發到目標機器實現負載均衡。和二層負載均衡類似,負載均衡伺服器對外依然提供一個VIP(虛IP),但集群中不同的機器採用不同的IP位址。