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























