開發與維運

博時基金基於 RocketMQ 的互聯網開放平臺 Matrix 架構實踐


作者|伍振河 博時基金互聯網金融部架構師 、曾志 博時基金互聯網金融部開發主管

隨著近兩年業績的搶眼,公募基金迎來了乘風破浪式的發展,截至 2021 年 1 月底,資產管理規模已破 20 萬億,創下了歷史新高。

在中國新經濟高質量及科技創新發展的背景下,眾多金融類的互聯網平臺與基金公司展開合作。互聯網金融科技與傳統金融業務的融合,促使傳統金融公司的信息技術系統更加開放。

據此,2020 年,博時基金互聯網金融部啟動了互聯網開放平臺 Matrix 的建設工作。

博時基金互聯網開放平臺 Matrix 建設背景與目標

1、傳統金融架構遇到的問題與挑戰

傳統的金融系統架構受到了互聯網化的挑戰,主要表現在以下幾個方面:

1) 互聯網入口缺乏管控

有多個團隊提供不同形式的互聯網服務,接口協議和權限管控方式不一致。當服務和接口越來越多時,API 管控能力不足的問題將會突顯。

2) 系統較為封閉,開放能力不足

傳統基金行業系統生態較為封閉,與合作伙伴開放生態的能力有待提升。

3) 金融場景化封裝能力不足

傳統基金行業系統普遍依賴於底層數據庫提供的 ACID 特性實現事務一致性。微服務化之後,這套機制對金融場景化的產品包裝能力顯得捉襟見肘。

2、系統建設目標

1)多渠道統一安全接入

為自有系統與運營廠商提供標準化統一接入,實現內外部 API 統一的管控。

Matrix 開放給經過博時互聯網平臺資質認證後的第三方平臺使用,需要根據第三方平臺識別的不同身份,進行接口級別權限管控。

2)提供開放能力

搭建開放平臺,與合作伙伴共建開放生態。在得到 Matrix 平臺的授權後,第三方平臺開發者可以通過調用博時基金互聯網開放平臺的接口能力,為第三方平臺提供基金產品信息查詢、註冊開戶、積分兌換、基金申贖、資產查詢、聯合登錄等全方位服務;第三方平臺可以根據自身實際情況自由選擇或組合 APP 、微信公眾號、微信小程序、H5 等前端方式對接。

3)封裝基金行業特色功能

應用層實現分佈式事務框架以保證整體事務的一致性。基於此,封裝優惠購、投資陪伴等複雜的金融場景化功能,讓開發者專注於業務開發,提升客戶的投資體驗。

Matrix 建設思路

1、總體架構

1)互聯網架構圖

基於 Spring Cloud 微服務套件和 RocketMQ 消息中間件,搭建的企業級雲原生架構。

2、關鍵組件

1)API 網關

API 網關是微服務架構重要組件之一,是服務唯一入口。API 網關封裝內部系統架構,橫向抽離通用功能,如:權限校驗、熔斷限流、負載均衡等。通過 API 網關可以把內部 API 統一管控起來。


目前博時基金的互聯網業務接入入口主要分為 3 類:

  • 面向自營業務的博時基金移動端 APP 和 H5 。
  • 面向直銷前置等合作伙伴的 OpenAPI 。即作為開放平臺的入口,服務的 OpenAPI 會提供有條件的訪問限制(時間、流量、頻率),需要考慮流量控制、安全認證、接口授權方面的管理。
  • 面向企業內部管理系統的 API ,提供企業內部系統訪問。

Matrix 的 API 網關基於 Spring Cloud Gateway 構建,SCG 內置的 Route、Predicate 和 Filter 模塊可以方便擴展出路由轉發、統一鑑權等跨橫切面的功能。基於內外部網絡隔離的需求,我們獨立部署了兩套網關,其中 Kylin 網關提供互聯網接入。Phoenix 網關用於域內系統接入,提供域賬戶的訪問權限控制。

2)認證中心

為了保護 OpenAPI 的安全,避免惡意訪問、未授權訪問、黑客攻擊等導致的安全隱患,開放平臺需要增加授權認證模塊。同時,在博時的內部的應用系統之間,也有單點登錄的需求。統一的認證中心是微服務架構的必備組件。

Matrix 基於 OAuth2 協議構建了統一認證中心,實現用戶、應用、接口的統一認證和鑑權。OAuth2 核心思路是通過各類認證手段認證用戶身份,並頒發 Token ,使得第三方應用可以使用該令牌在限定時間、限定範圍訪問指定資源。Matrix 支持 OAuth2 的 Authorization Code 、Resource Owner Credentials 和 Client Credentials 三種授權類型,根據不同的應用場景,採用不同的授權類型頒發 Token ,為開放平臺的安全保駕護航。

