1.对账系统产生的背景与意义
对账在传统的会计核算中就是保证账簿记录正确可靠,对账簿中的有关数据进行检查和核对的工作。在银行或第三方支付中,对账其实是对一定周期内的交易进行双方确认的过程,一般都是在第二天银行或者第三方支付公司对前一日交易进行清分,生成对账单供平台商户下载,并将应结算款结算给平台商户。
对账分为信息流对账和资金流对账,信息流对账一般在自己内部系统的对账,比如支付系统和支付数据和业务系统的业务数据进行对账,保证资金交易和业务交易的一致性。资金流对账也就是支付系统和银行或者第三方支付系统之间的资金交易对账。
2.对账系统的设计
对账系统的设计阶段,将对账系统分为四个模块,每个模块的负责自己的职能。
- 文件获取模块:下载或者读取各渠道对账文件
- 文件解析模块:创建不同的解析模板,根据渠道和文件类型获取对应的解析模板进行解析
- 对账处理模块:对账的业务逻辑处理
- 差错处理模块:处理差错池中的订单
一般会设计一个定时任务,每天固定的时间点触发,定时驱动调度类分别调用四个模块来处理对账。也有的银行会主动的推送对账单,再通过http回调来触发对账流程。
3.对账系统中的相关名词
轧账:发现有差异的记录;
平账:通过自动或人工的方式解决这些差异;
长款(多账):以平台交易为基准的情况下和银行对账,发现周期内的交易,平台有此订单而第三方支付中没有订单,形成平台长款,平台长款一般是由于用户在支付的时候跨天的情况,23:58分创建了订单,在第二天00:03分进行了支付;
漏单(短账):银行有,而平台无的订单,平台漏单很少见,一般直接转人工处理;
清算:计算各方应收应付款的时间与金额;
结算:根据清算的结果在指定的时间对各方进行实际的资金转移操作;
4.目前对账系统普遍存在的问题及改进措施
问题:
1.如果对账过程中查询数据量巨大,对数据库性能影响较大;
2.逐行比对算法效率较低,对账服务器及数据库服务器负荷较高;
3.导入批量文件,逐行入库效率较为低下(每一次都需要建立网络连接、关闭连接)
改进:
1.涉及网络传输的,尽量采用批量方式操作,减少网络消耗及时间消耗;
2.使用redis等NOSQL数据库,降低数据库服务器的压力,一台redis服务器不够,可以无限制增加用于对账用的服务器;
3.使用redis的set集合的sdiff功能,利用redis sdiff算法的高性能,比对上游记录和我方记录的差异。