日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

博時(shí)基金基于 RocketMQ 的基金數(shù)字化陪伴體系的架構(gòu)實(shí)踐

 劉振東 2021-12-11
伍振河:Apache RocketMQ Contributor。就職于博時(shí)基金互聯(lián)網(wǎng)金融部。在證券、支付、基金等金融領(lǐng)域有豐富的研發(fā)和架構(gòu)實(shí)踐經(jīng)驗(yàn),對(duì)分布式系統(tǒng)、云原生技術(shù)有深刻理解。博時(shí)基金互聯(lián)網(wǎng)開放平臺(tái)負(fù)費(fèi)人,專注于金融科技在財(cái)富管理領(lǐng)域數(shù)字化轉(zhuǎn)型中的探索與落地。

本文來自于作者 Apache RocketMQ 深圳 OpenDay 分享整理,以博時(shí)基金的金融場景為案例,闡述 RocketMQ 在提升客戶陪伴效率和豐富金融場景化能力等方面的提升作用。

1


行業(yè)背景


基金公司的核心業(yè)務(wù)主要分為兩部分,一部分是投研線業(yè)務(wù),即投資管理和行業(yè)研究業(yè)務(wù),它體現(xiàn)了基金公司核心競爭力。另一部分是市場線業(yè)務(wù),即基金公司利用自身渠道和市場能力完成基金銷售并做好客戶服務(wù)。

博時(shí)基金管作為中國內(nèi)陸首批成立的五家基金管理公司之一,截至 2021 年 6 月 30 日,博時(shí)基金公司共管理 276 只公募基金,管理資產(chǎn)總規(guī)模逾 15482 億元人民幣,累計(jì)分紅逾 1465 億元人民幣。

圖片


隨著互聯(lián)網(wǎng)技術(shù)發(fā)展,基金銷售渠道更加多元化,線上成為基金銷售重要渠道。相比傳統(tǒng)基金客戶,線上渠道具有客戶基數(shù)大,水平參差不齊的特點(diǎn)。對(duì)于那些還不成熟的客戶,我們需要做好陪伴,讓他們理解風(fēng)險(xiǎn),理解投資。

2


RocketMQ 在陪伴體系中的應(yīng)用


1.    陪伴場景概述


博時(shí)基金建立了一套全方位多層次陪伴體系,從用戶層面、市場層面和產(chǎn)品層面為用戶提供投前、投中、投后的有溫度的投資陪伴體驗(yàn)。

圖片


每個(gè)陪伴場景的達(dá)成,需要公司多個(gè)部門不同團(tuán)隊(duì)協(xié)同配合來完成。依賴與投研、合規(guī)、運(yùn)營、大數(shù)據(jù)等上下游多個(gè)系統(tǒng)。但這些系統(tǒng)可能采用不同技術(shù)架構(gòu),實(shí)現(xiàn)方式各異,如果采用同步調(diào)用方式來實(shí)現(xiàn)協(xié)同,耦合度太高,不利于未來擴(kuò)展。

2.    RocketMQ 解耦異構(gòu)系統(tǒng)

RocketMQ 提供高效可靠的消息傳遞特性和發(fā)布訂閱機(jī)制,非常適合用于這種上下游異構(gòu)系統(tǒng)間的解耦。我們把原來基于文件、郵件的協(xié)作方式全部線上化、流程化和機(jī)制化,大大提升了陪伴輸出效率。對(duì)于這種涉及多方系統(tǒng)的協(xié)作,需要對(duì)消息進(jìn)行合理地歸類,以便進(jìn)行過濾和索引。RocketMQ 提供的 Topic 和 Tags 就是用來做這件事的。

圖片


3.    Topic 和 Tags 最佳實(shí)踐


Topic 與 Tag 作為業(yè)務(wù)上用來歸類的標(biāo)識(shí),分別屬于一級(jí)分類和二級(jí)分類,這種層次化的分類標(biāo)識(shí)與企業(yè)組織架構(gòu)比較類似,可以結(jié)合起來實(shí)現(xiàn)消息過濾。舉個(gè)例子,對(duì)于陪伴系統(tǒng)的 Topic,運(yùn)營系統(tǒng)訂閱運(yùn)營類消息,我們給這類消息打上 TagA 的標(biāo)簽,客服系統(tǒng)訂閱客服類消息 TagB,陪伴編排系統(tǒng)訂閱編排類消息 TagC,合規(guī)系統(tǒng)需要對(duì)運(yùn)營和陪伴消息進(jìn)行合規(guī)審查,因此它需要訂閱 TagA 和 TagC,最后是數(shù)據(jù)中心,所有的消息都要處理,因此它需要監(jiān)聽所有 Tag。

圖片

3


RocketMQ 事務(wù)消息的金融應(yīng)用場景


1.    金融場景概述


