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