vivo 瀏覽器福利體系架構(gòu)演進(jìn)之路

01、業(yè)務(wù)背景
在數(shù)字化產(chǎn)品的運(yùn)營(yíng)策略中,金幣激勵(lì)體系作為一種行之有效的用戶激勵(lì)手段,正被廣泛應(yīng)用于各類平臺(tái),尤其是在內(nèi)容消費(fèi)類為主導(dǎo)的資訊,短視頻、小說(shuō)、短劇等賽道的APP中,金幣激勵(lì)能夠讓用戶更好地體驗(yàn)到產(chǎn)品帶來(lái)的價(jià)值和服務(wù)。它通過(guò)虛擬金幣的發(fā)放與回收,改變用戶行為,提升用戶參與度、活躍度和忠誠(chéng)度,為平臺(tái)創(chuàng)造價(jià)值。
vivo瀏覽器作為vivo互聯(lián)網(wǎng)生態(tài)中的內(nèi)容媒體,早在2021年就已經(jīng)引入金幣激勵(lì)體系,在瀏覽器小說(shuō)渠道做產(chǎn)品運(yùn)營(yíng)與金幣用戶培育。在2024年初,由于在內(nèi)容賽道與非內(nèi)容賽道(如美團(tuán),拼多多等),均已上線金幣激勵(lì)體系。vivo瀏覽器的產(chǎn)品生態(tài)急需升級(jí),經(jīng)過(guò)多方面考量,決定在視頻tab場(chǎng)景嘗試接入金幣激勵(lì)體系。所以業(yè)務(wù)需求應(yīng)運(yùn)而生,而老舊的架構(gòu)體系,無(wú)法滿足vivo瀏覽器的大規(guī)模用戶帶來(lái)的流量沖擊,故技術(shù)團(tuán)隊(duì)開(kāi)始著手瀏覽器福利架構(gòu)的升級(jí)工作。
02、技術(shù)痛點(diǎn)
早期的架構(gòu)單純支撐vivo瀏覽器小說(shuō)用戶,設(shè)計(jì)相對(duì)原始,宗旨是滿足當(dāng)前業(yè)務(wù)即可,基本架構(gòu)圖如下:

初期的架構(gòu)設(shè)計(jì)比較簡(jiǎn)單,數(shù)據(jù)庫(kù)沒(méi)有做分庫(kù),僅針對(duì)用戶做hash分表,對(duì)金幣流水做按月分表,定期創(chuàng)建,定期刪除。
初期業(yè)務(wù)流量較小,基本沒(méi)什么問(wèn)題。隨著業(yè)務(wù)的不斷發(fā)展,金幣玩法愈發(fā)多樣化,這套設(shè)計(jì)無(wú)法滿足以下業(yè)務(wù)場(chǎng)景:
- 任務(wù)玩法多:金幣玩法越來(lái)越多,定制化邏輯越來(lái)越復(fù)雜,單服務(wù)既要完成任務(wù)流轉(zhuǎn),也要完成金幣流轉(zhuǎn),功能劃分不夠清晰,代碼復(fù)雜度增高。
- 服務(wù)壓力:vivo瀏覽器帶來(lái)的大規(guī)模用戶流量,從百萬(wàn)級(jí)DAU預(yù)計(jì)增長(zhǎng)至千萬(wàn)級(jí)DAU,當(dāng)前架構(gòu)無(wú)法通過(guò)擴(kuò)容等手段來(lái)解決問(wèn)題。
- IO瓶頸:由于是單庫(kù)設(shè)計(jì),偶爾出現(xiàn)數(shù)據(jù)庫(kù)性能問(wèn)題。
- 金幣泄露:對(duì)賬邏輯較為樸素,無(wú)嚴(yán)格的數(shù)據(jù)一致性校驗(yàn)。
- 安全漏洞:風(fēng)控策略存在遺漏,容易成為黑灰產(chǎn)的攻擊對(duì)象。
鑒于以上問(wèn)題,技術(shù)團(tuán)隊(duì)開(kāi)始著手對(duì)現(xiàn)有架構(gòu)做改造和升級(jí),以支撐日漸增長(zhǎng)的業(yè)務(wù)訴求。
03、架構(gòu)升級(jí)
針對(duì)以上痛點(diǎn),結(jié)合當(dāng)前業(yè)務(wù)需求和未來(lái)的業(yè)務(wù)發(fā)展動(dòng)向,我們架構(gòu)設(shè)計(jì)需要考慮支持幾點(diǎn):
- 支持多形態(tài)任務(wù)玩法:通過(guò)細(xì)化服務(wù)功能,抽象任務(wù)狀態(tài)機(jī)流轉(zhuǎn)模型,快速支持各種形態(tài)的激勵(lì)任務(wù)。
- 支撐大流量:結(jié)合瀏覽器流量特點(diǎn),設(shè)計(jì)出一套滿足高并發(fā)高性能的服務(wù)群架構(gòu)。
- IO無(wú)壓力:通過(guò)集成分布式數(shù)據(jù)庫(kù),緩解大流量帶來(lái)的數(shù)據(jù)庫(kù)壓力。
- 數(shù)據(jù)安全:需要滿足金幣數(shù)據(jù)的高精度準(zhǔn)確性,確保用戶資產(chǎn)安全。
- 風(fēng)控嚴(yán)格:通過(guò)完善的風(fēng)控機(jī)制,精準(zhǔn)定位黑灰產(chǎn),降低業(yè)務(wù)運(yùn)營(yíng)成本。
此外,新架構(gòu)設(shè)計(jì)還考慮到以下兩點(diǎn):
- 支持業(yè)務(wù)動(dòng)態(tài)擴(kuò)展:
架構(gòu)清晰簡(jiǎn)單,每一個(gè)服務(wù)中的模塊分工明確,低耦合,方便水平擴(kuò)展,支持業(yè)務(wù)快速迭代。 - 低成本可復(fù)制
注重底層數(shù)據(jù)邏輯的可重用性,為以后多套代幣業(yè)務(wù)提供服務(wù)模版,提高開(kāi)發(fā)效率,降低時(shí)間和人力成本。
綜上,我們需要打造一整套完整的福利中心架構(gòu)體系,圍繞金幣激勵(lì)解決直接關(guān)聯(lián)的問(wèn)題,以及相關(guān)衍生的問(wèn)題。