接下來,我們講解一下典型的金融場景--優(yōu)惠購。在博時(shí)基金 APP 上申購基金可以享受低至 0 折的費(fèi)率優(yōu)惠,具體業(yè)務(wù)怎么樣實(shí)現(xiàn)?這里有有兩種方式,第一種先充值博時(shí)錢包,底層是替客戶購買了一筆貨幣基金,然后再用博時(shí)錢包購買目標(biāo)基金。這種方式需要用戶操作兩次,比較繁瑣,容易引起客單流失。另外一種方式就是優(yōu)惠購,把兩步購買基金封裝成一次事務(wù)操作。對(duì)投資者來說,開啟優(yōu)惠購服務(wù)后,操作少一步,投資更簡單!

圖片

2.    領(lǐng)域事件理論模型


領(lǐng)域事件是指業(yè)務(wù)流程的一個(gè)步驟將導(dǎo)致進(jìn)一步的業(yè)務(wù)操作,比方說登錄事件,比方說基金購買事件等。在領(lǐng)域模型里面,領(lǐng)域事件事務(wù)采用的是最終一致性,區(qū)別于強(qiáng)一致性,它是弱一致性的一種。在領(lǐng)域模型映射到微服務(wù)系統(tǒng)架構(gòu)時(shí),微服務(wù)之間的數(shù)據(jù)不必要求強(qiáng)一致,因此領(lǐng)域事件可以解耦微服務(wù)。依據(jù)是否跨微服務(wù),可以分為兩種場景:
 
第一種場景:當(dāng)領(lǐng)域事件發(fā)生在同一個(gè)微服務(wù)。由于大部分事件發(fā)生在同一個(gè)進(jìn)程內(nèi),自身可以很好地控制事務(wù)。但如果一個(gè)事件需要同時(shí)更新多個(gè)聚合,按照 DDD 中一次事務(wù)只更新一個(gè)聚合的原則,就需要引入事件總線,就是 eventbus 這種模式。
 
第二種場景:跨微服務(wù)。領(lǐng)域事件發(fā)生在微服務(wù)之間的場景比較多,事件處理的機(jī)制也更加復(fù)雜。跨微服務(wù)的事件可以推動(dòng)業(yè)務(wù)流程或者數(shù)據(jù)在不同的子域或微服務(wù)間直接流轉(zhuǎn),因此需要一個(gè)協(xié)調(diào)者來推進(jìn)全局事務(wù)??缥⒎?wù)的事件機(jī)制要總體考慮事件構(gòu)建、發(fā)布和訂閱、事件數(shù)據(jù)持久化、消息中間件、分布式事務(wù)機(jī)制等,其中具備事務(wù)消息功能的消息中間件是這個(gè)解決方案的核心組件。

圖片

3.    分布式事務(wù)方案對(duì)比


在博時(shí)基金的業(yè)務(wù)場景下,需要解決的問題是事務(wù)一致性與服務(wù)解耦度之間的矛盾,因此我們的目標(biāo)是讓主從事務(wù)解耦,保證核心邏輯穩(wěn)定,同時(shí)不因?yàn)榻怦疃鵂奚罱K一致性。因此,當(dāng)時(shí)做出了幾種不同的解決方案:
 
  • 第一種方案:最常見普通消息 異步對(duì)賬,這個(gè)方案的問題是無法保證主事務(wù)的執(zhí)行和入隊(duì)同時(shí)成功,需要時(shí)效性低的對(duì)賬補(bǔ)償解決,一致性只是較高。
  • 第二種方案:本地消息表,對(duì)比上一種做法,它由業(yè)務(wù)將寫入消息表放到主事務(wù)中,把主事務(wù)和入隊(duì)變成一個(gè)原子操作,然后業(yè)務(wù)讀取入隊(duì)記錄,自己投遞給從事務(wù)。它的缺點(diǎn)是主事務(wù)和消息表在存儲(chǔ)上是耦合的,沒有解耦度。
  • 第三種方案:引入 XA 事務(wù),是個(gè)兩階段提交的協(xié)議,實(shí)現(xiàn)難度較大。而且面臨兩個(gè)問題:一是這是一種同步阻塞協(xié)議,有鎖占用導(dǎo)致并發(fā)不會(huì)太高,另外就是 XA 事務(wù)過程中,在參與者投贊成票后,如果協(xié)調(diào)者發(fā)生故障,節(jié)點(diǎn)不清楚應(yīng)該提交還是中止,只能等待協(xié)調(diào)者恢復(fù)。這時(shí)候可能會(huì)出現(xiàn)業(yè)務(wù)中斷。
  • 第四種方案:TCC,專門處理分布式事務(wù)的 TCC,只側(cè)重于一致性,無解耦度,也是不可行。
  • 第五種方案:事務(wù)消息,它能同時(shí)兼顧解耦度和一致性,是最合適的模式。

最終我們選擇了 RocketMQ 的事務(wù)消息作為分布式事務(wù)的解決方案。

圖片

4.    RocketMQ 事務(wù)消息核心流程


