性能提升一倍!云原生网关支持 TLS 硬件加速
简介:业界在优化 HTTPS 的性能上也做了诸多探索,传统的软件优化方案有 Session 复用、OCSP Stapling、False Start、dynamic record size、TLS1.3、HSTS 等, 但软件层面如何优化也无法满足流量日益增长的速度,加上 CPU 摩尔定律已入暮年,使得专用硬件卸载 CPU 密集型运算成为业界一个通用解决方案。
作者|井轶
审核&校对|如葑
随着网络环境的日渐复杂,传统 HTTP 明文传输协议带来的传输安全风险也日渐升高,因此 HTTPS 的密文传输协议得到了业界的普遍认可与广泛应用;任何事情都有其两面性,HTTPS 带来更高传输安全性的同时,由于需要做认证及数据加解密,相比 HTTP 使用 HTTPS 后使得网站访问速度变“慢”,且导致服务器 CPU 消耗变高、从而机器成本变得更“贵”。
业界在优化 HTTPS 的性能上也做了诸多探索,传统的软件优化方案有 Session 复用、OCSP Stapling、False Start、dynamic record size、TLS1.3、HSTS 等, 但软件层面如何优化也无法满足流量日益增长的速度,加上 CPU 摩尔定律已入暮年,使得专用硬件卸载 CPU 密集型运算成为业界一个通用解决方案。
网关为什么是 HTTPS 优化(TLS 卸载优化)的最佳路径?
网关作为请求流量进入业务应用的桥头堡,对于 HTTPS 优化这种跨业务的通用诉求是非常适合的落脚点,具体优势如下:
- 运维降本:网关统一处理 HTTPS 显然相比各业务分散处理运维成本更低。
- 机器降本:通常网关采用集群化的规模部署,统一 HTTPS 优化能够带来显著的机器成本优化。
- 业务提效:网关处理 HTTPS 后,业务只需关注自身逻辑即可,提升业务开发效率。
阿里在硬件加速上的探索
阿里统一接入网关 Tengine 承担着集团所有的入口流量,随着 HTTPS 化的全面推进,对于网关的性能挑战也非常大。业务驱动了技术创新,2017 年接入网关在硬件加速领域也迈出了第一步,开始尝试 QAT 卡硬件加速方案。
基于 QAT 卡的 TLS 硬件加速方案
整体方案由三部分组成:Tengine的ssl_async 指令、OpenSSL + QAT Engine 及 QAT Driver。其中 Tengine 通过适配 OpenSSL-1.1.0 的异步接口,将私钥操作卸载至硬件的 QAT engine 中,引擎通过 QAT 驱动调用硬件完成非对称算法取回结果。方案图示如下:
方案优点
- HTTPS 卸载由独立硬件 QAT 完成,不额外增加 CPU 消耗,使用不同的加密套件测试,整体上性能非常好。详细性能数据可见文末文章链接《在阿里的统一接入层上进行了硬件加速的探索》。
方案缺点
- 运维成本非常高,独立的 QAT 卡需要提前独立采购,尤其对于电商大促的突发流量场景无法做到弹性。
- 在目前容器化部署的大背景下,QAT 的使用有很多稳定性问题。
基于 CPU Multi-Buffer 特性的 TLS 卸载加速方案
在经历 Tengine QAT 的探索实践后,阿里云推出了基于开源 Envoy 构建的 MSE 云原生网关产品,读到这里有的同学可能会疑惑为什么选择 Envoy 而不是内部的 Tengine,关于这个问题的答案在《阿里巴巴云原生网关三位一体的选择与实践》 中。
阿里云 2021 年发布了 搭载最新至强处理器 Ice Lake 的 ECS 产品,利用 CPU 的硬件特性使得算力大幅提升 50% 以上。其中提供的 Crypto Acceleration 特性,包括 Vector AES ,通过 multi-buffer lib 配合,能够加速 AES、 RSA、EC 等密码学计算。利用该特性使得 HTTPS 硬件加速得以摆脱专用硬件加速卡的限制,使用 CPU 内置指令结合 SIMD 机制也可以大幅提升 HTTPS 的性能。基于此云原生网关率先完成了对其适配,将硬件加速的性能优势带给用户,在不增加用户资源成本的同时大幅度提升 HTTPS 的性能。