3)RocketMQ 消息中間件

技術選型

在技術選型過程中,我們主要考慮以下幾點:

首先必須是國產化的產品,其次是比較流行並且社區活躍度高的開源產品。

另外,重點關注的 MQ 特性:

  • 消息可靠傳遞,即確保不丟消息。
  • 分佈式事務,需要支持分佈式事務,降低業務的複雜性。
  • 性能,我們的場景主要是在線的金融類業務,需要 MQ 具備支持金融級的低延遲特性。

最後,從架構演進的角度來考慮,需要無縫對接我們的混合雲架構,最終我們選擇了 RocketMQ。

RocketMQ 是阿里巴巴自主研發及雙 11 交易核心鏈路消息產品,提供金融級高可靠消息服務。在開源方面,開源 RocketMQ 已經完成了雲原生技術棧的集成,包括Knative 中的事件源,Prometheus 的 Exporter,K8s 的 Operator 等;也支持了微服務框架 SpringCloud 以及函數計算框架 OpenWhisk ;同時開發了很多 Connector 作為 Sink 或者 Source 去連接了 ELK、Flume、Flink、Hadoop 等大數據和數據分析領域的優秀開源產品。

在 Matrix 開放平臺,RocketMQ 主要有三類應用場景。

1) 用於金融產品的場景化包裝

業務場景:

典型的業務場景如優惠購,基民通過優惠購功能申購基金,可將交易費率降為0。簡單來說就是先購買博時貨幣基金,再通過快速轉購的方式買入目標基金,豁免相關轉換費率。

實現原理:

Matrix 基於 RocketMQ 的事務消息搭建了一個高可靠、高可用的事務消息平臺---事務中心,涉及業務流程如下:

第一階段是 Prepare ,即業務系統將 RocketMQ 的半事務消息發送到事務中心,事務中心不做發佈,等待二次確認。Prepare 完成之後,業務系統執行主事務,即購買貨幣基金,成功後 commit 到事務中心,由事務中心投遞消息到從事務。如果主事務失敗,就投遞 rollback 給事務中心。


反查機制:

由於網絡抖動、業務系統重啟等原因,可能導致事務消息的二次確認丟失。此時需要依賴反查機制恢復整個分佈式事務的上下文。RocketMQ 提供的 Message Status Check 機制正是為解決分佈式事務中的超時問題而設計的。事務中心的反查機制流程主要是,先檢查事務中心的內部狀態,再通過反查接口檢查本地事務的執行結果,恢復事務上下文後,正常推進後續的流程。


依賴於 RocketMQ 提供的事務消息,事務中心在應用層實現了分佈式事務,大大提升了對金融產品的場景化包裝能力。

2) 用於系統間解耦

業務場景:

部門 A 負責根據市場、產品和客戶的陪伴場景輸出優質的陪伴內容,部門 B 負責把這些陪伴內容觸達到不同的渠道和用戶。

實現原理:

部門 A 的陪伴事件觸發服務和部門 B 的陪伴觸達服務之間通過 RocketMQ 消息進行業務解耦,即雙方沒有依賴關係,也不必同時在線。


3) 異步調用

業務場景:

異步調用的使用場景比較多,如用戶註冊、用戶關鍵行為跟蹤等。其中用戶行為跟蹤場景,在服務端異步記錄用戶的關鍵行為及相關屬性,可為用戶分等級運營和精準營銷打下基礎。

實現原理:

將非核心的業務流程異步化可以減少系統的響應時間,提高吞吐量,是系統優化的常用手段。RocketMQ 提供了高效的通信機制,業務系統使用起來非常方便。

總結與未來展望

隨著互聯網技術在金融領域的不斷滲透和金融創新業態的發展,公募基金互聯網業務需要不斷進行流程改造、模式創新及服務能力升級,在優化場景體驗的基礎上,持續打造基於平臺、場景和產品三位一體的互聯網服務平臺。

Matrix 經過一年多的建設,目前已具備多渠道統一接入、第三方生態互聯互通、基金特色交易場景化封裝等功能特性。Matrix 通過建設有品質、有溫度的陪伴,從技術上和體驗上,讓用戶理解風險,理解投資,進而為客戶持續創造價值。

在未來,將會有更多的合作伙伴接入 Matrix ,希望我們能一起暢遊在創新科技的星辰大海中,合作共贏。

瞭解更多 RocketMQ 信息,可加入社區交流群,下面是釘釘群,歡迎大家加群留言。

Leave a Reply

Your email address will not be published. Required fields are marked *