VLB 全称 vivo load balance。vivo负载均衡作为vivo互联网业务的IDC流量入口,承接了很多重要业务的公网流量。本文针对 VLB 的七层负载VUA HTTPS 性能优化进行探索,以获取最 佳转发性能。
VLB 整体架构的核心包括:基于DPDK的四层负载VGW,基于Apache APISIX和NGINX扩展功能的七层负载VUA,以及统一管控运维平台。
四层负载能力:通过 BGP 向交换机宣告VIP;支持均衡算法如轮询、加权轮询、加权最小连接数、一致性哈希;FullNAT 转发模式方便部署等。
SSL/TLS 能力:证书、私钥、握手策略的管理配置;支持 SNI 配置;支持基于多种加速卡的 SSL 卸载硬件加速等。
流量防控:提供一定的 Syn-Flood 防护能力;提供网络流量控制手段如 QoS 流控、ACL 访问控制等。
目前公司接入层最大的能力痛点,就是动态上游、动态路由、动态证书、流量灰度、黑白名单、动态调度、日志查询与追踪等。为了支持公司业务的持续发展,特别是业务的全面容器化,亟需建设一个统一接入平台,融合目前线上的NGINX集群及Ingress NGINX,用于承载公司web端、移动端、合作伙伴、内部系统、IOT设备流量,对齐行业的接入层能力,保障业务的顺利发展。
Intel QuickAssist 技术 OpenSSL引擎 (QAT_Engine) 支持硬件加速以及基于矢量化指令的优化软件。这一特性始于第三代Intel® Xeon®可扩展处理器,为用户提供了更多加速其工作负载的选项。
VUA 基于 NGINX 原生的异步处理框架上拓展出针对异步硬件引擎的异步事件处理机制,整体交互流程如下图所示:
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 的地方。
Application应用层主要包含两块内容:(1)QAT 异步框架的 patch,该 patch 提供对异步模式的支持;(2)QAT 引擎,engine 是 openssl 本身支持的一种机制,用以抽象各种加密算法的实现方式,intel 提供了 QAT 引擎的开源代码用以专门支持 QAT 加速。
SAL(service access layer)服务接入层,给上层 Application 提供加速卡接入服务,目前 QAT 主要提供 crypto 和 compression 两种服务,每一种服务都相互独立,接入层封装了一系列实用的接口,包括创建实例,初始化消息队列、发送\接受请求等。
如果平台同时支持 QAT_HW 和 QAT_SW,则默认是使用 QAT 硬件加速非对称算法和对称链式密码,使用 QAT 软件加速对称 GCM 密码。如果平台没有 QAT 硬件支持,那么它将使用 QAT_SW 加速来实现 qatengine 中支持的非对称算法。
下图说明了 QAT_Engine 的高级软件架构。NGINX 和 HAProxy 等应用程序是与 OpenSSL接口的常见应用程序。OpenSSL是一个用于 TLS/SSL 协议的工具包,从 1.1.0 版本开始,它开发了一个模块化系统来插入特定于设备的引擎。如上所述,QAT_Engine 中有两个独立的内部实体,通过它们可以执行加速。
执行机部署适配 QAT 引擎后的VUA,发包测试机进行压测灌包,在 CPU 负载达到 100%后比较得出VUA在进行 QAT 优化后的新建 QPS对比。
QAT卡优化方案,通过 VUA进行 HTTPS 打流业务实测,与采用OpenSSL 软件加解密场景做对比:
随着进程数的增加,QAT加速卡达到瓶颈,趋于稳定,在56 worker下,最高可达4.4w qps。
本方案采用icelake 6330型号(支持AVX512指令集)进行测试,采用RSA证书进行HTTPS加解密。
执行机部署适配指令集优化的VUA,发包测试机进行压测灌包,在 CPU 负载达到 100%后比较得出VUA在进行指令集优化后的新建 QPS对比。
指令集优化方案,通过 VUA进行 HTTPS 打流业务实测,与采用openssl软件加解密场景做对比:
截止目前,vivo VLB在软硬件加速领域,已经同时支持exar加速卡与intel QAT 硬件和软件指令集加速等方案,成功实现核心网络组件自主可控,为构建高性能的网关架构赋能行业打下坚实的基础。
安全与合规作为vivo统一流量接入入口,VLB 将持续构建安全可靠的通信安全基础设施,打造全方位的安全防护体系。
多协议支持VLB 在高效接入能力建设方面将持续投入,通过引入 QUIC 协议,将提升用户在弱网场景下的用户体验。通过 MQTT 协议可以通过非常小的接入成本实现新设备和协议接入,积极拥抱万物互联。