从上图压测数据可以看出使用 TLS 硬件加速后,相比普通 HTTPS 请求 TLS 握手时延降低一倍,极限 QPS 提升 80% 以上。
方案压测
1、压测基础环境
- 云原生网关规格: 1C2G * 1
- 压测工具:Grafana k6
- 请求大小: 1kb
- 证书:RSA2048
- 加密套件:
ECDHE-RSA-CHACHA20-POLY1305(TLS1.2) TLS_AES_256_GCM_SHA384(TLS1.3)
2、压测结论
1C2G 情况下,开启硬件加速后极限 QPS 提高 80% 以上,TLS 握手时间降低一倍。注:采用 1C2G 规格是因为更容易观察单核极限性能。
3、测试数据
| TLS版本 | 是否开启硬件加速 | 并发度 | QPS | TLS握手平均时间 | TLS握手最长时间 |
| 1.2 | 未开启 | 200 | 1009 | 98.5ms | 177.37ms |
| 1.2 | 未开启 | 500 | 1004 | 313.84ms | 457.56ms |
| 1.3 | 未开启 | 200 | 995 | 77.81ms | 177.24ms |
| 1.3 | 开启 | 200 | 1886 | 48.71ms | 104.04ms |
| 1.2 | 开启 | 200 | 1876 | 59.98ms | 113.55ms |
| 1.2 | 开启 | 500 | 1873 | 145.81ms | 262.91ms |
500 并发没开启硬件加速时的数据
500 并发,开启硬件加速时的数据
方案优点
- 无需独立硬件支持,运维成本低且易于弹性扩缩容。
- 适用场景更广泛。
写在最后
目前硬件加速功能已经正式上线,相比自建,您无需关心底层硬件加速机器的运维就能在同规格下获取一倍的 HTTPS 性能提升,具体可参考新建云原生网关进行硬件加速机器的购买。
相关链接
《在阿里的统一接入层上进行了硬件加速的探索》阿里七层流量入口 Tengine硬件加速探索之路-阿里云开发者社区
《阿里云上新了:搭载最新至强处理器 Ice Lake,算力提升 50% 以上》
阿里云上新了:搭载最新至强处理器Ice Lake,算力提升50%以上-阿里云开发者社区
新建云原生网关
本文为阿里云原创内容,未经允许不得转载。
性能提升一倍!云原生网关支持 TLS 硬件加速的更多相关文章
- Web 应用性能提升 10 倍的 10 个建议
转载自http://blog.jobbole.com/94962/ 提升 Web 应用的性能变得越来越重要.线上经济活动的份额持续增长,当前发达世界中 5 % 的经济发生在互联网上(查看下面资源的统计 ...
- 重构、插件化、性能提升 20 倍,Apache DolphinScheduler 2.0 alpha 发布亮点太多!
点击上方 蓝字关注我们 社区的小伙伴们,好消息!经过 100 多位社区贡献者近 10 个月的共同努力,我们很高兴地宣布 Apache DolphinScheduler 2.0 alpha 发布.这是 ...
- 存算分离下写性能提升10倍以上,EMR Spark引擎是如何做到的?
引言 随着大数据技术架构的演进,存储与计算分离的架构能更好的满足用户对降低数据存储成本,按需调度计算资源的诉求,正在成为越来越多人的选择.相较 HDFS,数据存储在对象存储上可以节约存储成本,但与此 ...
- Nacos 2.0 正式发布,性能提升 10 倍!!
3月20号,Nacos 2.0.0 正式发布了! Nacos 简介: 一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台. 通俗点讲,Nacos 就是一把微服务双刃剑:注册中心 + 配置中 ...
- 性能提升 40 倍!我们用 Rust 重写了自己的项目
前言 Rust 已经悄然成为了最受欢迎的编程语言之一.作为一门新兴底层系统语言,Rust 拥有着内存安全性机制.接近于 C/C++ 语言的性能优势.出色的开发者社区和体验出色的文档.工具链和IDE 等 ...
- 查询性能提升3倍!Apache Hudi 查询优化了解下?
从 Hudi 0.10.0版本开始,我们很高兴推出在数据库领域中称为 Z-Order 和 Hilbert 空间填充曲线的高级数据布局优化技术的支持. 1. 背景 Amazon EMR 团队最近发表了一 ...
- Elasticsearch Reindex性能提升10倍+实战
文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484134&idx=1&sn=750249a ...
- 在MongoDB中创建一个索引而性能提升1000倍的小例子
在https://www.cnblogs.com/xuliuzai/p/9965229.html的博文中我们介绍了MongoDB的常见索引的创建语法.部分同学还想看看MongoDB的威力到底有多大,所 ...
- 有史以来性价比最高最让人感动的一次数据库&SQL优化(DB & SQL TUNING)——半小时性能提升千倍
昨天,一个客户现场人员急急忙忙打电话找我,说需要帮忙调优系统,因为经常给他们干活,所以,也就没多说什么,先了解情况,据他们说,就是他们的系统最近才出现了明显的反应迟钝问题,他们的那个系统我很了解,软硬 ...
- 从CLR GC到CoreCLR GC看.NET Core对云原生的支持
内存分配概要 前段时间在园子里看到有人提到了GC学习的重要性,很赞同他的观点.充分了解GC可以帮助我们更好的认识.NET的设计以及为何在云原生开发中.NET Core会占有更大的优势,这也是一个程序员 ...
随机推荐
- day08-Axios
Axios 1.基本说明 Axios是一个基于promise的网络请求库,作用于node.js和浏览器中.它是 isomorphic 的 (即同一套代码可以运行在浏览器和node.js中).在服务端它 ...
- Grails的数据库相关开发
1.开发domain和service 在出来的输入框里输入domain的名字,可以包括包名. 这里我输入test.domain.House,点finish 创建了两个groovy文件,一个当然是tes ...
- 面试官:volatile如何保证可见性的,具体如何实现?
写在开头 在之前的几篇博文中,我们都提到了 volatile 关键字,这个单词中文释义为:不稳定的,易挥发的,在Java中代表变量修饰符,用来修饰会被不同线程访问和修改的变量,对于方法,代码块,方法参 ...
- 用phpStudy配置apache服务器
一:下载phpStudy 1进入官网https://www.xp.cn/download.html 选择稳定的2018版本 2执行下载好的文件,选择下载地址 注意!这里的安装路径不能有中文 3亮两个绿 ...
- Newtonsoft.Json/Json.NET忽略序列化时的意外错误
在.NET中Newtonsoft.Json(Json.NET)是我们常用来进行Json序列化与反序列化的库. 而在使用中常会遇到反序列化Json时,遇到不规则的Json数据解构而抛出异常. Newto ...
- 风场可视化学习笔记:openlayers
最近在弄地图控件方面的东西,这里分享一个我找到的一个添加风场的教程和demo,需要对大家有所帮助(以下为转载内容)载于https://blog.csdn.net/u010065726/article/ ...
- 2022北航软件研究生入学考试991考试大纲-数据结构与C
991"数据结构与C语言程序设计"考试大纲 "数据结构与C语言程序设计"考试内容包括"数据结构"与"C语言程序设计"两门 ...
- C# 单例模式使用 Singleton
Singleton 类如下: public class Singleton<T> where T : class, new() { private static T _instance; ...
- Oracle 视图创建自增ID
select ROW_NUMBER() over (order by sysdate()) as id
- Ubuntu系统部署springcloud+nacos遇到的问题。
1,部署上的jar包运行正常,但是通过浏览器不能访问,telnet +IP+端口连接不通.小皮面板访问后台接口也是不通但是小皮面板可以通过浏览器访问.具体问题暂未解决. 2,改用docker部署,将j ...