公司業務系統的帳戶資金對接了第三方存管業務,第三方存管指的是銀行與證券公司根據相關的法律法規,爲投資者提供的客戶交易結算資金管理服務。根據銀行要求,在每一個交易日閉市後業務系統都要將客戶的資金變更狀況生成清算文件發送給銀行進行資金的清結算。git
在微服務架構下,系統存在多個業務子系統(同一套帳戶體系),那麼每一個業務子系統發生的資金變更都要進行結算,咱們獨立了一個結算子系統,結算子系統要作的事情就是按照銀行給的資金數據統計規則統計各個業務子系統客戶發生的資金變化狀況並生成清算文件,而後與銀行進行清結算。github
因爲各個業務子系統和結算子系統不在同一個數據庫,那麼咱們面臨的第一個問題就是要將各個業務子系統的資金變化數據同步至結算子系統中,因爲是每日結算一次,因此對數據的實時性要求並不高,只要在結算以前能同步完變更數據便可。數據的準確性指的是結算子系統的數據必需要與業務子系統實際的數據一致,不能多一條也不能少一條,不然會清算失敗。數據庫
業務的發展是多變的,若是系統後續多增長了幾個業務子系統或者砍掉了幾個業務子系統,結算子系統最好是不用任何改動便可知足新業務的接入或剔除。架構
對於業務子系統來講,想要接入結算子系統確定是越簡單越好,最好是幾行代碼就能搞定。微服務
常見的數據同步方案包括數據庫同步、數據文件同步、遠程接口獲取、MQ數據同步、手工同步。下面就針對這五種同步方式作簡單的優缺點分析。工具
數據庫同步指的是經過某種工具將A庫的數據同步到B庫中,好比ETL工具,MySQL的話,能夠考慮canal,canal是阿里巴巴開源的MySQL binlog 增量訂閱&消費組件。spa
文件同步指的是業務子系統將資金數據生成文件放在某個位置上,好比FTP,然後結算子系統上FTP取文件解析入庫。中間件
各業務子系統提供資金數據查詢的接口,結算子系統經過接口調用的方式來獲取數據blog
業務子系統在資金數據發生變化時,經過MQ準實時地將變化數據發送至結算子系統,結算子系統消費消息併入庫。接口
依賴於人工的導出&&導入數據,其實在定義好相關腳本後,工做量不算太大
數據同步方案能夠採用:MQ數據同步+手工同步的方式。主要依賴於MQ作數據同步,在MQ同步發生問題的狀況下,再用手工同步作災備方案,通常狀況下MQ是沒有問題的。固然這種方案主要是考慮到它的靈活性與擴展性,再加上實現起來比較簡單。考慮到數據的準確性,其實數據文件同步也是一個很好的方式。
實現的總體思路爲:結算子系統定義好統一的消息字段,好比用戶編號、變更金額、變更時間、變更類型(盈利/虧損/凍結/解凍)、業務來源等相關字段。各業務子系統按照統一的消息格式發送消息,結算子系通通一消費入庫。在發起結算前,系統先生成結算數據供運營覈對,覈對無誤後,再與銀行發起結算。
由於可能存在消息消費阻塞的狀況,因此在生成結算文件前,爲保證數據的準確性,各業務子系統要提供一個查詢數據總條數與總金額的接口做爲數據覈查的依據,結算子系統根據業務來源調用對應的業務子系統的接口獲取覈查數據,再與結算子系統中的數據作對比,若是一致則說明業務子系統的數據所有同步過來了,若是不一致,那麼則告警須要手工同步。
若是文章對你有幫助的話,給文章點個贊吧。
若是有寫得不正確的地方,歡迎指出。
文章首發公衆號:會跳舞的機器人,歡迎掃碼關注。