vivo统一接入网关VUA转发性能优化实践

作者: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 协议可以通过非常小的接入成本实现新设备和协议接入,积极拥抱万物互联。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/457696.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Abaqus三维梯度泰森多边形插件:Voronoi FGM 3D(Mesh)- AbyssFish

插件介绍 Voronoi FGM 3D (Mesh) V1.0 - AbyssFish 插件可在Abaqus软件内生成梯度分布的三维泰森多边形长方体模型。插件可用于梯度功能材料(Functionally Gradient Materials)、梯度纳米金属材料、梯度金属结构等梯度晶体模型的建立。模型基于背景网格实现,通过单…

分布式数据处理MapReduce简单了解

文章目录 产生背景编程模型统计词频案例 实现机制容错机制Master的容错机制Worker的容错机制 产生背景 MapReduce是一种分布式数据处理模型和编程技术,由Google开发,旨在简化大规模数据集的处理。产生MapReduce的背景: 数据量的急剧增长&…

RAID技术知识详解到RAID 10的linux实现过程

1.RAID技术简介 RAID(Redundant Array of Independent Disks)独立磁盘冗余阵列。通俗来说就是将多个硬盘通过软件或硬件结合成虚拟单台大容量的硬盘使用。 RAID技术的特点: 可以自动检测故障硬盘; 可以重建硬盘坏道的资料&…

深度学习模型部署-番外-TVM机器学习编译

什么是机器学习编译器/AI编译? 图片来自知乎大佬的文章 机器学习编译是指:将模型从训练形式转变为部署模式 训练模式:使用训练框架定义的模型部署模式:部署所需要的模式,包括模型每个步骤的实现代码,管理资…

html--宠物

