整理 | 田曉旭
新年到,各家大廠的“撒幣”活動終于開獎了!這次你賺到了多少錢?
除了大年三十看春晚,參與各大 App 的春節(jié)紅包活動也逐漸成為了中國人的過年傳統(tǒng)。紅包也不再只是“錢”,而是承擔(dān)了更多的角色,成為了應(yīng)用的流量入口和增長引擎。春節(jié)紅包的實現(xiàn),背后少不了大數(shù)據(jù)、云計算、支付結(jié)算等新技術(shù)的支持。本文搜集了支付寶、微信、快手、QQ 四家大廠公開分享過的春節(jié)紅包技術(shù)實踐,以饗讀者。
1
今天你掃福了嗎?支付寶紅包的實現(xiàn)
“敬業(yè)福,你掃到了嗎?”相信大家最近應(yīng)該經(jīng)常聽到這句話。支付寶集五福已經(jīng)成為了大多數(shù)人春節(jié)的必備互動,2020 年春節(jié)有 3 億多人集齊了五福,而今年的集?;顒佑钟辛诵禄?,除了傳統(tǒng)的 AR 掃福和螞蟻森林,增加寫福字和芭芭農(nóng)場。
其中,掃福字得??赡苁菂⑴c人數(shù)最多的,為了解決高并發(fā)的問題,采用了客戶端 + 服務(wù)端并行處理的架構(gòu)體系,可支持兩種識別方式:所有圖片都傳至服務(wù)端做處理,這樣識別精度更高,但是服務(wù)器端能處理的數(shù)量有限;二是先走客戶端檢測,客戶端無法識別的再上傳服務(wù)端。客戶端檢測能力稍弱,但將計算能力分散到各終端,能極大緩解服務(wù)端的壓力。
這么多人參與的集五福活動,其背后的技術(shù)支撐是怎樣的?支付寶團(tuán)隊曾經(jīng)分享過他們的技術(shù)保障,在數(shù)據(jù)方面比較特別的是采用了 GeaBase 和 OceanBase 兩款數(shù)據(jù)庫。
由于集五?;顒佑泻芏嘤脩艋拥膱鼍?,以好友??ㄅ琶駷槔?,雖然看上去只是計算每個好友的??倲?shù),再進(jìn)行排序,但是當(dāng)用戶量級上去之后,這個事情的難度就增加了。假設(shè)每人有十個好友,參與活動的用戶是億級,那么查詢量級就會達(dá)到數(shù)十億級,并且需要實時更新??〝?shù)量。
在這種情況下,Oracle、MySQL 等普通關(guān)系型數(shù)據(jù)庫的表現(xiàn)不是特別突出,查詢用戶好友還可以在毫秒內(nèi)完成,而查詢好友的好友,耗時就會指數(shù)級上升,查詢越深,耗時越長。因此,在集五福的應(yīng)用場景中采用了螞蟻金服自主研發(fā)的分布式圖數(shù)據(jù)庫 GeaBase。
由于數(shù)據(jù)的存儲結(jié)構(gòu)和查詢規(guī)則不同,查詢深度對于 Geabase 的速度幾乎沒有顯著影響,關(guān)系型數(shù)據(jù)庫 30 秒才能得到查詢結(jié)果,而 GeaBase 只需要 0.168 秒;關(guān)系型數(shù)據(jù)庫難以給出結(jié)果的查詢,Geabase 也只需 2 秒即可完成。
在集五福這類全民活動中,洪峰流量對于服務(wù)器的承壓能力來說是一場大考。在開獎的那一瞬間,就是交答卷和出成績的時刻,每個用戶的中獎邏輯后面都有數(shù)十條數(shù)據(jù),整體就有幾十億數(shù)據(jù)需要同步。這些數(shù)據(jù)需要在 2 分鐘內(nèi)完成同步,并發(fā)數(shù)高達(dá)每秒上千萬。
如何更有效率,更節(jié)省成本地調(diào)配服務(wù)器資源呢?OceanBase 在其中發(fā)揮了作用,它可以在分鐘級別內(nèi)調(diào)度資源承接流量,也可以在洪峰過去之后,快速回收資源,避免浪費。
2
今天你搶紅包了嗎?微信紅包的實現(xiàn)
過年期間,在各種微信群中搶紅包已經(jīng)成為一種大家喜聞樂見的歡度春節(jié)的方式。今年微信紅包比較新鮮的變化是可以自己制作個性化的紅包封面。
微信紅包的使用步驟,相信大家都很熟悉,主要包括包、發(fā)、搶、拆、查詢發(fā)送紅包和收紅包數(shù)量,其中比較關(guān)鍵的是發(fā)紅包和搶紅包。這是我們普通用戶的角度,從微信團(tuán)隊的角度看,紅包系統(tǒng)由三部分組成:信息流、業(yè)務(wù)流和資金流。這三部分在組織架構(gòu)上由不同的后臺團(tuán)隊完成:信息流——微信后臺,業(yè)務(wù)流——微信支付后臺,資金流——財付通后臺。
2016 年除夕活動時的紅包系統(tǒng)架構(gòu)
搶紅包階段如何做到既輕量又可靠?根據(jù)微信團(tuán)隊介紹,主要是通過三種方式:
零 RPC 調(diào)用:一般情況下客戶端發(fā)起的請求都是通過接入服務(wù)轉(zhuǎn)發(fā)給具體的業(yè)務(wù)服務(wù)處理的,會產(chǎn)生 RPC 調(diào)用。但搖一搖邏輯直接嵌入接入服務(wù)中,接入服務(wù)可以直接處理搖一搖請求,派發(fā)紅包。
零數(shù)據(jù)庫存儲:在搶紅包的過程中,微信團(tuán)隊完全不使用數(shù)據(jù)庫,可以達(dá)到幾個數(shù)量級的性能提升,同時可靠性有了更好的保障。
異步化:用戶搶到紅包后不會同步進(jìn)行后續(xù)的賬務(wù)處理,請求會被放入紅包異步隊列,再通過異步隊列轉(zhuǎn)給微信支付后臺,由微信支付后臺完成后續(xù)業(yè)務(wù)邏輯。
同時,為了應(yīng)對網(wǎng)絡(luò)分裂的問題,微信團(tuán)隊在每個數(shù)據(jù)中心都建設(shè)三個獨立的數(shù)據(jù)園區(qū),可以做到在任意一個數(shù)據(jù)園區(qū)出現(xiàn)網(wǎng)絡(luò)分裂等故障,甚至徹底變成園區(qū)孤島后,另外兩個數(shù)據(jù)園區(qū)可以無損承接整個數(shù)據(jù)中心的請求。
3
今天你扔骰子了嗎?快手紅包的實現(xiàn)
2021 年 2 月 5 日,快手在香港上市,開盤漲 194%,報 338 港元 / 股,發(fā)行價 115 港元 / 股,總市值一度高達(dá) 1.39 萬億港元。今年,快手策劃了攢牛氣分 21 億活動,其中包括扔骰子、集福氣、拼牛氣等游戲。
2020 年,快手成為了央視春晚獨家互動合作伙伴,在“春節(jié) 10 億現(xiàn)金紅包”活動中,快手紅包互動總量達(dá)到了 639 億次,紅包站外分享次數(shù)達(dá)到 5.9 億次??焓执和碇辈ラg累計觀看人次 7.8 億,最高同時在線人數(shù) 2524 萬。
快手在傳統(tǒng)紅包的基礎(chǔ)上玩了很多新花樣,增加了很多新年特效,例如新年燈牌、地標(biāo) AR、萌娃拜年、我的一生等等。
這些特效的實現(xiàn)應(yīng)用了 MR、AR 等技術(shù)。MR 是混合現(xiàn)實技術(shù),將春節(jié)元素與現(xiàn)實世界融合,創(chuàng)造了一個虛擬和物理對象共存、且能夠?qū)崟r交互的環(huán)境,帶來沉浸式的用戶體驗??焓?App 的 MR 算法通過單攝像頭來采集圖像數(shù)據(jù),利用深度學(xué)習(xí)和立體幾何算法估算出相機(jī)的位置,然后實時輸出 3D 數(shù)據(jù),成功將 MR 效果融合到真實世界。
除了這些大家都能感受到的技術(shù),還有一些背后默默支撐整個紅包的技術(shù)實踐。騰訊云高級工程師陳宏亮之前分享過騰訊云文件存儲 CFS 如何支持快手應(yīng)用廣告推薦。
據(jù)了解,CFS 文件存儲主要與 TKE 容器節(jié)點搭配,在春節(jié)期間為快手的廣告推薦業(yè)務(wù)提供保障。CFS 主要參與三項具體的廣告推薦業(yè)務(wù)流程,分別是模型文件發(fā)布、業(yè)務(wù)應(yīng)用獲取模型和廣告推薦。春節(jié)期間,快手在騰訊云上使用了 3 個 TKE 容器集群共計 4000+ Node、Pod 數(shù)量超過 8000 個,以分?jǐn)倶I(yè)務(wù)壓力。這些 Pod 要將所需的幾十 GB 不等的一組模型文件全部加載后(該組合總共若干組),應(yīng)用才能啟動。
4
今天你刷一刷了嗎?QQ 春節(jié)紅包的實現(xiàn)
與其它平臺的紅包一樣,QQ 春節(jié)紅包也擁有多種形式,例如企業(yè)紅包、刷一刷紅包、AR 紅包等。
據(jù)悉,QQ 春節(jié)紅包項目涉及手機(jī) QQ 移動端、手機(jī) QQQ 后臺、QQ 錢包(財付通)系統(tǒng)、禮券系統(tǒng)、公眾號等諸多業(yè)務(wù)系統(tǒng),流程長且多,各系統(tǒng)性能吞吐量差異很大。QQ 團(tuán)隊曾經(jīng)分享過 QQ 2017 年春節(jié)紅包背后的技術(shù)實踐。
QQ 紅包的簡化架構(gòu)主要是由以下部分組成:接入層、抽獎系統(tǒng)、存儲系統(tǒng)、發(fā)貨系統(tǒng)、公眾號消息通知和 CDN 資源。其中,接入層是紅包后臺服務(wù)的大門,負(fù)責(zé)抽獎?wù)埱箢A(yù)處理,確保有效的請求才透傳給后端服務(wù);抽獎系統(tǒng)是 QQ 紅包的核心系統(tǒng),負(fù)責(zé)承接用戶抽獎?wù)埱?,按設(shè)計合理的幾率完成抽獎操作,并將抽獎結(jié)果安全落地保存;發(fā)貨系統(tǒng)主要是確保最終禮品落地到用戶賬戶中,QQ 錢包余額、QQ 卡券或第三方系統(tǒng)賬戶。
春節(jié)紅包的主要特點就是海量、秒殺,用戶期望的是看到紅包之后能夠順暢地?fù)尩?,因此降低延遲、消除卡頓就是最直接的體驗,甚至在弱網(wǎng)環(huán)境中,也能如絲般順滑。基于此,QQ 團(tuán)隊在技術(shù)上面做了很多優(yōu)化。
首先是資源預(yù)加載,原本 QQ 紅包中不經(jīng)常變化的靜態(tài)資源都會分發(fā)到各地 CDN 以提高訪問速度,例如頁面、圖片、JS 等,只有動態(tài)變化的內(nèi)容才會實時從后臺拉取。但是即使所有靜態(tài)資源都采用 CDN 分發(fā)也無法支持流量洪峰。因此,QQ 團(tuán)隊采用了一個方法:使用手機(jī) QQ 離線包機(jī)制提前把紅包相關(guān)靜態(tài)資源預(yù)加載到手機(jī) QQ 移動端,以此來減輕 CDN 壓力。離線包預(yù)加載的方式有兩種,一是將靜態(tài)資源放入預(yù)加載列表,二是主動推送離線包。
其次是緩存和延時,當(dāng)流量洪峰來臨時,用戶操作請求同時涌向后臺,后臺服務(wù)器是會崩潰的,即使后臺扛住了,那么所需的帶寬和設(shè)備資源成本也是天文數(shù)字。用戶每次刷的操作都向后臺發(fā)起請求是沒必要的,因此,QQ 團(tuán)隊對用戶的刷一刷次數(shù)做了匯總,定時異步將匯總數(shù)據(jù)提交到后臺,再將結(jié)果反饋到 QQ 移動端。
再次是錯峰,通過運營手段將不同紅包活動分散在不同時間點,有效減少請求峰值。
最后是動態(tài)調(diào)整,手機(jī) QQ 移動端和后臺并不是兩個孤立的系統(tǒng),而是一個整體。手機(jī) QQ 系統(tǒng)搭建有一整套的負(fù)載監(jiān)控體系,當(dāng)后臺負(fù)載升高到警戒線時,手機(jī) QQ 移動端可以根據(jù)后臺負(fù)載情況,動態(tài)減少發(fā)向后臺的請求,以防止后臺出現(xiàn)超載而雪崩。
參考鏈接:
https://www.infoq.cn/article/story-and-technology-innovation-of-alipay-ar-hongbao
https://www.infoq.cn/article/1-billion-bonus-from-the-clouds
https://www.cnblogs.com/qcloud1001/p/12869910.html
https://www.infoq.cn/article/qq-red-envelopes-technology-program