產(chǎn)品架構(gòu)
傳統(tǒng)型負(fù)載均衡基礎(chǔ)架構(gòu)采用集群部署,提供四層(TCP和UDP協(xié)議)和七層(HTTP和HTTPS協(xié)議)的負(fù)載均衡,可實(shí)現(xiàn)會(huì)話同步,消除服務(wù)器單點(diǎn)故障,提升冗余性和服務(wù)穩(wěn)定性。
基礎(chǔ)架構(gòu)說(shuō)明
負(fù)載均衡作為流量轉(zhuǎn)發(fā)服務(wù),將來(lái)自客戶端的請(qǐng)求通過(guò)負(fù)載均衡集群轉(zhuǎn)發(fā)至后端服務(wù)器,后端服務(wù)器再將響應(yīng)通過(guò)內(nèi)網(wǎng)返回給負(fù)載均衡。
阿里云當(dāng)前提供四層和七層的負(fù)載均衡服務(wù)。
四層采用四層專用集群+ keepalived的方式實(shí)現(xiàn)負(fù)載均衡。
七層采用七層專用集群實(shí)現(xiàn)負(fù)載均衡。相比傳統(tǒng)自建Nginx集群,七層專用集群針對(duì)海量訪問(wèn)、HTTPS卸載等場(chǎng)景進(jìn)行了性能優(yōu)化,并添加了很多高級(jí)功能和特性。
如下圖所示,各個(gè)地域的四層負(fù)載均衡實(shí)際上是由多臺(tái)機(jī)器部署成一個(gè)四層專用集群來(lái)運(yùn)行的。采用集群部署模式極大地保證了異常情況下負(fù)載均衡服務(wù)的可用性、穩(wěn)定性與可擴(kuò)展性。
四層專用集群內(nèi)的每臺(tái)機(jī)器都會(huì)將所有會(huì)話通過(guò)組播報(bào)文同步到該集群內(nèi)的其他機(jī)器上。如下圖所示,當(dāng)客戶端向服務(wù)端傳輸三個(gè)數(shù)據(jù)包后,在機(jī)器1上建立的會(huì)話A開(kāi)始同步到其他機(jī)器上。圖中實(shí)線表示現(xiàn)有的連接,圖中虛線表示當(dāng)機(jī)器1出現(xiàn)故障或進(jìn)行維護(hù)時(shí),這部分流量會(huì)走到一臺(tái)可以正常運(yùn)行的機(jī)器2上。因而負(fù)載均衡集群支持熱升級(jí),并且在機(jī)器故障和集群維護(hù)時(shí)最大程度對(duì)用戶透明,不影響用戶業(yè)務(wù)。
對(duì)于連接未建立(三次握手未完成),或者已建立連接但未觸發(fā)會(huì)話同步機(jī)制,熱升級(jí)不保證連接不中斷,需要依靠客戶端重新發(fā)起連接。
入網(wǎng)流量路徑
對(duì)于入網(wǎng)流量,CLB會(huì)根據(jù)用戶在控制臺(tái)或開(kāi)發(fā)者門(mén)戶上配置的轉(zhuǎn)發(fā)策略,對(duì)來(lái)自前端的訪問(wèn)請(qǐng)求進(jìn)行轉(zhuǎn)發(fā)和處理,數(shù)據(jù)流轉(zhuǎn)如下圖所示。
TCP/UDP協(xié)議和HTTP/HTTPS協(xié)議的流量都需要經(jīng)過(guò)四層集群進(jìn)行轉(zhuǎn)發(fā)。
四層集群內(nèi)的每一臺(tái)節(jié)點(diǎn)服務(wù)器均勻地分配海量訪問(wèn)請(qǐng)求,并且每一臺(tái)節(jié)點(diǎn)服務(wù)器之間都有會(huì)話同步策略,以保證高可用。
如果相應(yīng)的CLB實(shí)例服務(wù)端口使用的是四層協(xié)議(TCP或UDP),那么四層集群內(nèi)每個(gè)節(jié)點(diǎn)都會(huì)根據(jù)CLB實(shí)例的策略,將其承載的服務(wù)請(qǐng)求按策略直接分發(fā)到后端云服務(wù)器 ECS(Elastic Compute Service)。
如果相應(yīng)的CLB實(shí)例服務(wù)端口使用的是七層HTTP協(xié)議,那么四層集群內(nèi)每個(gè)節(jié)點(diǎn)會(huì)先將其承載的服務(wù)請(qǐng)求均分到七層集群,七層集群內(nèi)的每個(gè)節(jié)點(diǎn)再根據(jù)CLB策略,將服務(wù)請(qǐng)求按策略最終分發(fā)到后端ECS服務(wù)器。
如果相應(yīng)的CLB實(shí)例服務(wù)端口使用的是七層HTTPS協(xié)議,與上述HTTP處理過(guò)程類似,差別是在按策略將服務(wù)請(qǐng)求最終分發(fā)到后端ECS服務(wù)器前,先調(diào)用Key Server進(jìn)行證書(shū)驗(yàn)證及數(shù)據(jù)包加解密等前置操作。
出網(wǎng)流量路徑
CLB和后端ECS之間是通過(guò)內(nèi)網(wǎng)進(jìn)行通信的。
如果ECS僅僅處理來(lái)自CLB的請(qǐng)求,可以不購(gòu)買公網(wǎng)帶寬(ECS、公網(wǎng)IP、彈性公網(wǎng)IP(Elastic IP Address,簡(jiǎn)稱EIP)、任播彈性公網(wǎng)IP( Anycast Elastic IP Address,簡(jiǎn)稱Anycast EIP)、NAT網(wǎng)關(guān)等)。
說(shuō)明早期創(chuàng)建的一些ECS上直接分配了公網(wǎng)IP(在實(shí)例中執(zhí)行
ipconfig
命令可以查看公網(wǎng)IP地址),此類ECS如果僅通過(guò)CLB對(duì)外提供服務(wù),即便在公網(wǎng)接口(網(wǎng)卡)上看到有流量統(tǒng)計(jì),也不會(huì)產(chǎn)生ECS的公網(wǎng)費(fèi)用。如果需要直接通過(guò)后端ECS對(duì)外提供服務(wù),或后端ECS有訪問(wèn)外網(wǎng)的需求,那么需要相應(yīng)的配置或購(gòu)買ECS、公網(wǎng)IP、EIP、Anycast EIP、NAT網(wǎng)關(guān)等服務(wù)。
ECS的公網(wǎng)流量訪問(wèn)路徑如下圖所示。
總體原則:流量從哪里進(jìn)來(lái),就從哪里出去。
通過(guò)CLB進(jìn)入的流量在CLB上限速或計(jì)費(fèi),CLB到ECS之間是阿里云內(nèi)網(wǎng)通信,不收取公網(wǎng)流量費(fèi)用。
來(lái)自EIP或NAT網(wǎng)關(guān)的流量,分別在EIP或NAT網(wǎng)關(guān)上進(jìn)行限速或計(jì)費(fèi)。如果在購(gòu)買ECS時(shí)選擇了公網(wǎng)帶寬,限速/計(jì)費(fèi)點(diǎn)在ECS上。
CLB僅提供被動(dòng)訪問(wèn)公網(wǎng)的能力,即后端ECS只能在收到通過(guò)CLB轉(zhuǎn)發(fā)來(lái)的公網(wǎng)的請(qǐng)求時(shí),才能訪問(wèn)公網(wǎng)回應(yīng)該請(qǐng)求,如后端ECS希望主動(dòng)發(fā)起公網(wǎng)訪問(wèn),則需要ECS綁定EIP或搭配NAT網(wǎng)關(guān)來(lái)實(shí)現(xiàn)。
ECS公網(wǎng)帶寬(購(gòu)買ECS時(shí)配置)、EIP、Anycast EIP、NAT網(wǎng)關(guān)均可以實(shí)現(xiàn)ECS的雙向公網(wǎng)訪問(wèn)(訪問(wèn)或被訪問(wèn)),但沒(méi)有流量分發(fā)和負(fù)載均衡的能力。