1.對賬系統產生的背景與意義
對賬在傳統的會計核算中就是保證賬簿記錄正確可靠,對賬簿中的有關數據進行檢查和核對的工作。在銀行或第三方支付中,對賬其實是對一定周期內的交易進行雙方確認的過程,一般都是在第二天銀行或者第三方支付公司對前一日交易進行清分,生成對賬單供平台商戶下載,並將應結算款結算給平台商戶。
對賬分為信息流對賬和資金流對賬,信息流對賬一般在自己內部系統的對賬,比如支付系統和支付數據和業務系統的業務數據進行對賬,保證資金交易和業務交易的一致性。資金流對賬也就是支付系統和銀行或者第三方支付系統之間的資金交易對賬。
2.對賬系統的設計
對賬系統的設計階段,將對賬系統分為四個模塊,每個模塊的負責自己的職能。
- 文件獲取模塊:下載或者讀取各渠道對賬文件
- 文件解析模塊:創建不同的解析模板,根據渠道和文件類型獲取對應的解析模板進行解析
- 對賬處理模塊:對賬的業務邏輯處理
- 差錯處理模塊:處理差錯池中的訂單
一般會設計一個定時任務,每天固定的時間點觸發,定時驅動調度類分別調用四個模塊來處理對賬。也有的銀行會主動的推送對賬單,再通過http回調來觸發對賬流程。
3.對賬系統中的相關名詞
軋賬:發現有差異的記錄;
平賬:通過自動或人工的方式解決這些差異;
長款(多賬):以平台交易為基准的情況下和銀行對賬,發現周期內的交易,平台有此訂單而第三方支付中沒有訂單,形成平台長款,平台長款一般是由於用戶在支付的時候跨天的情況,23:58分創建了訂單,在第二天00:03分進行了支付;
漏單(短賬):銀行有,而平台無的訂單,平台漏單很少見,一般直接轉人工處理;
清算:計算各方應收應付款的時間與金額;
結算:根據清算的結果在指定的時間對各方進行實際的資金轉移操作;
4.目前對賬系統普遍存在的問題及改進措施
問題:
1.如果對賬過程中查詢數據量巨大,對數據庫性能影響較大;
2.逐行比對算法效率較低,對賬服務器及數據庫服務器負荷較高;
3.導入批量文件,逐行入庫效率較為低下(每一次都需要建立網絡連接、關閉連接)
改進:
1.涉及網絡傳輸的,盡量采用批量方式操作,減少網絡消耗及時間消耗;
2.使用redis等NOSQL數據庫,降低數據庫服務器的壓力,一台redis服務器不夠,可以無限制增加用於對賬用的服務器;
3.使用redis的set集合的sdiff功能,利用redis sdiff算法的高性能,比對上游記錄和我方記錄的差異。