vivo統(tǒng)一接入網(wǎng)關VUA轉(zhuǎn)發(fā)性能優(yōu)化實踐
VLB 全稱 vivo load balance。vivo負載均衡作為vivo互聯(lián)網(wǎng)業(yè)務的IDC流量入口,承接了很多重要業(yè)務的公網(wǎng)流量。本文針對 VLB 的七層負載VUA HTTPS 性能優(yōu)化進行探索,以獲取最佳轉(zhuǎn)發(fā)性能。
一、vivo VLB整體架構
▲ 圖1 vivo VLB整體架構
VLB 整體架構的核心包括:基于DPDK的四層負載VGW,基于Apache APISIX和NGINX擴展功能的七層負載VUA,以及統(tǒng)一管控運維平臺。
其主要特點為:
- 高性能:具備千萬級并發(fā)和百萬級新建能力。
- 高可用:通過 ECMP、健康檢查等,提供由負載本身至業(yè)務服務器多層次的高可用。
- 可拓展:支持四層/七層負載集群、業(yè)務服務器的橫向彈性伸縮、灰度發(fā)布。
- 四層負載能力:通過 BGP 向交換機宣告VIP;支持均衡算法如輪詢、加權輪詢、加權最小連接數(shù)、一致性哈希;FullNAT 轉(zhuǎn)發(fā)模式方便部署等。
- 七層負載能力:支持基于域名和 URL 的轉(zhuǎn)發(fā)規(guī)則配置;支持均衡算法如輪詢、加權輪詢等。
- SSL/TLS 能力:證書、私鑰、握手策略的管理配置;支持 SNI 配置;支持基于多種加速卡的 SSL 卸載硬件加速等。
- 流量防控:提供一定的 Syn-Flood 防護能力;提供網(wǎng)絡流量控制手段如 QoS 流控、ACL 訪問控制等。
- 管控平臺:支持多種維度的網(wǎng)絡和業(yè)務指標配置、監(jiān)控和告警。
本文針對 VLB 中七層負載VUA的 SSL/TLS 性能優(yōu)化兩種方法進行概述性介紹:
- 基于硬件技術的QAT_HW
- 基于指令集優(yōu)化的QAT_SW
二、VUA七層負載均衡
2.1 VUA介紹
目前公司接入層最大的能力痛點,就是動態(tài)上游、動態(tài)路由、動態(tài)證書、流量灰度、黑白名單、動態(tài)調(diào)度、日志查詢與追蹤等。為了支持公司業(yè)務的持續(xù)發(fā)展,特別是業(yè)務的全面容器化,亟需建設一個統(tǒng)一接入平臺,融合目前線上的NGINX集群及Ingress NGINX,用于承載公司web端、移動端、合作伙伴、內(nèi)部系統(tǒng)、IOT設備流量,對齊行業(yè)的接入層能力,保障業(yè)務的順利發(fā)展。
VUA定義:vivo Unified Access。
vivo 統(tǒng)一接入層,是基于APISIX-2.4的二次開發(fā)。
2.2 VUA架構
▲ 圖2 APISIX 架構(圖片來源:Github-apache/apisix)
- Apache APISIX:OpenResty 1.19.3.1 + Lua組成(組件本身是無狀態(tài)的)。
- Manager-api:由 Go 語言開發(fā),用于配置的管理和變更。
- APISIX-Ingress-Controller:基于K8S原生Controller機制開發(fā)完成,支持多副本Leader-Election熱備機制。主要監(jiān)聽K8s api server,用于pod信息上報到Manager-api。
- Etcd:用于保存路由、upstream等配置信息。
▲ 圖3 VUA 架構
三、QAT加速技術
Intel QuickAssist 技術 OpenSSL引擎 (QAT_Engine) 支持硬件加速以及基于矢量化指令的優(yōu)化軟件。這一特性始于第三代Intel? Xeon?可擴展處理器,為用戶提供了更多加速其工作負載的選項。
3.1 異步架構
VUA 基于 NGINX 原生的異步處理框架上拓展出針對異步硬件引擎的異步事件處理機制,整體交互流程如下圖所示:
- ASYNC_start_job:NGINX 調(diào)用 ssl lib 庫接口 SSL_do_handshake, 開啟一個異步任務。
- RSA/ECDH 加解密操作。
- QAT 引擎將加密消息發(fā)送給驅(qū)動,創(chuàng)建異步事件監(jiān)聽 fd,將 fd 綁定到異步任務的上下文中。
- qat_pause_job: 調(diào)用該接口保存異步任務執(zhí)行的堆棧信息,任務暫時被掛起,等待硬件加解密操作完成。同時進程堆棧切換到 NGINX IO 調(diào)用主流程,ssl 返回 WANT_ASYNC,NGINX開始處理其他等待時間。
- NGINX IO處理框架獲取保存在異步任務上下文中的 asyncfd,并添加到 epoll 隊列中啟動監(jiān)聽。
- 加速卡處理任務完成,QAT 引擎調(diào)用 qat_wake_job 接口喚醒任務(也就是將 async fd 標記為可讀)。QAT 為 NGINX 提供了多種輪詢方式去輪詢加速卡響應隊列,目前 VUA 采用的是啟發(fā)式輪詢的方式,具體參數(shù)可以在配置文件中定義。
- NGINX 處理異步事件重新調(diào)用異步任務框架的 ASYNC_start_job 接口,這時候程序切換上下文,堆棧執(zhí)行后跳回之前 pause job 的地方。
3.2 QAT組件架構概覽
- Application
應用層主要包含兩塊內(nèi)容:
(1)QAT 異步框架的 patch,該 patch 提供對異步模式的支持;
(2)QAT 引擎,engine 是 openssl 本身支持的一種機制,用以抽象各種加密算法的實現(xiàn)方式,intel 提供了 QAT 引擎的開源代碼用以專門支持 QAT 加速。 - SAL(service access layer)
服務接入層,給上層 Application 提供加速卡接入服務,目前 QAT 主要提供 crypto 和 compression 兩種服務,每一種服務都相互獨立,接入層封裝了一系列實用的接口,包括創(chuàng)建實例,初始化消息隊列、發(fā)送\接受請求等。 - ADF(acceleration driver framework)
加速卡驅(qū)動框架,提供 SAL 需要的驅(qū)動支持,如上圖,包括 intel_qat.ko、8950pci 驅(qū)動、usdm 內(nèi)存管理驅(qū)動等。
3.3 QAT_HW和QAT_SW
QAT_HW基于QAT硬件加速卡,通過Openssl引擎使用qatengine.so庫中鏈接的QAT驅(qū)動程序。
QAT_SW是基于QAT軟件加速,通過Openssl引擎使用qatengine.so庫中鏈接的crypto_mb和ipsec_mb庫。基于intel AVX-512 整數(shù)乘加 (IFMA) 操作緩沖區(qū)庫,當用戶構建指令支持qat_sw時,通過批處理隊列中維護的多個請求執(zhí)行操作,并使用 OpenSSL 異步基礎架構將批處理請求最多提交到8個 Crypto Multi-buffer API,后者使用AVX512 矢量指令并行處理它們。主要面向非對稱 PKE 和 AES-GCM 的英特爾? QAT 軟件加速,RSA支持密鑰大小 2048、3072、4096,AES128-GCM、AES192-GCM 和 AES256-GCM。
如果平臺同時支持 QAT_HW 和 QAT_SW,則默認是使用 QAT 硬件加速非對稱算法和對稱鏈式密碼,使用 QAT 軟件加速對稱 GCM 密碼。如果平臺沒有 QAT 硬件支持,那么它將使用 QAT_SW 加速來實現(xiàn) qatengine 中支持的非對稱算法。
下圖說明了 QAT_Engine 的高級軟件架構。NGINX 和 HAProxy 等應用程序是與 OpenSSL接口的常見應用程序。OpenSSL是一個用于 TLS/SSL 協(xié)議的工具包,從 1.1.0 版本開始,它開發(fā)了一個模塊化系統(tǒng)來插入特定于設備的引擎。如上所述,QAT_Engine 中有兩個獨立的內(nèi)部實體,通過它們可以執(zhí)行加速。
▲(圖片來源:Github-intel/QAT_Engine)
四、優(yōu)化方案性能提升對比
4.1 QAT_HW
本方案采用intel 8970型號加速卡進行測試,采用RSA證書進行HTTPS加解密。
(1)測試方法
執(zhí)行機部署適配 QAT 引擎后的VUA,發(fā)包測試機進行壓測灌包,在 CPU 負載達到 100%后比較得出VUA在進行 QAT 優(yōu)化后的新建 QPS對比。
(2)測試場景
(3)本地測試數(shù)據(jù)對比
使用QAT加速卡性能對比
QAT卡優(yōu)化方案,通過 VUA進行 HTTPS 打流業(yè)務實測,與采用OpenSSL 軟件加解密場景做對比:
- 使用QAT加速卡,同worker下,RSA 平均QPS提升1.27倍。
- 隨著進程數(shù)的增加,QAT加速卡達到瓶頸,趨于穩(wěn)定,在56 worker下,最高可達4.4w qps。
此優(yōu)化方案所帶來的性能提升主要依賴于:
- QAT采用用戶態(tài)驅(qū)動的方式,實現(xiàn)了內(nèi)核態(tài)到用戶態(tài)內(nèi)存零拷貝。
- VUA采用異步模式調(diào)用 OpenSSL API,代替?zhèn)鹘y(tǒng)的同步模式調(diào)用。
- QAT驅(qū)動程序支持多加速卡同時進行卸載加速。
4.2 QAT_SW
本方案采用icelake 6330型號(支持AVX512指令集)進行測試,采用RSA證書進行HTTPS加解密。
(1)測試方法
執(zhí)行機部署適配指令集優(yōu)化的VUA,發(fā)包測試機進行壓測灌包,在 CPU 負載達到 100%后比較得出VUA在進行指令集優(yōu)化后的新建 QPS對比。
(2)測試組網(wǎng)
(3)本地測試數(shù)據(jù)對比
使用指令集優(yōu)化性能對比
指令集優(yōu)化方案,通過 VUA進行 HTTPS 打流業(yè)務實測,與采用openssl軟件加解密場景做對比:
- 使用指令集優(yōu)化,同worker下,RSA 平均QPS提升1倍。
- 隨著進程數(shù)的增加,指令集優(yōu)化加速會成線性增長,在56 worker下,最高可達5.1w qps。
此優(yōu)化方案所帶來的性能提升主要依賴于:
- 使用 AVX512 指令優(yōu)化加解密
五、總結(jié)與思考
截止目前,vivo VLB在軟硬件加速領域,已經(jīng)同時支持exar加速卡與intel QAT 硬件和軟件指令集加速等方案,成功實現(xiàn)核心網(wǎng)絡組件自主可控,為構建高性能的網(wǎng)關架構賦能行業(yè)打下堅實的基礎。
未來 vivo VLB 將持續(xù)構建接入層網(wǎng)關能力體系。
- 安全與合規(guī)
作為vivo統(tǒng)一流量接入入口,VLB 將持續(xù)構建安全可靠的通信安全基礎設施,打造全方位的安全防護體系。
- 多協(xié)議支持
VLB 在高效接入能力建設方面將持續(xù)投入,通過引入 QUIC 協(xié)議,將提升用戶在弱網(wǎng)場景下的用戶體驗。
通過 MQTT 協(xié)議可以通過非常小的接入成本實現(xiàn)新設備和協(xié)議接入,積極擁抱萬物互聯(lián)。