Tengine开源新特性:如何让HTTPS处理能力轻松翻倍?
阿里妹導讀: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驅動完成對硬件的操作。
原理介紹
Tengine在原有socket接口異步讀/寫事件的基礎上擴展出針對異步硬件引擎的異步事件(圖二所示),并在原有的連接結構體中增加新的異步來源即async_fd用來接收異步引擎的通知,當執行OpenSSL相關操作時,把返回的事件fd加載到Tengine的異步事件框架中,當檢測到硬件執行完相關操作后就會喚醒相關事件進行后續操作的執行。
當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進入引擎,回收相應的結果完成該次卸載操作。這種處理方式最大化的利用了硬件資源,大大提高了服務器端的并發處理能力。
其工作流程如圖三所示,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,如下圖所示:
當使用ECDHE-RSA-AES128-GCM-SHA256加密套件時,Tengine啟用ssl_asyncQAT加速只需16核QPS就可以達到15k、而關閉QAT場景下32核CPU全部打滿時QPS才達到9.4k,如下圖所示:
當使用ECDHE-ECDSA-AES128-GCM-SHA256加密套件(secp384r1),Tengine啟用ssl_asyncQAT加速只需8核QPS就可以達到13k、而關閉QAT場景下需要32核CPU全部打滿時QPS才達到11k,如下圖所示:
當使用ECDHE-ECDSA-AES128-GCM-SHA256加密套件(prime256v1)時,Tengine啟用ssl_asyncQAT加速時8核就可以到達硬件處理峰值16k,關閉QAT時32核QPS可到達29k,如下圖所示:
總結
當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核)。當然QAT也不是萬能的,當使用ECDHE-ECDSA(P-256)加密套件8核的時候就達到了QAT硬件處理峰值16k左右,此時相比于非加速版Tengine只有23%的性能提升。
由于篇幅有限,有相關疑問也可以點擊 https://github.com/alibaba/tengine/issues/1004 閱讀原文,了解github開源Tengine-2.2.2新特性介紹,并和我們討論。
致謝
感謝Intel? QuickAssist Technology (QAT) 團隊本次對Tengine QAT的異步加速方案的技術支持與幫助,感謝Tengine開源社區對Tengine的貢獻與信任,相信開源版Tengine在未來會賦予更多的新特性,一起努力把Tengine在功能和性能方面都能做到極致發揮。
總結
以上是生活随笔為你收集整理的Tengine开源新特性:如何让HTTPS处理能力轻松翻倍?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重磅下载!业界首本强化学习应用宝典,阿里
- 下一篇: 揭秘!阿里数据中心大幅降低成本的核心技术