我們的目標(biāo)是圍繞用戶時(shí)長(zhǎng)增長(zhǎng)和商業(yè)化變現(xiàn)能力提升,打造出一整套由配置管理,任務(wù)流轉(zhuǎn),金幣集散,安全風(fēng)控和基礎(chǔ)能力組合而成的福利中心能力矩陣,締造一個(gè)支持多場(chǎng)景增強(qiáng)的可復(fù)制架構(gòu)。

04、改造方案
針對(duì)當(dāng)前問(wèn)題,結(jié)合物理資源的限制,技術(shù)團(tuán)隊(duì)從以下幾個(gè)方面著手,對(duì)系統(tǒng)進(jìn)行改造升級(jí)。整體架構(gòu)設(shè)計(jì)圖如下:

4.1服務(wù)層面
4.1.1 流量隔離
按照流量入口,拆分服務(wù),將瀏覽器小說(shuō)業(yè)務(wù),瀏覽器信息流業(yè)務(wù),瀏覽器通用業(yè)務(wù),拆分開(kāi)。域名統(tǒng)一,通過(guò)path定向分發(fā)到各自服務(wù)。
服務(wù)拆分
根據(jù)同一代幣同一系統(tǒng)原則,拆分瀏覽器金幣業(yè)務(wù)和趣閱金幣業(yè)務(wù)。二者獨(dú)立迭代,獨(dú)立發(fā)展,風(fēng)控策略獨(dú)立,仲裁系統(tǒng)按照業(yè)務(wù)維度區(qū)分?jǐn)?shù)據(jù),但能力公用。兩套服務(wù)群功能可借鑒,服務(wù)可復(fù)制。

4.1.2 金幣互通
收口金幣管理相關(guān)功能,打造全新的金幣集散中心,管理各渠道的金幣增減行為。金幣互通模塊的基本功能架構(gòu)拆解如下:

4.2數(shù)據(jù)層面
針對(duì)原有單庫(kù)的性能瓶頸,對(duì)數(shù)據(jù)庫(kù)進(jìn)行如下改造:
4.2.1 分庫(kù)分表
分庫(kù)按照用戶維度一次hash,分表按照用戶維度進(jìn)行二次hash。根據(jù)瀏覽器全網(wǎng)用戶存量,分為N個(gè)庫(kù),每個(gè)庫(kù)M張用戶表。

4.2.2 大表拆解
拆分原有的用戶大表,將訂閱,抽獎(jiǎng)等信息獨(dú)立建表,用戶表只存放最關(guān)鍵的金幣總額信息。訂閱,抽獎(jiǎng)等表項(xiàng),只為push等業(yè)務(wù)運(yùn)營(yíng)場(chǎng)景使用,極大降低因全表掃描導(dǎo)致的數(shù)據(jù)庫(kù)性能瓶頸。

4.2.3 結(jié)余設(shè)計(jì)
重新設(shè)計(jì)金幣流水信息表,增加用戶金幣月余表項(xiàng),改造金幣消費(fèi)扣減的邏輯,避免因?yàn)榭蹨p導(dǎo)致的一次查詢多張表項(xiàng),提升性能。
在原有系統(tǒng)中,金幣流水記錄表設(shè)計(jì)中,是按月分表,表項(xiàng)里面有兩個(gè)重要信息,一個(gè)是當(dāng)前流水金幣凈得數(shù)量,另一個(gè)是當(dāng)前流水金幣剩余數(shù)量。金幣扣減時(shí),需要循環(huán)遍歷用戶的每一條金幣流水記錄,逐一扣減,同時(shí)需要記錄每一個(gè)用戶扣減到哪一條流水記錄。對(duì)于中低活用戶,一次扣減可能需要遍歷查詢12張金幣流水表,逐一扣減。如下圖所示:

