圖解大廠清結算系統設計

1 賬務清結算系統職責概述

賬務清結算系統是支付系統的資金控制管理模塊,分爲:

1.1 賬務

賬務系統爲外部客戶和內部管理者提供符合公司內部財務覈算的各種會計憑證、賬簿與財務報表,一般分爲:

  • 實時入賬模塊,負責在線完成客戶賬戶餘額更新
  • 日終批處理模塊,負責日終餘額校驗並完成會計報表統計

1.2 清結算

支付業務的資金計算模塊,最終目的是實現與商戶的貨款兩清,功能包括:

  • 清算(Clearing),是根據交易結果和協議規定,對交易的客戶備付金、商戶手續費、銀行成本和其他款項進行計算,明確每個客戶的應收應付金額
  • 結算(Settlement),是根據結算週期規定,對清算產生的應收應付金額,完成資金的劃撥;對賬最終完成貨款兩清
  • 對賬(Statement),過程中交易成員對收付的結算款項覈對、確認,確保自身權益不受影響

2 建設重點

賬務清結算系統承接支付的所有交易的資金處理。除了滿足基本結算業務規則和財務會計規則,還需根據互聯網支付業務特點,額外考慮:

  • 實時交易,交易總量大,交易峯值不可控
  • KA 商戶模式,數據庫存在熱點賬戶問題,並且資金數據是敏感數據,要求絕對的準確,所以數據庫表拆分方案複雜
  • 結算模式多樣,千人千面結算計費規則

3 系統功能架構

三方支付場景中,賬務和清結算是交易的必要一環,入賬和清結算請求,來自交易支付系統。

3.1 支付交易的標準入賬結算信息流

交易支付系統分別通知賬務、清結算模塊,完成交易入賬、交易清結算處理,清結算完成結算後再次調用入賬完成結算款劃撥。

那麼,爲啥要分開並行完成交易入賬和清結算請求呢?

  • 賬務的維度和交易的資金出入要一一對應,組合支付、合單支付場景,一筆支付不能完全對應一筆結算,需在支付交易系統明確訂單拆分規則,依商戶訂單模式報送清結算,依支付訂單維度報送賬務
  • 賬務和清結算分開,可在內部做一個弱校驗,即使其中一個系統出問題,也可保證不產生資損,降低資金風險

賬務清結算系統接收到支付的指令後,根據業務流程、賬務規則和結算規則,設計賬務清結算系統的組成結構:

一、前置接口 對外系統提供不同的協議服務,以完成賬務入賬和結算邏輯。主要處理:

  • 流量控制:對接口流量控制,防止流量洪峯;對單賬戶控制,防止熱點賬戶影響
  • 校驗中心:完成交易的完整性校驗、冪等性校驗、賬戶狀態的可用性校驗等
  • 決策中心:完成交易和記賬規則、結算規則的匹配,同時處理熔斷機制下的業務降級決策

二、賬務清結算業務處理,賬務結算的核心處理模塊。這部分業務是根據傳統的結算業務規則、賬務會計規則,通過技術手段實現自動化結算業務、記賬業務和會計報表業務。

4 技術難點

4.1 熱點賬戶

即正常交易過程的某個特定時間段內,出現頻次特高的賬戶。若數據庫異常重試或交易故障的人工恢復等處理導致的高頻,一般不作熱點賬戶。

賬務處理避免不了數據庫行鎖。若一次賬務處理數據庫事務 10ms,對熱點賬戶處理 TPS 最大 100,一旦超過閾值,頻繁鎖競爭會使數據庫性能驟降。

熱點賬戶分類:

4.1.1 入款熱點

入款熱點常用的做法是緩衝入賬,將入款交易緩衝,按照一定的處理速度做賬務處理,使得賬務處理速度低於 tps 的閾值,保證數據庫性能穩定;如果在逐筆緩衝處理仍有壓力,可以使用匯總緩衝。

4.1.2 出款熱點

出款熱點若採用緩衝,可能導致不良結果,一般不採用,通常對出款熱點的處置方案:

① 數據庫驅動層改寫

由數據庫驅動層檢測數據庫行鎖,在規定時間週期內,合併更新,統一返回處理結果,類似彙總入賬,降低熱點的更新頻度

② 數據庫水平拆分

賬務系統的賬戶記錄分散到不同機器的不同表。再對有熱點的賬戶邏輯拆分成多個賬戶,使拆分的多個賬戶分散到不同機器的不同表。熱點賬戶變成多個賬戶,降低賬戶熱度

③ 應用層實現

通過分佈式緩存,凍結部分商戶資金放在分佈式緩存中,由緩存實時扣款。最終再同步到賬戶餘額。

本文賬務清結算系統採用分佈式緩存方案,包括:賬戶餘額實時處理模塊、賬戶餘額緩存處理模塊和定時補償處理模塊。

4.2 業務處理模塊

4.2.0 流程圖

4.2.1 賬戶餘額實時處理

  • 接受客戶端出款請求,轉發到賬戶餘額緩存處理模塊處理
  • 做實際的數據庫餘額操作,接受緩存處理模塊或定時檢查模塊請求彙總更新數據庫

4.2.2 賬戶餘額緩存處理

負責用戶出款請求。申請緩存餘額、餘額緩存出款、彙總更新餘額功能。

4.2.3 定時補償處理

爲防止緩存異常等問題導致用戶餘額失真,定時處理模塊定期檢查緩存申請的餘額處理情況和緩存狀態,在緩存過期時調用餘額實時處理模塊刷新用戶餘額。

5 數據庫拆分

賬務清結算數據按用途分:

  • 每筆交易記錄借貸雙方,便於日終餘額覈對,同時滿足會計上憑證需求

    需滿足交易的日統計需求

  • 商戶結算賬單查詢需求,商戶 T+1 日需要覈對 T 日結算賬單數據

    需滿足商戶按日實時查詢需求

  • 小微商戶結算週期多變、對賬週期長

    需滿足小微商戶按月賬單讀取,甚至按季度賬單讀取

基於熱點賬戶和主要需求,數據庫表拆分規則:

image-20240126151412432

先按客戶屬性完成拆分:

  • 資金渠道方的數據,需滿足按日彙總和 T-2 日對賬需求,這部分數據採用按日一級拆分,爲避免一日內交易過的,按訂單 hash 拆分到不同表中,儘量保證單表的記錄在幾百萬內
  • 商戶數據,由於支付商戶分小微普惠型商戶和 KA 商戶。這兩類商戶訴求不盡相同
    • KA 商戶資金流大,交易筆數多,要求日清日結,按商戶+日期+訂單號拆分,控制單筆記錄幾百萬內,保證單日商戶數據查詢效率
    • 小微商戶,交易量小,查詢時間跨度長,只按商戶號一級拆分

6 結算規則

針對商戶計費結算規則多變,設計個標準的算法指令,指令可完成數值比較、四則運算、數據賦值等操作。還設計一套算法組合標準,把若干算法按標準組裝成算法執行策略,通過對算法策略包含的每個算法指令的執行,完成計費結算邏輯。

6.1 執行流程圖

關注我,緊跟本系列專欄文章,咱們下篇再續!

作者簡介:魔都國企技術專家兼架構,多家大廠後端一線研發經驗,各大技術社區頭部專家博主,編程嚴選網創始人。具有豐富的引領團隊經驗,深厚業務架構和解決方案的積累。

參考:

本文由博客一文多發平臺 OpenWrite 發佈!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章