Tengine开源新特性:如何让HTTPS处理能力轻松翻倍?
阿里妹導(dǎo)讀:Tengine,輕量級Web服務(wù)器,基于Nginx進(jìn)行開發(fā),針對大訪問量網(wǎng)站的需求,新增了很多高級功能和特性。比如,Tengine兼容Nginx的所有配置,并且增加了獨立進(jìn)程框架、頁面優(yōu)化、集成了Lua語言進(jìn)行擴展等很多實用的功能,并在性能方面做了較大的提升。阿里全站HTTPS項目誕生的七層流量入口網(wǎng)關(guān)“接入層”也是基于Tengine,目前90%以上的流量都是HTTPS,它是如何支撐雙11零點流量高峰如絲般順滑?
背景介紹
雖然全站HTTPS已經(jīng)是一個老生常談的話題,但是國內(nèi)為何能做到的網(wǎng)站卻還是屈指可數(shù)?原因簡單總結(jié)來說有兩點,首先使用HTTPS后使得網(wǎng)站訪問速度變“慢” ,其次導(dǎo)致服務(wù)器CPU消耗變高、使得機器成本變“貴”。雖然HTTPS軟件優(yōu)化方案也各式其樣,如Session復(fù)用、OCSP Stapling、False Start、dynamic record size、TLS1.3、HSTS等等,但是軟件層面如何優(yōu)化也無法滿足流量日益增長的速度,加上CPU摩爾定律已入暮年,使得專用硬件卸載CPU密集型運算成為業(yè)界一個通用解決方案,Tengine首次開源使用Intel QAT加速卡卸載HTTPS,輕松使得網(wǎng)站HTTPS處理能力翻倍。
加速方案
Tengine-2.2.2本次開源的新特性包括:ssl_async支持異步OpenSSL模塊、支持TLS1.3具備TLS握手0-RTT、upstream配置塊支持include指令方便配置管理,其中ssl_async支持異步OpenSSL模式,可結(jié)合硬件如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驅(qū)動完成對硬件的操作。
原理介紹
Tengine在原有socket接口異步讀/寫事件的基礎(chǔ)上擴展出針對異步硬件引擎的異步事件(圖二所示),并在原有的連接結(jié)構(gòu)體中增加新的異步來源即async_fd用來接收異步引擎的通知,當(dāng)執(zhí)行OpenSSL相關(guān)操作時,把返回的事件fd加載到Tengine的異步事件框架中,當(dāng)檢測到硬件執(zhí)行完相關(guān)操作后就會喚醒相關(guān)事件進(jìn)行后續(xù)操作的執(zhí)行。
當(dāng)Tengine啟用異步ssl_asyncQAT加速模式,在接受到客戶端的SSL/TLS請求后,將私鑰操作通過OpenSSL API卸載至QAT硬件,并迅速或者返回值-1以及相應(yīng)的錯誤碼SSLERRORWANT_ASYNC。Tengine依據(jù)該錯誤碼通過OpenSSL相關(guān)API獲取引擎提供的eventfd并添加到Tengine epoll的監(jiān)視列表中,同時釋放CPU資源用于后續(xù)其他連接業(yè)務(wù)的處理。目前QAT engine默認(rèn)提供了內(nèi)部線程用于輪詢QAT硬件資源,當(dāng)QAT硬件完成相應(yīng)的操作后,QAT engine通過上述eventfd發(fā)送通知至Tengine,Tengine利用類似socket事件的處理機制,對該異步事件進(jìn)行后續(xù)處理,即再次調(diào)用之前返回異步錯誤碼的API進(jìn)入引擎,回收相應(yīng)的結(jié)果完成該次卸載操作。這種處理方式最大化的利用了硬件資源,大大提高了服務(wù)器端的并發(fā)處理能力。
其工作流程如圖三所示,Tengine通過OpenSSL API (SSLdohandshake)發(fā)起SSL/TLS握手操作,在OpenSSL庫內(nèi)部,當(dāng)有私鑰操作請求需要被卸載時,產(chǎn)生相應(yīng)的異步任務(wù)(async job),并直接進(jìn)入相應(yīng)的處理引擎(QAT engine),當(dāng)處理引擎接受了該請求后,通過OpenSSL異步庫對當(dāng)前任務(wù)進(jìn)行暫停并調(diào)度當(dāng)前的調(diào)用棧返回相應(yīng)的異步錯誤碼給調(diào)用者Tengine。Tengine將該任務(wù)對應(yīng)的異步eventfd掛起然后處理其他操作。當(dāng)該eventfd被喚起時,再次重入SSLdohandshake API,OpenSSL通過函數(shù)內(nèi)部的狀態(tài)機,再次調(diào)度之前被暫停的任務(wù),并繼續(xù)完成當(dāng)前的調(diào)用棧直到返回給調(diào)用者相應(yīng)的返回值標(biāo)記當(dāng)前操作成功。
性能數(shù)據(jù)
cpu型號:Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz 32核
內(nèi)核:3.10
網(wǎng)卡:萬兆
OpenSSL版本:1.1.0-f
QAT engine版本:v0.5.30
QAT驅(qū)動版本:qatmux.l.2.6.0-60
測試場景:不同證書類型下,本地返回10字節(jié)數(shù)據(jù)
同等條件下Tengine啟用ssl_async異步模式結(jié)合QAT硬件加速后對HTTPS的處理能力對比如下所示。
當(dāng)使用RSA-RSA-AES128-GCM-SHA256加密套件時,Tengine啟用ssl_asyncQAT加速只需8核QPS就可以達(dá)到17.6k,關(guān)閉QAT時32核QPS可到達(dá)29k,如下圖所示:
當(dāng)使用ECDHE-RSA-AES128-GCM-SHA256加密套件時,Tengine啟用ssl_asyncQAT加速只需16核QPS就可以達(dá)到15k、而關(guān)閉QAT場景下32核CPU全部打滿時QPS才達(dá)到9.4k,如下圖所示:
當(dāng)使用ECDHE-ECDSA-AES128-GCM-SHA256加密套件(secp384r1),Tengine啟用ssl_asyncQAT加速只需8核QPS就可以達(dá)到13k、而關(guān)閉QAT場景下需要32核CPU全部打滿時QPS才達(dá)到11k,如下圖所示:
當(dāng)使用ECDHE-ECDSA-AES128-GCM-SHA256加密套件(prime256v1)時,Tengine啟用ssl_asyncQAT加速時8核就可以到達(dá)硬件處理峰值16k,關(guān)閉QAT時32核QPS可到達(dá)29k,如下圖所示:
總結(jié)
當(dāng)Tengine啟用ssl_asyncQAT加速時,加密套件使用RSA-RSA算法時HTTPS處理能力是非加速版Tengine的3.8倍(8核時),使用ECDHE-RSA算法的HTTPS處理能力是非加速版Tengine的2.65倍(8核時),使用ECDHE-ECDSA(P-384)算法的HTTPS處理能力是非加速版Tengine的2倍(16核)。當(dāng)然QAT也不是萬能的,當(dāng)使用ECDHE-ECDSA(P-256)加密套件8核的時候就達(dá)到了QAT硬件處理峰值16k左右,此時相比于非加速版Tengine只有23%的性能提升。
由于篇幅有限,有相關(guān)疑問也可以點擊 https://github.com/alibaba/tengine/issues/1004 閱讀原文,了解github開源Tengine-2.2.2新特性介紹,并和我們討論。
致謝
感謝Intel? QuickAssist Technology (QAT) 團(tuán)隊本次對Tengine QAT的異步加速方案的技術(shù)支持與幫助,感謝Tengine開源社區(qū)對Tengine的貢獻(xiàn)與信任,相信開源版Tengine在未來會賦予更多的新特性,一起努力把Tengine在功能和性能方面都能做到極致發(fā)揮。
總結(jié)
以上是生活随笔為你收集整理的Tengine开源新特性:如何让HTTPS处理能力轻松翻倍?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重磅下载!业界首本强化学习应用宝典,阿里
- 下一篇: 揭秘!阿里数据中心大幅降低成本的核心技术