傳統型負載平衡基礎架構採用叢集部署,提供四層(TCP和UDP協議)和七層(HTTP和HTTPS協議)的負載平衡,可實現會話同步,消除伺服器單點故障,提升冗餘性和服務穩定性。
基礎架構說明
負載平衡作為流量轉寄服務,將來自用戶端的請求通過負載平衡叢集轉寄至後端伺服器,後端伺服器再將響應通過內網返回給負載平衡。
阿里雲當前提供四層和七層的負載平衡服務。
四層採用四層專用叢集+ keepalived的方式實現負載平衡。
七層採用七層專用叢集實現負載平衡。相比傳統自建Nginx叢集,七層專用叢集針對海量訪問、HTTPS卸載等情境進行了效能最佳化,並添加了很多進階功能和特性。
如下圖所示,各個地區的四層負載平衡實際上是由多台機器部署成一個四層專用叢集來啟動並執行。採用叢集部署模式極大地保證了異常情況下負載平衡服務的可用性、穩定性與可擴充性。
四層專用叢集內的每台機器都會將所有會話通過組播報文同步到該叢集內的其他機器上。如下圖所示,當用戶端向服務端傳輸三個資料包後,在機器1上建立的會話A開始同步到其他機器上。圖中實線表示現有的串連,圖中虛線表示當機器1出現故障或進行維護時,這部分流量會走到一台可以正常啟動並執行機器2上。因而負載平衡叢集支援熱升級,並且在機器故障和叢集維護時最大程度對使用者透明,不影響使用者業務。
對於串連未建立(三向交握未完成),或者已建立串連但未觸發會話同步機制,熱升級不保證串連不中斷,需要依靠用戶端重新發起串連。
入網流量路徑
對於入網流量,CLB會根據使用者在控制台或開發人員門戶上配置的轉寄策略,對來自前端的訪問請求進行轉寄和處理,資料流轉如下圖所示。
TCP/UDP協議和HTTP/HTTPS協議的流量都需要經過四層叢集進行轉寄。
四層叢集內的每一台節點伺服器均勻地分配海量訪問請求,並且每一台節點伺服器之間都有會話同步策略,以保證高可用。
如果相應的CLB執行個體服務連接埠使用的是四層協議(TCP或UDP),那麼四層叢集內每個節點都會根據CLB執行個體的策略,將其承載的服務要求按策略直接分發到後端Elastic Compute Service (ECS)。
如果相應的CLB執行個體服務連接埠使用的是七層HTTP協議,那麼四層叢集內每個節點會先將其承載的服務要求均分到七層叢集,七層叢集內的每個節點再根據CLB策略,將服務要求按策略最終分發到後端ECS伺服器。
如果相應的CLB執行個體服務連接埠使用的是七層HTTPS協議,與上述HTTP處理過程類似,差別是在按策略將服務要求最終分發到後端ECS伺服器前,先調用Key Server進行認證驗證及資料包加解密等前置操作。
出網流量路徑
CLB和後端ECS之間是通過內網進行通訊的。
如果ECS僅僅處理來自CLB的請求,可以不購買公網頻寬(ECS、公網IP、Elastic IP Address(Elastic IP Address,簡稱EIP)、任播Elastic IP Address( Anycast Elastic IP Address,簡稱Anycast EIP)、NAT Gateway等)。
說明早期建立的一些ECS上直接分配了公網IP(在執行個體中執行
ipconfig
命令可以查看公網IP地址),此類ECS如果僅通過CLB對外提供服務,即便在公網介面(網卡)上看到有流量統計,也不會產生ECS的公網費用。如果需要直接通過後端ECS對外提供服務,或後端ECS有訪問外網的需求,那麼需要相應的配置或購買ECS、公網IP、EIP、Anycast EIP、NAT Gateway等服務。
ECS的公網流量訪問路徑如下圖所示。
總體原則:流量從哪裡進來,就從哪裡出去。
通過CLB進入的流量在CLB上限速或計費,CLB到ECS之間是阿里雲內網通訊,不收取公網流量費用。
來自EIP或NAT Gateway的流量,分別在EIP或NAT Gateway上進行限速或計費。如果在購買ECS時選擇了公網頻寬,限速/計費點在ECS上。
CLB僅提供被動訪問公網的能力,即後端ECS只能在收到通過CLB轉寄來的公網的請求時,才能訪問公網回應該請求,如後端ECS希望主動發起公網訪問,則需要ECS綁定EIP或搭配NAT Gateway來實現。
ECS公網頻寬(購買ECS時配置)、EIP、Anycast EIP、NAT Gateway均可以實現ECS的雙向公網訪問(訪問或被訪問),但沒有流量分發和負載平衡的能力。