摘要:今天分享的主題是阿里七層流量入口硬件加速探索之路。業(yè)務(wù)驅(qū)動了技術(shù)創(chuàng)新,年接入層在硬件加速領(lǐng)域邁出了第一步。三監(jiān)控,對硬件加速相關(guān)的資源指標(biāo)進(jìn)行實時監(jiān)控和報警,防患于未然。硬件加速效果上線后我們獲得了一些加速效果的數(shù)據(jù)。
摘要: Tengine在軟件層面已經(jīng)有了深度的調(diào)試和優(yōu)化經(jīng)驗,但是在硬件層面,通用處理器(CPU)已經(jīng)進(jìn)入了摩爾定律,有了瓶頸。而在業(yè)務(wù)量突飛猛進(jìn)的當(dāng)下,如何利用硬件來提升性能,承載雙11等大型活動的洪峰流量,保障活動平穩(wěn)度過呢?本文作者:王發(fā)康,花名毅松,負(fù)責(zé)集團(tuán)主站統(tǒng)一接入層Tengine的開發(fā)與維護(hù)。
Tengine在軟件層面已經(jīng)有了深度的調(diào)試和優(yōu)化經(jīng)驗,但是在硬件層面,通用處理器(CPU)已經(jīng)進(jìn)入了摩爾定律,有了瓶頸。而在業(yè)務(wù)量突飛猛進(jìn)的當(dāng)下,如何利用硬件來提升性能,承載雙11等大型活動的洪峰流量,保障活動平穩(wěn)度過呢?
本文作者:王發(fā)康,花名毅松,負(fù)責(zé)集團(tuán)主站統(tǒng)一接入層Tengine的開發(fā)與維護(hù)。今天分享的主題是《阿里七層流量入口Tengine硬件加速探索之路》。
接入層系統(tǒng)介紹
接入層是2015年阿里巴巴全站HTTPS誕生的一個產(chǎn)品。作為一個電商網(wǎng)站,為了保護(hù)用戶信息安全、賬戶、交易的安全,全站HTTPS是勢在必行,如果淘寶、天貓、聚劃算等各業(yè)務(wù)方在后端各自做接入層,機(jī)器成本高,而且證書管理復(fù)雜。為了解決問題,我們做了統(tǒng)一接入層,來做HTTPS卸載和流量分發(fā)等通用功能。
所有的阿里集團(tuán)流量通過四層LVS,到達(dá)統(tǒng)一接入層,統(tǒng)一接入層根據(jù)不同的維度域名轉(zhuǎn)發(fā)到對應(yīng)的后端APP,并且提供智能的流量分發(fā)策略。因為抽象出一層,通用的安全防攻擊、鏈路追蹤等高級功能,都可以在這一層統(tǒng)一實現(xiàn)。
接入層是集團(tuán)所有流量的入口,它的穩(wěn)定性是非常重要的。同時,接入層提供了這么多高級功能,所以對其性能的挑戰(zhàn)也非常大。業(yè)務(wù)驅(qū)動了技術(shù)創(chuàng)新,2017年接入層在硬件加速領(lǐng)域邁出了第一步。
性能瓶頸分析及解決
我們要對自己的系統(tǒng)做性能優(yōu)化,首先我們要找到系統(tǒng)的瓶頸點,并且進(jìn)行分析與調(diào)研。
主站接入層承載集團(tuán)90%以上的入口流量,同時支持著很多高級功能,比如HTTPS卸載及加速、單元化、智能流量轉(zhuǎn)發(fā)策略、灰度分流、限流、安全防攻擊、流量鏡像、鏈路追蹤、頁面打點等等,這一系列功能的背后是Tengine眾多模塊的支持。由于功能點比較多,所以這就導(dǎo)致Tengine的CPU消耗比較分散,消耗CPU比較大的來自兩個處HTTPS和Gzip,這就是性能瓶頸之所在。
一、HTTPS卸載篇
雖然全站HTTPS已經(jīng)是一個老生常談的話題,但是國內(nèi)為何能做到的網(wǎng)站卻還是屈指可數(shù)?原因簡單總結(jié)來說有兩點,首先使用HTTPS后使得網(wǎng)站訪問速度變“慢”,其次導(dǎo)致服務(wù)器CPU消耗變高、從而機(jī)器成本變“貴”。
軟件優(yōu)化方案:如Session復(fù)用、OCSP Stapling、False Start、dynamic record size、TLS1.3、HSTS等。 但軟件層面如何優(yōu)化也無法滿足流量日益增長的速度,加上CPU摩爾定律已入暮年,使得專用硬件卸載CPU密集型運(yùn)算成為業(yè)界一個通用解決方案。
Tengine基于Intel QAT的異步加速方案總體架構(gòu)
由三部分組成Tengine的ssl_async指令、OpenSSL + QAT Engine及QAT Driver。其中Tengine通過適配OpenSSL-1.1.0的異步接口,將私鑰操作卸載至Intel提供的引擎(QAT engine)中,引擎通過 QAT驅(qū)動調(diào)用硬件完成非對稱算法取回結(jié)果。
該方案在Tengine2.2.2中已經(jīng)開源。
Tengine啟用ssl_async QAT加速后的效果如何?
RSA套件提升3.8倍(8核時)
ECDHE-RSA提升2.65倍(8核時)
ECDHE-ECDSA(P-384) 提升2倍(16核時)
ECDHE-ECDSA(P-256) 8核達(dá)到QAT硬件處理峰值16k左右, 只有23%的性能提升。
HTTPS卸載方案可以減少物理機(jī)數(shù)量,節(jié)省CPU資源,為公司帶來價值。
二、Gzip卸載篇
當(dāng)前接入層Gzip模塊的CPU占比達(dá)到15-20%,如果我們能卸載掉Gzip的CPU消耗,讓出來的CPU就可以用于處理更多請求和提升性能。
然而目前業(yè)內(nèi)各大公司接入層針對于Gzip采用硬件加速還是一片空白,阿里在接入層結(jié)合硬件加速技術(shù)卸載Gzip調(diào)研了幾套方案:
方案一是和Intel合作的QAT卡的加速方案,直接把相關(guān)軟件算法固化到硬件中去,鏈路會更精簡。
方案二智能網(wǎng)卡方案,需要把Tengine一部分業(yè)務(wù)邏輯抽取到網(wǎng)卡中做,其成本及風(fēng)險高,而且只是對zlib進(jìn)行軟件卸載,相對于QAT并不具有加速作用。
方案三是FPGA卡方案,相對來說開發(fā)成本較高,且相關(guān)資源匱乏。
綜上評估,選擇方案一對Gzip進(jìn)行卸載及加速。
Tengine Gzip 硬件加速方案實踐
左邊的圖是軟件方案,請求進(jìn)來后,在軟件層面做一些壓縮,全部是用CPU在做。右邊是通過QAT卡來加速,把紅色那部分全部卸載到QAT卡里,通過改造Tengine中的Gzip這個模塊,讓它去調(diào)用QAT的驅(qū)動,通過硬件做壓縮,最終送回Tengine傳輸給用戶。
在這個過程中,我們也遇到了非常多的坑。
使用的第一版驅(qū)動Intel-Qat 2.6.0-60,當(dāng)QPS為1k左右時,從上圖可以看出,橫坐標(biāo)是時間,縱坐標(biāo)是CPU消耗百分比,跑到第五秒左右,CPU很快打滿,這相當(dāng)于根本跑不起來。
針對這個問題,我們使用strace進(jìn)行相關(guān)系統(tǒng)熱點函數(shù)統(tǒng)計發(fā)現(xiàn),其CPU主要消耗在ioctl系統(tǒng)函數(shù)上,如下所示:
ioctl主要是做上層應(yīng)用程序和底層通訊的,并且CPU消耗中90%以上都是消耗在內(nèi)核態(tài)。因為最初的每個壓縮請求都要送到硬件中去,buffer需要開辟連續(xù)的物理內(nèi)存,系統(tǒng)跑久了,一旦遇到連續(xù)內(nèi)存分配不成功的情況,就會需要ioctl去分配內(nèi)存,出現(xiàn)頻繁調(diào)用 compact_zone進(jìn)行內(nèi)碎片整理,其調(diào)用熱的高達(dá)88.096%,如果分配失敗了,就會觸發(fā)內(nèi)存去做碎片整理,所以就會出現(xiàn)sys態(tài)CPU持續(xù)上升的情況。
這個問題解決后,也并沒有那么順利,我們遇到了下面的問題。
在日常壓測時,我們發(fā)現(xiàn)CPU用了Gzip卸載方案后,節(jié)省效果上并沒有明顯的提升。user態(tài)CPU降低了10%左右,但是sys態(tài)CPU相對于軟件版的CPU提升了10%。所以,節(jié)省效果不明顯。
經(jīng)分析,我們發(fā)現(xiàn)使用QAT后,部分系統(tǒng)函數(shù)CPU占比變高,如下圖所示(注:左邊的是使用QAT后各系統(tǒng)熱點函數(shù),右邊是軟件版原生tengine的各系統(tǒng)熱點函數(shù))open、ioctl、futex執(zhí)行 時間占比高達(dá)8.95(注:3.91 + 2.68 + 2.36),而未使用版本對應(yīng)占比時間才0.44(注:0.24 + 0.14 + 0.06)。
open和ioctl是由于Zlib Shim適配層處理邏輯有一些問題,通過優(yōu)化改造后open、ioctl調(diào)用頻率明顯減少。但是其futex系統(tǒng)調(diào)用頻度卻沒有減少,還是導(dǎo)致內(nèi)核態(tài)的CPU占比較高,通過strace跟蹤發(fā)現(xiàn)一個http壓縮請求后會多次調(diào)用futex,Zlib Shim采用多線程方式,其futex操作來自zlib shim等待QAT壓縮或解壓縮數(shù)據(jù)返回的邏輯,由于Tengine是多進(jìn)程單線程、采用epoll異步IO事件模式,聯(lián)調(diào)Intel的研發(fā)同學(xué)對Zlib Shim進(jìn)行改造(去線程),最終futex系統(tǒng)調(diào)用也明顯減少。
一路走來,通過無數(shù)次的性能優(yōu)化、功能測試,我們與Intel研發(fā)同學(xué)一起探討之后,才使得QAT在功能、性能、架構(gòu)方面等眾多問題得以快速解決。
運(yùn)維與監(jiān)控
問題解決后,接下來我們進(jìn)行上線前的準(zhǔn)備。
一、壓測和演練,這里主要關(guān)注高流量、壓縮與解壓縮流量混跑等情況下的性能提升情況,同時關(guān)注數(shù)據(jù)完整性校驗。
二、容災(zāi)保護(hù),在運(yùn)行過程中,當(dāng)硬件資源缺乏導(dǎo)致Gzip執(zhí)行失敗,會自動切換軟件版本,硬件資源恢復(fù)后自動切回。
三、監(jiān)控,對硬件加速相關(guān)的資源指標(biāo)進(jìn)行實時監(jiān)控和報警,防患于未然。
四、部署與發(fā)布,因為存在硬件和軟件兩個版本,所以采用單rpm軟件包、雙二進(jìn)制模式,從而降低軟件版與硬件加速版之間的耦合度,自動識別部署機(jī)器是否開啟QAT,并選擇正確的二進(jìn)制執(zhí)行。
硬件加速效果
上線后我們獲得了一些加速效果的數(shù)據(jù)。當(dāng)QPS為10k左右時,Tengine Gzip使用QAT加速后,CPU節(jié)省在15%左右,且Gzip基本上完全卸載,隨著其占比變高,優(yōu)化效果將越來越好。在2017年雙11零點流量峰值附近,Tengine加速機(jī)器相比普通機(jī)器性能提升 21%。
展望及總結(jié)
Tengine首次采用硬件加速技術(shù)卸載Gzip,不僅帶來性能上的提升,而且使得接入層在硬件加速領(lǐng)域再次打下了堅實的基礎(chǔ),對業(yè)界在此領(lǐng)域的發(fā)展也有重大影響意義。在未來,Tengine會在軟件和硬件層面繼續(xù)探索,為集團(tuán)和用戶提供更加高可用、高性能、低成本、安全、運(yùn)維自動化的系統(tǒng)。
原文鏈接
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/11370.html
摘要:綜述經(jīng)調(diào)研,使用解決方案的占多數(shù),已經(jīng)能滿足絕大多數(shù)公司需求。但除了一些超級公司外,比如阿里,京東,他們是自己擼的一套網(wǎng)關(guān)。 綜述 經(jīng)調(diào)研,使用Spring Cloud Zuul解決方案的占多數(shù),已經(jīng)能滿足絕大多數(shù)公司需求。但除了一些超級公司外,比如阿里,京東,他們是自己擼的一套網(wǎng)關(guān)。此外,點評直接采用的nginx負(fù)載均衡前置網(wǎng)關(guān),而沒用第七層網(wǎng)關(guān),原因據(jù)說是七層網(wǎng)關(guān)會影響性能,但由于...
摘要:用戶向緩存服務(wù)器發(fā)起請求,緩存服務(wù)器響應(yīng)用戶請求,將用戶所需內(nèi)容傳送到用戶終端。當(dāng)處理器引用存儲器中的某地址時,高速緩沖存儲器便檢查是否存有該地址。 考慮到對CDN認(rèn)知程度的各層小伙伴,開頭有必要簡單介紹下CDN原理(高年級同學(xué)可以直接跳過): 一、CDN的基本原理和基礎(chǔ)架構(gòu) CDN是將源站內(nèi)容分發(fā)至最接近用戶的節(jié)點,使用戶可就近取得所需內(nèi)容,提高用戶訪問的響應(yīng)速度和成功率。解決因分布...
摘要:用戶向緩存服務(wù)器發(fā)起請求,緩存服務(wù)器響應(yīng)用戶請求,將用戶所需內(nèi)容傳送到用戶終端。當(dāng)處理器引用存儲器中的某地址時,高速緩沖存儲器便檢查是否存有該地址。 考慮到對CDN認(rèn)知程度的各層小伙伴,開頭有必要簡單介紹下CDN原理(高年級同學(xué)可以直接跳過): 一、CDN的基本原理和基礎(chǔ)架構(gòu) CDN是將源站內(nèi)容分發(fā)至最接近用戶的節(jié)點,使用戶可就近取得所需內(nèi)容,提高用戶訪問的響應(yīng)速度和成功率。解決因分布...
摘要:量化派是一家數(shù)據(jù)驅(qū)動的科技金融公司,通過人工智能大數(shù)據(jù)機(jī)器學(xué)習(xí)等前沿技術(shù)提供消費信貸撮合及消費場景下的白條服務(wù),每年處理千萬級用戶信用及信用消費申請。 「小楊」最近裝修房子,準(zhǔn)備去銀行貸款,但是聽說好多人會因為個人征信問題被銀行拒絕貸款!于是,他先查了一下自己的央行征信,發(fā)現(xiàn)竟然沒有自己的征信信息,「小楊」陷入了沉思,自己經(jīng)常在淘寶、jd 上買東西,也有淘寶花唄和京東白條,怎么會沒有征...
閱讀 2556·2021-09-22 15:25
閱讀 2963·2021-09-14 18:03
閱讀 1212·2021-09-09 09:33
閱讀 1700·2021-09-07 09:59
閱讀 2930·2021-07-29 13:50
閱讀 1500·2019-08-30 15:44
閱讀 1715·2019-08-29 16:22
閱讀 1287·2019-08-29 12:49