微服務架構下的結算系統設計

1、背景

公司業務系統的帳戶資金對接了第三方存管業務,第三方存管指的是銀行與證券公司根據相關的法律法規,爲投資者提供的客戶交易結算資金管理服務。根據銀行要求,在每一個交易日閉市後業務系統都要將客戶的資金變更狀況生成清算文件發送給銀行進行資金的清結算。git

在微服務架構下,系統存在多個業務子系統(同一套帳戶體系),那麼每一個業務子系統發生的資金變更都要進行結算,咱們獨立了一個結算子系統,結算子系統要作的事情就是按照銀行給的資金數據統計規則統計各個業務子系統客戶發生的資金變化狀況並生成清算文件,而後與銀行進行清結算。github

2、問題與挑戰

2.1 數據同步並保證數據的準確性

因爲各個業務子系統和結算子系統不在同一個數據庫,那麼咱們面臨的第一個問題就是要將各個業務子系統的資金變化數據同步至結算子系統中,因爲是每日結算一次,因此對數據的實時性要求並不高,只要在結算以前能同步完變更數據便可。數據的準確性指的是結算子系統的數據必需要與業務子系統實際的數據一致,不能多一條也不能少一條,不然會清算失敗。數據庫

2.2 知足靈活應對多變的業務場景

業務的發展是多變的,若是系統後續多增長了幾個業務子系統或者砍掉了幾個業務子系統,結算子系統最好是不用任何改動便可知足新業務的接入或剔除。架構

2.3 業務子系統能快速接入

對於業務子系統來講,想要接入結算子系統確定是越簡單越好,最好是幾行代碼就能搞定。微服務

3、解決方案

3.1 數據同步方案

常見的數據同步方案包括數據庫同步、數據文件同步、遠程接口獲取、MQ數據同步、手工同步。下面就針對這五種同步方式作簡單的優缺點分析。工具

image

1)數據庫同步

數據庫同步指的是經過某種工具將A庫的數據同步到B庫中,好比ETL工具,MySQL的話,能夠考慮canal,canal是阿里巴巴開源的MySQL binlog 增量訂閱&消費組件。spa

  • 優勢:數據準確性較高
  • 缺點:實施起來較爲複雜;擴展性差

2)數據文件同步

文件同步指的是業務子系統將資金數據生成文件放在某個位置上,好比FTP,然後結算子系統上FTP取文件解析入庫。中間件

  • 優勢:數據準確性高
  • 缺點:靈活性不足

3)遠程接口獲取

各業務子系統提供資金數據查詢的接口,結算子系統經過接口調用的方式來獲取數據blog

  • 優勢:比較適合數據量較小狀況下的數據傳輸同步
  • 缺點:效率低;靈活性和擴展性較差

4)MQ數據同步

業務子系統在資金數據發生變化時,經過MQ準實時地將變化數據發送至結算子系統,結算子系統消費消息併入庫。接口

  • 優勢:靈活可擴展,且知足業務子系統快速接入的要求,只須要發送一條消息便可,結算子系統只須要關注消費消息併入庫便可,就算後續有新增的業務子系統接入,結算子系統也無需改動或少許的改動
  • 缺點:強依賴於MQ中間件,當MQ出現消息阻塞或者宕掉時,數據準確性沒法保證

5)手工同步

依賴於人工的導出&&導入數據,其實在定義好相關腳本後,工做量不算太大

  • 優勢:數據準確性高,能夠覈對數據
  • 缺點:不自動化,增長了人工工做量

4、實施方案

數據同步方案

數據同步方案能夠採用:MQ數據同步+手工同步的方式。主要依賴於MQ作數據同步,在MQ同步發生問題的狀況下,再用手工同步作災備方案,通常狀況下MQ是沒有問題的。固然這種方案主要是考慮到它的靈活性與擴展性,再加上實現起來比較簡單。考慮到數據的準確性,其實數據文件同步也是一個很好的方式。

總體思路

實現的總體思路爲:結算子系統定義好統一的消息字段,好比用戶編號、變更金額、變更時間、變更類型(盈利/虧損/凍結/解凍)、業務來源等相關字段。各業務子系統按照統一的消息格式發送消息,結算子系通通一消費入庫。在發起結算前,系統先生成結算數據供運營覈對,覈對無誤後,再與銀行發起結算。

可能存在的問題以及解決方案

由於可能存在消息消費阻塞的狀況,因此在生成結算文件前,爲保證數據的準確性,各業務子系統要提供一個查詢數據總條數與總金額的接口做爲數據覈查的依據,結算子系統根據業務來源調用對應的業務子系統的接口獲取覈查數據,再與結算子系統中的數據作對比,若是一致則說明業務子系統的數據所有同步過來了,若是不一致,那麼則告警須要手工同步。


若是文章對你有幫助的話,給文章點個贊吧。

若是有寫得不正確的地方,歡迎指出。

文章首發公衆號:會跳舞的機器人,歡迎掃碼關注。

相關文章
相關標籤/搜索