基于 RocketMQ 的事務(wù)消息搭建事務(wù)中心,協(xié)調(diào)分布式事務(wù)的推進(jìn)和回滾。以優(yōu)惠購為例,核心流程如下:

  • 第一階段:Prepare 階段 ,即業(yè)務(wù)系統(tǒng)將 RocketMQ 的半事務(wù)消息發(fā)送到事務(wù)中心,事務(wù)中心不做發(fā)布,等待二次確認(rèn)。這個(gè)階段 RocketMQ 的半消息在消費(fèi)者端是感知不到的。
  • 第二階段:業(yè)務(wù)系統(tǒng)執(zhí)行主事務(wù),即購買貨幣基金。
  • 第三階段:主事務(wù)成功后 commit 到事務(wù)中心,由事務(wù)中心投遞消息到從事務(wù)。如果主事務(wù)失敗,就投遞 rollback 給事務(wù)中心。這里需要兩階段提交的原因是:普通的入隊(duì)操作無論放在主事務(wù)之前還是之后都無法保證最終一致。如果先執(zhí)行主事務(wù),再入隊(duì),那么可能在入隊(duì)前,業(yè)務(wù)會(huì)宕機(jī),就沒有機(jī)會(huì)再入隊(duì)了。如果先入隊(duì)再執(zhí)行主事務(wù),那么可能主事務(wù)沒有執(zhí)行成功,但是從事務(wù)執(zhí)行成功了,業(yè)務(wù)邏輯就會(huì)發(fā)生錯(cuò)亂。

圖片

由于網(wǎng)絡(luò)抖動(dòng)等原因,可能導(dǎo)致事務(wù)消息的二次確認(rèn)丟失。此時(shí)需要依賴某種機(jī)制恢復(fù)整個(gè)分布式事務(wù)的上下文,RocketMQ 提供的反查機(jī)制正是為解決分布式事務(wù)中的超時(shí)問題而設(shè)計(jì)的。我們的事務(wù)中心的反查機(jī)制流程主要是,先檢查事務(wù)中心的內(nèi)部狀態(tài),再通過反查接口檢查本地事務(wù)的執(zhí)行結(jié)果,恢復(fù)事務(wù)上下文后,正常推進(jìn)后續(xù)的流程。

圖片


5.    RocketMQ 如何保證事務(wù)消息在消費(fèi)端正常消費(fèi)


消費(fèi)端消費(fèi)失敗后,MQ 服務(wù)端需要進(jìn)行一定次數(shù)的重試,我們需要制定合理的重試策略。因?yàn)橛邢M(fèi)重試,這要求消費(fèi)方接口需要實(shí)現(xiàn)冪等性;如果重試多次后仍失敗,我們會(huì)把消息壓入死信隊(duì)列 DLQ,RocketMQ 提供了死信隊(duì)列的功能,對(duì)進(jìn)入死信隊(duì)列的消息進(jìn)行告警處理。

圖片

 

6.    事務(wù)消息的適用場景


第一類場景:需要同步執(zhí)行的領(lǐng)域事件,比如說領(lǐng)域事件邏輯失敗概率大,業(yè)務(wù)要及時(shí)將返回碼告知客戶端,自然不能放在異步流程中。舉個(gè)例子,做過支付系統(tǒng)的小伙伴都知道,支付扣款前要檢查余額是否足夠,如果余額不足,那在異步流程中重試多少次都是失敗。
 
第二類場景:是事務(wù)不可重入場景,例如業(yè)務(wù)系統(tǒng)發(fā)送消息時(shí)沒有確定一個(gè)唯一事務(wù) ID,那后續(xù)的業(yè)務(wù)邏輯就無法保證冪等,假設(shè)其中一個(gè)事務(wù)是創(chuàng)建訂單,如果不能保證冪等的話,重試多次就會(huì)產(chǎn)生多個(gè)訂單;所以這里需要使用到事務(wù)消息,用來明確一個(gè)分布式事務(wù)的開始,生成一個(gè)唯一事務(wù) ID,讓后續(xù)的流程能以這個(gè)事務(wù) ID 來保證冪等。
 

4


未來規(guī)劃

圖片

目前,我們基于 RocketMQ 在客戶陪伴體系上解耦了上下游的服務(wù),提升了運(yùn)營和陪伴的效率。同時(shí),我們在 RocketMQ 事務(wù)消息的基礎(chǔ)上,搭建了這樣一個(gè)支持分布式事務(wù)的服務(wù)協(xié)調(diào)平臺(tái),也就是我們的事務(wù)中心,大大提升了對(duì)金融場景化的產(chǎn)品包裝能力。未來,我們將圍繞著事務(wù)中心,拓寬更多的金融應(yīng)用場景,創(chuàng)造更大的業(yè)務(wù)價(jià)值。

圖片

 

5


加入 Apache RocketMQ 社區(qū)


十年鑄劍,Apache RocketMQ 的成長離不開全球接近 500 位開發(fā)者的積極參與貢獻(xiàn),相信在下個(gè)版本你就是 Apache RocketMQ 的貢獻(xiàn)者,在社區(qū)不僅可以結(jié)識(shí)社區(qū)大牛,提升技術(shù)水平,也可以提升個(gè)人影響力,促進(jìn)自身成長。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請遵守用戶 評(píng)論公約

    類似文章 更多