文章目录 htmljscss html <!DOCTYPE html> <html lang"en" > <head><meta charset"UTF-8"><title>CodePen - Spaceworm</title><script> window.requestAnimFrame (function() {return (window.requestAnimat…

简单的思考(一):MATLAB实现心形线

今天刷B站的时候看见了&#xff1a; 于是想着自己能不能也做出来 clc;clear; % 定义x的范围 x -2:0.01:2;% 初始化图形 figure; set(gcf,position,[0,0,800,600],color,w); h1 plot(x,abs(x).^(2/3) (0.9*sqrt((3.3-x.^2))).*sin(0.1*pi*x),r,LineWidth,3); hold on xlim(…

HAProxy——高性能负载均衡器

目录 一.常见的Web集群调度器 二.HAProxy基本介绍 1.HAProxy是什么&#xff1f; 2.HAProxy的特性 3.HAProxy常用的8种负载均衡调度算法 3.1 轮询&#xff1a;RR&#xff08;Round Robin&#xff09; 3.2 最小连接数&#xff1a;LC&#xff08;Least Connections&#xff…

基于JAVA的教务系统小程序的设计与实现【附项目源码】分享

基于JAVA的教务系统小程序的设计与实现: 源码地址&#xff1a;https://download.csdn.net/download/qq_41810183/88842782 一、引言 随着信息技术的不断发展&#xff0c;教务管理工作逐渐走向数字化、智能化。为了提高教务管理效率&#xff0c;方便师生查询教务信息&#xff…

ChatGPT 插件Plugin集合

ChatGPT的插件功能推出一段时间了&#xff0c;陆陆续续的上架了得有200了。 但是其中大部分都不是很好用&#xff0c;并且找起来也复杂。 推荐一个不知名热心人做的导航页。 ChatGPT Plugins Overview 基本上集合了所有的插件&#xff0c;并且还在实时更新中。 需要升级4.0&a…

机器学习 Python库 乱记录

MLFlow—模型实验和跟踪 MLflow是一个平台&#xff0c;帮助你从头到尾管理你的机器学习实验&#xff0c;确保可追溯性和可重复性。它提供了一个集中的存储库&#xff0c;用于存储你的代码、数据和模型工件&#xff0c;以及一个跟踪系统&#xff0c;记录你所有的实验&#xff0c…

前端实现文件预览(pdf、excel、word、图片)

需求&#xff1a;实现一个在线预览pdf、excel、word、图片等文件的功能。 介绍&#xff1a;支持pdf、xlsx、docx、jpg、png、jpeg。 以下使用Vue3代码实现所有功能&#xff0c;建议以下的预览文件标签可以在外层包裹一层弹窗。 图片预览 iframe标签能够将另一个HTML页面嵌入到…

openGauss学习笔记-242 openGauss性能调优-SQL调优-典型SQL调优点-SQL自诊断

文章目录 openGauss学习笔记-242 openGauss性能调优-SQL调优-典型SQL调优点-SQL自诊断242.1 SQL自诊断242.1.1 告警场景242.1.2 规格约束 openGauss学习笔记-242 openGauss性能调优-SQL调优-典型SQL调优点-SQL自诊断 SQL调优是一个不断分析与尝试的过程&#xff1a;试跑Query&…

操作系统(AndroidIOS)图像绘图的基本原理

屏幕显示图像的过程 我们知道&#xff0c;屏幕是由一个个物理显示单元组成&#xff0c;每一个单元我们可以称之为一个物理像素点&#xff0c;而每一个像素点可以发出多种颜色。 而图像&#xff0c;就是在不同的物理像素点上显示不同的颜色构成的。 像素点的颜色 像素的颜色是…

HTML5、CSS3面试题(二)

上一章:HTML5、CSS3面试题&#xff08;一&#xff09; 哪些是块级元素那些是行内元素&#xff0c;各有什么特点 &#xff1f;&#xff08;必会&#xff09; 行内元素: a、span、b、img、strong、input、select、lable、em、button、textarea 、selecting 块级元素&#xff1…

一文解决Word中公式插入问题(全免费/latex公式输入/texsWord)

分文不花&#xff0c;搞定你的word公式输入/texsWord完全使用指南 背景 碎碎念&#xff1a;折折腾腾至少装了几个小时&#xff0c;遇到了若干大坑。遇到的问题网上都搜索不到答案&#xff01;&#xff01;&#xff01;就让我来当指路的小火柴吧。 本篇适用于在word中输入la…

使用Python进行自然语言处理(NLP):NLTK与Spacy的比较【第133篇—NLTK与Spacy】

使用Python进行自然语言处理&#xff08;NLP&#xff09;&#xff1a;NLTK与Spacy的比较 自然语言处理&#xff08;NLP&#xff09;是人工智能领域的一个重要分支&#xff0c;它涉及到计算机如何理解、解释和生成人类语言。在Python中&#xff0c;有许多库可以用于NLP任务&…

【设计模式】二、UML 类图与面向对象设计原则 之 UML概述

二、UML 类图与面向对象设计原则 &#xff08;一&#xff09;UML 类图 UML 概述类与类的UML图示类之间的关系 &#xff08;二&#xff09;面向对象设计原则 单一职责原则&#xff08;Single Responsibility Principle, SRP&#xff09;开闭原则&#xff08;Open-Closed Princip…

x86_64架构栈帧以及帧指针FP

文章目录 一、x86_64架构寄存器简介二、x86_64架构帧指针FP三、示例四、保存帧指针参考资料 一、x86_64架构寄存器简介 在x86架构中&#xff0c;有8个通用寄存器可用&#xff1a;eax、ebx、ecx、edx、ebp、esp、esi和edi。在x86_64&#xff08;x64&#xff09;扩展中&#xff…

基于检索增强的 GPT-3.5 的文本到 SQL 框架,具有样本感知提示和动态修订链。

文章目录 一、论文关键信息二、基础概念三、主要内容1. Motivations2. Insights3. 解决方案的关键4. 实验 四、总结与讨论 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、论文关键信息 论文标题&#xff1a;Retrieval-augmented GPT-3.5-based T…

港大提出图结构大语言模型:GraphGPT

1. 引言 图神经网络&#xff08;Graph Neural Networks&#xff09;已经成为分析和学习图结构数据的强大框架&#xff0c;推动了社交网络分析、推荐系统和生物网络分析等多个领域的进步。图神经网络的主要优势在于它们能够捕获图数据中固有的结构信息和依赖关系。利用消息传递…