G行作為金融行業數字化轉型的探索者與實踐者,提出“123+N”的數字化特色發展體系,即一個智慧大腦,兩大技術平臺——云計算平臺和大數據平臺,三項服務能力——移動化、開放化、生態化服務能力,N個數字化名品——數據挖掘模型體系、隨心貸、專屬客服、手機銀行等。根據數字化發展戰略要求,傳統數據中心的應用系統要逐步遷移到云平臺,實現服務云化,滿足業務需求的快速迭代,同時云平臺可提供快速便捷的資源交付和資源擴容能力,提升資源利用率,達到降本增效的目標。
針對應用上云,G行制定了相關的上云策略,強調優先容器化部署,對于無法容器化改造的產品組件可通過虛擬機或裸金屬方式上云,以多種部署形式滿足應用上云要求。針對傳統環境和云上應用,所使用的業務流量負載方式是不同的,傳統環境主要使用硬件F5負載均衡,優點是性能好、功能強大,缺點是成本高、擴展性差、不符合信創要求。云環境使用云平臺提供的服務組件彈性負載均衡服務,優點是成本低、擴展性好、符合信創要求,缺點是相比硬件負載均衡性能略有下降。上期文章介紹了負載均衡服務的關鍵技術,本期重點介紹下負載均衡服務在G行的實踐。
G行彈性負載均衡實踐
G行在應用上云過程中,通過制定上云模型以規范上云部署架構。上云模型主要分為虛擬機架構上云、容器化上云、裸金屬上云以及多種形式的混合上云部署模型。在這些模型中,彈性負載均衡主要提供流量負載能力,主要運用在虛擬機應用和容器應用中。

圖1 G行虛擬機上云與容器化上云的負載均衡示意
虛擬機應用彈性負載均衡服務能力實踐
為滿足同城多活要求,應用服務在邏輯上三個數據中心部署(分別為AZ1、AZ2、AZ3)。其中數據層部署跨三中心的DB和Redis服務實例,對三中心的應用服務層提供統一的數據庫服務和緩存服務。數據庫服務主要用于結構化數據的永久保存,緩存服務主要用于會話保持數據的存儲和其他緩存使用場景,實現應用無狀態。
應用層在每個數據中心部署對應的前端Web應用和后端App服務。其中Web和App服務均以負載均衡架構部署,通過前端的負載均衡ELB將請求流量轉發到對應的后端服務節點,提升負載能力的同時保障系統的高可用設計,并且可根據服務的容量需求進行動態擴縮容。負載均衡通過TCP和HTTP兩種健康檢查方式對后端負載的存活狀態進行探查,實現故障節點自動隔離能力和故障自愈恢復能力。
在應用訪問層設計方面,全棧云為三層網絡架構,每個數據中心使用一個ELB地址作為該數據中心的應用入口,外部請求通過DNS服務配置的域名解析策略將流量轉發到三個數據中心Web服務前端的ELB地址,然后ELB將請求轉發到對應的Web服務,再經App服務前端的ELB負載到App服務,最終到數據庫服務。
由于上述架構在三個數據中心使用了三個ELB作為應用入口地址,無法像傳統環境一樣,使用統一一個負載均衡實例作為入口地址,利用負載均衡的會話保持功能實現會話保持,因此需要通過應用層將會話信息Session保存在Redis服務中。外部請求再次進入系統后,讀取Session信息獲取會話信息,而無需關注實際請求是哪一個服務節點,對應用來說是透明的,從而實現全棧應用的會話保持能力。

圖2 G行虛擬機應用彈性負載均衡服務架構示意
容器應用彈性負載均衡服務能力實踐
容器部署應用以前后端分離單體應用為例,應用請求依舊通過DNS服務將請求轉發到Web服務對應的ELB地址,然后Web服務通過訪問App服務的Service將流量轉發到實際App服務Pod上,最后訪問到數據庫服務。
在該應用架構中主要有兩點需要特別說明。第一,負載均衡ELB作為容器應用對外暴露端口的固定地址,三中心架構通過DNS域名將地址解析到三中心的ELB地址,ELB地址通過在k8s集群創建Loadbalance服務,將應用服務對外暴露。第二,在k8s集群內部,服務與服務之間通過Service服務訪問,嚴禁使用ELB的Loadbalance服務。該應用Web服務訪問App服務,屬于集群內部訪問,Web服務應該通過Service服務訪問App,此時的Service服務在k8s內部類似起到負載均衡器的作用。
關于App的Service服務,此處的負載均衡器理論上也可以通過彈性負載均衡ELB暴露固定地址,訪問鏈路由DNS-->ELB-->WebPod-->Service-->AppPod-->EverDB演變為DNS-->ELB-->WebPod-->ELB-->AppPod-->EverDB。雖然訪問沒有問題,但增大了ELB實例的服務開銷,同時本身內部服務訪問的容器網絡流量轉變為容器網絡和ELB網絡的交叉流量,降低了服務之間的訪問效率,并且增加網絡鏈路的復雜度。

圖3 G行容器應用彈性負載均衡服務架構示意
總結
全棧云應用通過負載均衡ELB將負載流量轉發給后端的多個虛擬機或者容器應用,通過TCP和HTTP兩種健康檢查方式對后端負載的存活狀態進行探查。TCP健康檢查只探測對應的應用端口是否存在,配置簡單,響應較快。HTTP檢查可以根據提供的端口和URL路徑準確判斷應用的健康狀態,檢查準確性高,覆蓋面更全,具體使用方式根據業務場景進行配置。針對流量轉發算法,一般負載均衡設備后端的負載節點配置相同,可采用輪詢算法進行負載流量轉發。
針對不同的上云部署方式,虛擬機類應用,彈性負載均衡無特殊要求;而容器類應用,彈性負載均衡ELB只能用于需要對外暴露服務端口的服務,通過創建Loadbalance服務將ELB和容器Pod關聯,而內部服務訪問統一使用Service服務。