“雙十一”高并發(fā)應(yīng)對(duì)解決之道
作者簡(jiǎn)介:叢磊,白山云科技合伙人兼工程副總裁,2016年加入白山,負(fù)責(zé)云鏈體系的設(shè)計(jì)與構(gòu)建等工作;2006年至2015年,就職于新浪,帶領(lǐng)團(tuán)隊(duì)從事云相關(guān)領(lǐng)域技術(shù)研發(fā)工作。國(guó)內(nèi)***公有云PaaS平臺(tái)——SAE創(chuàng)始人;工信部可信云服務(wù)認(rèn)證評(píng)委。
1 “雙十一”壓力
不知從何時(shí)起,“雙十一”成為了“購(gòu)物節(jié)”,這種全民狂歡式購(gòu)物對(duì)金融行業(yè)是一個(gè)巨大挑戰(zhàn),短時(shí)間的高并發(fā)會(huì)給數(shù)據(jù)接口帶來(lái)巨大壓力。據(jù)悉,2015年天貓峰值交易量達(dá)到14萬(wàn)次/秒,而2009年僅為400次/秒。
用戶(hù)每一筆交易背后都包含了多項(xiàng)操作:首先,用戶(hù)瀏覽多個(gè)商品才觸發(fā)一次購(gòu)物行為;再次,實(shí)際交易前,需要確保庫(kù)存、配送、商家優(yōu)惠政策等信息;生成訂單后,執(zhí)行支付接口,要求高度一致性和可靠性;支付完成后需要回調(diào)多個(gè)邏輯,包括積分計(jì)算、折扣返點(diǎn)、物流配送等。
可見(jiàn)14萬(wàn)/秒的交易峰值,不僅對(duì)于金融機(jī)構(gòu),即便是具備豐富應(yīng)對(duì)高并發(fā)經(jīng)驗(yàn)的互聯(lián)網(wǎng)公司,都不是一件容易的事。更為緊迫的是,隨著IOT設(shè)備進(jìn)一步普及,“雙十一”帶來(lái)的壓力將越來(lái)越大,據(jù)某電商平臺(tái)預(yù)測(cè),2016年“雙十一”峰值壓力將再翻5倍。在可預(yù)見(jiàn)的未來(lái),交易完全有可能達(dá)到100萬(wàn)次/秒!
2 應(yīng)對(duì)之道
本人曾參與研發(fā)交易量10萬(wàn)/秒級(jí)別的系統(tǒng),這里對(duì)如何應(yīng)對(duì)超高并發(fā)提出一些建議。其實(shí),無(wú)論是“秒殺”還是“雙十一”,都沒(méi)有靈丹妙藥,一個(gè)真正能抗超高并發(fā)的金融系統(tǒng),必然由系統(tǒng)中每個(gè)組件優(yōu)化而成。讓每個(gè)組件發(fā)揮***威力,并對(duì)系統(tǒng)充分解耦,才能做出可靠的平臺(tái)。
應(yīng)對(duì)超高并發(fā),最重要兩個(gè)技術(shù):“緩存-Cache”和”異步化-隊(duì)列”。
3 緩存- Cache
這里的Cache不是傳統(tǒng)意義上的Redis/Memcache等系統(tǒng)Cache組件,而是從用戶(hù)端到***數(shù)據(jù)層所有環(huán)節(jié)的Cache。
對(duì)于高并發(fā)場(chǎng)景,***條準(zhǔn)則就是為用戶(hù)行為所有環(huán)節(jié)加上合理的Cache。
業(yè)務(wù)層次圖如下:
如圖所示,用戶(hù)訪問(wèn)/交易行為的起點(diǎn)是瀏覽器。首先對(duì)瀏覽器端進(jìn)行合理的Cache設(shè)置,即對(duì)其中頁(yè)面設(shè)置合理的過(guò)期規(guī)則,配合CDN端,讓部分元素響應(yīng)直接在瀏覽器Cache端返回,有效降低業(yè)務(wù)訪問(wèn)壓力;其次,虛線內(nèi)展示的是業(yè)務(wù)端,主要由兩部分構(gòu)成,一個(gè)是計(jì)算資源,運(yùn)行業(yè)務(wù)代碼;另一個(gè)是數(shù)據(jù)庫(kù),負(fù)責(zé)存儲(chǔ)業(yè)務(wù)數(shù)據(jù)。
業(yè)務(wù)層輸出的內(nèi)容分為兩部分:動(dòng)態(tài)+靜態(tài)。對(duì)于動(dòng)態(tài)居多的電商金融業(yè)務(wù),以靜態(tài)內(nèi)容為主的CDN加速?zèng)]有特別效果,而應(yīng)該對(duì)數(shù)據(jù)接口進(jìn)行接口加速(ADN,API Delivery Network)。接口加速需要注意的是,不能因給接口加Cache而影響業(yè)務(wù)本身。我們建議對(duì)所有讀類(lèi)型數(shù)據(jù)接口加Cache,并將Cache時(shí)間設(shè)定為毫秒級(jí),針對(duì)不同接口指定不同Cache策略,有效提高Cache***率。
根據(jù)實(shí)測(cè),通過(guò)加ADN Cache,可提高60%訪問(wèn)速度,同時(shí)降低2-3倍后端實(shí)際負(fù)載。
4 異步化-隊(duì)列
異步化-隊(duì)列是通過(guò)隊(duì)列將請(qǐng)求/事務(wù)放入后臺(tái)運(yùn)行,從同步阻塞模式變?yōu)楫惒椒亲枞J?。例如,搶?gòu)發(fā)生時(shí),用戶(hù)同時(shí)調(diào)用支付接口,同步阻塞模式下,用戶(hù)數(shù)量即支付接口的并發(fā)度,用戶(hù)過(guò)多時(shí),支付數(shù)據(jù)庫(kù)壓力過(guò)大,嚴(yán)重時(shí)可能會(huì)導(dǎo)致數(shù)據(jù)庫(kù)服務(wù)宕機(jī)。采用異步模式后,搶購(gòu)時(shí),用戶(hù)請(qǐng)求進(jìn)入隊(duì)列處理,隊(duì)列并發(fā)度與數(shù)據(jù)庫(kù)并發(fā)能力相匹配,用戶(hù)請(qǐng)求按序進(jìn)行,可有效保護(hù)數(shù)據(jù)后端。
隊(duì)列不只可以保護(hù)后端數(shù)據(jù)庫(kù)。在秒殺場(chǎng)景,很多用戶(hù)搶購(gòu)一個(gè)商品,可以先將搶購(gòu)請(qǐng)求放入隊(duì)列,再進(jìn)入后臺(tái)篩選處理(比如排重、按優(yōu)先級(jí)排序等),***調(diào)用實(shí)際下單接口。隊(duì)列可以根據(jù)產(chǎn)品需求選用兩種不同模式:一種是全異步模式,即進(jìn)入隊(duì)列后立即返回成功,通過(guò)回調(diào)通知調(diào)用者結(jié)果;另一種是半異步,即進(jìn)入隊(duì)列后,調(diào)用者掛起,實(shí)際執(zhí)行結(jié)束后,再返回成功或者失敗結(jié)果。
5 總結(jié)
應(yīng)對(duì)“雙十一”高并發(fā),主要采用緩存+隊(duì)列異步化,緩存的重點(diǎn)是每個(gè)環(huán)節(jié),尤其是對(duì)于傳統(tǒng)易忽略的數(shù)據(jù)接口,都要進(jìn)行合理的Cache。
對(duì)于高并發(fā)請(qǐng)求,要進(jìn)行異步化非阻塞處理,防止“洪水”現(xiàn)象,保證業(yè)務(wù)穩(wěn)定有序進(jìn)行。
————————————————————我是可愛(ài)分割線———————————————————————