用戶1扣減時(shí),按照時(shí)間由遠(yuǎn)及近,逐一扣減每一條流水記錄,若當(dāng)月表不夠扣減總額,則繼續(xù)找下一張表即系重復(fù)此操作。因此,在極端情況下,性能較差。平均情況下,由于每次的操作記錄數(shù)量不可控,所以性能波動(dòng)較大,接口RT不可控。
鑒于此問(wèn)題,新系統(tǒng)對(duì)金幣流水表按照用戶分表,同時(shí)根據(jù)業(yè)務(wù)需求,金幣流水只存儲(chǔ)最近N個(gè)月的流水明細(xì),方便用戶查看明細(xì)。超過(guò)N個(gè)月之前的流水自動(dòng)歸檔到月余表中,刪除N個(gè)月之前的金幣流水。并且完整流水記錄按月離線備份到hive中。歸檔公式如下:

每次用戶扣減金幣時(shí)候,只需要將月余信息拿出來(lái),由遠(yuǎn)及近直接扣減即可,單表一次性操作,性能得到了極大提升,同時(shí)不會(huì)因?yàn)榈突钣脩舳闅v多張表,所以性能非常穩(wěn)定。另外,這樣極大地壓縮了數(shù)據(jù)庫(kù)存儲(chǔ)空間。

4.3數(shù)據(jù)一致性
4.3.1 仲裁系統(tǒng)
舊的架構(gòu)沒(méi)有考慮對(duì)金幣的數(shù)據(jù)準(zhǔn)確性做強(qiáng)一致性的校驗(yàn),所以會(huì)收到客訴,對(duì)口碑造成一定負(fù)面影響。
新架構(gòu)集成了仲裁系統(tǒng),包含對(duì)賬,復(fù)核,平賬,補(bǔ)償?shù)裙δ堋6喾N條件會(huì)觸發(fā)用戶金幣的對(duì)賬,確保金幣數(shù)據(jù)的一致性,同時(shí)配合審計(jì)復(fù)核,實(shí)現(xiàn)精準(zhǔn)對(duì)賬。
對(duì)于復(fù)核失敗的用戶,新的架構(gòu)新增離線數(shù)據(jù)任務(wù)系統(tǒng),集成即時(shí)通知,實(shí)時(shí)查詢歷史數(shù)據(jù)等功能,方便運(yùn)營(yíng)和開(kāi)發(fā)人員及時(shí)處理,降低FAQ頻次,提升口碑。

4.3.2 軟事務(wù)
福利中心金幣領(lǐng)取、提現(xiàn)、權(quán)益兌換部分場(chǎng)景涉及到跨服務(wù)調(diào)用的情況。由此帶來(lái)分布式事務(wù)數(shù)據(jù)一致性的問(wèn)題,我們采用了軟事務(wù)來(lái)處理這些一致性問(wèn)題。
金幣增減通過(guò)單庫(kù)事務(wù)實(shí)現(xiàn),跨系統(tǒng)或者跨庫(kù)由輕事務(wù)負(fù)責(zé),用來(lái)減少編碼難度,避免TCC的侵入。
金幣領(lǐng)取場(chǎng)景,使用訂單id對(duì)每筆金幣領(lǐng)取進(jìn)行綁定,以便追蹤金幣領(lǐng)取狀態(tài)。接口網(wǎng)絡(luò)異常時(shí)快速通過(guò)訂單id確認(rèn)訂單狀態(tài),記錄未成功的訂單,進(jìn)行離線補(bǔ)償。以確保金幣領(lǐng)取最終一致性。

4.3.4 小結(jié)
經(jīng)過(guò)以上幾方面的改造和升級(jí),我們將一個(gè)以金幣驅(qū)動(dòng)單場(chǎng)景樸素邏輯結(jié)構(gòu),改造升級(jí)成為一個(gè)場(chǎng)景增強(qiáng)型的高可用可復(fù)制架構(gòu),以支撐業(yè)務(wù)的發(fā)展需求。

05、結(jié)束語(yǔ)
vivo瀏覽器福利中心,結(jié)合業(yè)務(wù)需求,針對(duì)原有架構(gòu)痛點(diǎn)進(jìn)行改造和升級(jí),成功解決了原有系統(tǒng)的流量壓力和存儲(chǔ)壓力,月余設(shè)計(jì)巧妙地結(jié)合業(yè)務(wù),極致壓縮了物理存儲(chǔ)成本的同時(shí),改進(jìn)了金幣扣減邏輯,使性能得到穩(wěn)定提升,成為支持千萬(wàn)級(jí)DAU無(wú)風(fēng)險(xiǎn)運(yùn)行的一套服務(wù)群。架構(gòu)升級(jí)過(guò)程中,還有許多細(xì)節(jié)點(diǎn),由于篇幅限制,不再一一贅述。
架構(gòu)升級(jí)不是終點(diǎn),而是新征程的起點(diǎn)。我們?cè)跇I(yè)務(wù)不斷迭代的過(guò)程中,一直在不斷嘗試使用新思路,持續(xù)打磨架構(gòu),讓其在動(dòng)態(tài)變化中保持行業(yè)領(lǐng)先的競(jìng)爭(zhēng)力。
























