Tengine,轻量级Web服务器
阿里妹导读:Tengine,轻量级Web服务器,基于Nginx进行开发,针对大访问量网站的需求,新增了很多高级功能和特性。比如,Tengine兼容Nginx的所有配置,并且增加了独立进程框架、页面优化、集成了Lua语言进行扩展等很多实用的功能,并在性能方面做了较大的提升。阿里全站HTTPS项目诞生的七层流量入口网关“接入层”也是基于Tengine,目前90%以上的流量都是HTTPS,它是如何支撑双11零点流量高峰如丝般顺滑?
背景介绍
虽然全站HTTPS已经是一个老生常谈的话题,但是国内为何能做到的网站却还是屈指可数?原因简单总结来说有两点,首先使用HTTPS后使得网站访问速度变“慢” ,其次导致服务器CPU消耗变高、使得机器成本变“贵”。虽然HTTPS软件优化方案也各式其样,如Session复用、OCSP Stapling、False Start、dynamic record size、TLS1.3、HSTS等等,但是软件层面如何优化也无法满足流量日益增长的速度,加上CPU摩尔定律已入暮年,使得专用硬件卸载CPU密集型运算成为业界一个通用解决方案,Tengine首次开源使用Intel QAT加速卡卸载HTTPS,轻松使得网站HTTPS处理能力翻倍。
加速方案
Tengine-2.2.2本次开源的新特性包括:ssl_async支持异步OpenSSL模块、支持TLS1.3具备TLS握手0-RTT、upstream配置块支持include指令方便配置管理,其中ssl_async支持异步OpenSSL模式,可结合硬件如Intel QAT加速卡卸载SSL密集型运算,可使得Tengine对HTTPS的处理能力翻倍。
Tengine基于Intel QAT的异步加速方案,其总体框架如图一所示,由三部分组成Tengine的ssl_async指令、OpenSSL + QAT Engine以及QAT Driver,其中Tengine-2.2.2通过适配OpenSSL-1.1.0的异步接口,将私钥操作卸载至Intel提供的引擎(QAT engine)中,引擎通过QAT驱动完成对硬件的操作。
640?wx_fmt=png
原理介绍
Tengine在原有socket接口异步读/写事件的基础上扩展出针对异步硬件引擎的异步事件(图二所示),并在原有的连接结构体中增加新的异步来源即async_fd用来接收异步引擎的通知,当执行OpenSSL相关操作时,把返回的事件fd加载到Tengine的异步事件框架中,当检测到硬件执行完相关操作后就会唤醒相关事件进行后续操作的执行。
640?wx_fmt=png
当Tengine启用异步ssl_asyncQAT加速模式,在接受到客户端的SSL/TLS请求后,将私钥操作通过OpenSSL API卸载至QAT硬件,并迅速或者返回值-1以及相应的错误码SSLERRORWANT_ASYNC。Tengine依据该错误码通过OpenSSL相关API获取引擎提供的eventfd并添加到Tengine epoll的监视列表中,同时释放CPU资源用于后续其他连接业务的处理。目前QAT engine默认提供了内部线程用于轮询QAT硬件资源,当QAT硬件完成相应的操作后,QAT engine通过上述eventfd发送通知至Tengine,Tengine利用类似socket事件的处理机制,对该异步事件进行后续处理,即再次调用之前返回异步错误码的API进入引擎,回收相应的结果完成该次卸载操作。这种处理方式最大化的利用了硬件资源,大大提高了服务器端的并发处理能力。
640?wx_fmt=png
其工作流程如图三所示,Tengine通过OpenSSL API (SSLdohandshake)发起SSL/TLS握手操作,在OpenSSL库内部,当有私钥操作请求需要被卸载时,产生相应的异步任务(async job),并直接进入相应的处理引擎(QAT engine),当处理引擎接受了该请求后,通过OpenSSL异步库对当前任务进行暂停并调度当前的调用栈返回相应的异步错误码给调用者Tengine。Tengine将该任务对应的异步eventfd挂起然后处理其他操作。当该eventfd被唤起时,再次重入SSLdohandshake API,OpenSSL通过函数内部的状态机,再次调度之前被暂停的任务,并继续完成当前的调用栈直到返回给调用者相应的返回值标记当前操作成功。
性能数据
cpu型号:Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz 32核
内核:3.10
网卡:万兆
OpenSSL版本:1.1.0-f
QAT engine版本:v0.5.30
QAT驱动版本:qatmux.l.2.6.0-60
测试场景:不同证书类型下,本地返回10字节数据
同等条件下Tengine启用ssl_async异步模式结合QAT硬件加速后对HTTPS的处理能力对比如下所示。
当使用RSA-RSA-AES128-GCM-SHA256加密套件时,Tengine启用ssl_asyncQAT加速只需8核QPS就可以达到17.6k,关闭QAT时32核QPS可到达29k,如下图所示:
640?wx_www.mhylpt.com fmt=png
当使用ECDHE-RSA-AES128-GCM-SHA256加密套件时,Tengine启用ssl_asyncQAT加速只需16核QPS就可以达到15k、而关闭QAT场景下32核CPU全部打满时QPS才达到9.4k,如下图所示:
640?wx_fmt=png
当使用ECDHE-ECDSA-AES128-GCM-SHA256加密套件(secp384r1),Tengine启用ssl_asyncQAT加速只需8核QPS就可以达到13k、而关闭QAT场景下需要32核CPU全部打满时QPS才达到11k,如下图所示:
640?wx_fmt=www.078881.cn/ png
当使用ECDHE-ECDSA-AES128-GCM-SHA256加密套件(prime256v1)时,Tengine启用ssl_asyncQAT加速时8核就可以到达硬件处理峰值16k,关闭QAT时32核QPS可到达29k,如下图所示:
640?wx_fmt=png
总结
当Tengine启用ssl_asyncQAT加速时,加密套件使用RSA-RSA算法时HTTPS处理能力是非加速版Tengine的3.8倍(8核时),使用ECDHE-RSA算法的HTTPS处理能力是非加速版Tengine的2.65倍(8核时),使用ECDHE-ECDSA(www.fengshen157.com P-384)算法的HTTPS处理能力是非加速版Tengine的2倍(16核)。当然QAT也不是万能的,当使用ECDHE-ECDSA(P-256)加密套件8核的时候就达到了QAT硬件处理峰值16k左右,此时相比于非加速版Tengine只有23%的性能提升。
由于篇幅有限,有相关疑问也可以点击文末“阅读原文”,了解github开源Tengine-2.2.2新特性介绍,并和我们讨论。
致谢
感谢Intel® QuickAssist Technology (QAT) 团队本次对Tengine QAT的异步加速方案的技术支持与帮助,感谢Tengine开源社区对Tengine的贡献与信任,相信开源版Tengine在未来会赋予更多的新特性,一起努力把Tengine在功能和性能方面都能做到极致发挥。
Tengine,轻量级Web服务器的更多相关文章
- 轻量级web服务器lighttpd的编译及配置(for x86-linux)
转自:http://blog.163.com/ljf_gzhu/blog/static/131553440201211522317367/ 备注: PC Linux:Ubuntu-10.10 Linu ...
- 一篇文章带你了解轻量级Web服务器——Nginx简单入门
一篇文章带你了解轻量级Web服务器--Nginx简单入门 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件代理服务器 在本篇中我们会简单介绍Nginx的特点,安装,相关指令使用以及配置信 ...
- Tomcat轻量级web服务器
1.三种web服务器 apache: 动态网站 nginx: 静态网站 tomcat:java开发的程序 2.tomcat安装 官网下载安装包(tomcat 9) 解压并放在/usr/local下 c ...
- lighttpd 轻量级WEB服务器
Lighttpd 是一款开源 Web 服务器软件.Lighttpd 安全快速,符合行业标准,适配性强并且针对高配置环境进行了优化.相对于其它的 Web 服务器而言,Lighttpd 占用内存更少:因其 ...
- HttpServer:一款Windows平台下基于IOCP模型的高并发轻量级web服务器
HttpServer的特点1.完全采用IOCP模型,实现真正的异步IO,高并发.高可靠: 2.支持4G以上文件下载: 3.支持断点续传: 4.轻量级,体积小,服务器文件仅200多K,无任何依赖库: 5 ...
- http-server 超轻量级web服务器
有的时候做前端,想要运行一些代码,但是又没有必要使用tomcat或者Apache http server,这个时候一个轻量级的简单的http server就可以搞定了. Http-server是基于n ...
- Python——轻量级web服务器flask的学习
前言: 根据工程需要,开始上手另一个python服务器---flask,flask是一个轻量级的python服务器,简单易用.将我的学习过程记录下来,有新的知识会及时补充. 记录只为更好的分享~ 正文 ...
- 轻量级Web服务器http-server
http-server是一个简单的零配置命令行http服务器.可用于h5页面手机端测试 Vue .Angualr.React项目打包后真机测试 github地址:https://github.com/ ...
- HttpServer: 基于IOCP模型且集成Openssl的轻量级高性能web服务器
2021年4月写过一个轻量级的web服务器HttpServer,见文章: <HttpServer:一款Windows平台下基于IOCP模型的高并发轻量级web服务器>,但一直没有时间添加O ...
随机推荐
- [算法总结] 20 道题搞定 BAT 面试——二叉树
本文首发于我的个人博客:尾尾部落 0. 几个概念 完全二叉树:若二叉树的高度是h,除第h层之外,其他(1~h-1)层的节点数都达到了最大个数,并且第h层的节点都连续的集中在最左边.想到点什么没?实际上 ...
- linux 下awk后统计某一列数据之和简单的命令
例如有文件test.txt格式如下: aaa:1 bbb:2 cat a|awk -F\: '{print"+"$2}'|xargs echo 0|bc -l
- Doing Homework again:贪心+结构体sort
Doing Homework again Problem Description Ignatius has just come back school from the 30th ACM/ICPC. ...
- python的Socket网络编程 使用模板
本文给出的是TCP协议的Socket编程. 其中用了一个dbmanager数据库操作模块,这个模块是我自己定义的,可以在我的另一个文章中找到这个模块的分享.python操作mysql数据库的精美实用模 ...
- Servlet各版本web.xml的头文件配置模板
原文: http://www.codeweblog.com/servlet%E5%90%84%E7%89%88%E6%9C%ACweb-xml%E7%9A%84%E5%A4%B4%E6%96%87%E ...
- 用C给小学生出题目
用C给小学生出题目 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 600 300 • Es ...
- 第二阶段Sprint冲刺会议4
进展:主要实现调取手机摄像头录制,能够实现“开始”及“暂停”功能.
- java 转载
这几天忙于其他的事情,编程的习惯没有继续下去,偶然间看到了这篇文章,感觉收益颇丰,言归正传,下面即入主题 java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 n ...
- Task 6.4 冲刺Two之站立会议10
今天是最后一次站立会议,对我们的软件发布进行了讨论,看如何发布软件.我主要负责编写发布时需要提供的文和资料.
- Chapter 1 概述
软件分为通用软件和应用软件,具有复杂.不可见和不断变化的特点:从出现到现在共经历了四个重要的发展阶段,但现在的软件发展依然存在着许多问题. 软件工程是采用工程的概念.原理.技术和方法来开发与维护软件, ...