账务清结算系统是支付系统的资金控制管理模块,分为:
账务系统为外部客户和内部管理者提供符合公司内部财务核算的各种会计凭证、账簿与财务报表,一般分为:
支付业务的资金计算模块,最终目的是实现与商户的货款两清,功能包括:
账务清结算系统承接支付的所有交易的资金处理。除了满足基本结算业务规则和财务会计规则,还需根据互联网支付业务特点,额外考虑:
三方支付场景中,账务和清结算是交易的必要一环,入账和清结算请求,来自交易支付系统。
交易支付系统分别通知账务、清结算模块,完成交易入账、交易清结算处理,清结算完成结算后再次调用入账完成结算款划拨。
那么,为啥要分开并行完成交易入账和清结算请求呢?
账务清结算系统接收到支付的指令后,根据业务流程、账务规则和结算规则,设计账务清结算系统的组成结构:
一、前置接口 对外系统提供不同的协议服务,以完成账务入账和结算逻辑。主要处理:
二、账务清结算业务处理,账务结算的核心处理模块。这部分业务是根据传统的结算业务规则、账务会计规则,通过技术手段实现自动化结算业务、记账业务和会计报表业务。
即正常交易过程的某个特定时间段内,出现频次特高的账户。若数据库异常重试或交易故障的人工恢复等处理导致的高频,一般不作热点账户。
账务处理避免不了数据库行锁。若一次账务处理数据库事务 10ms,对热点账户处理 TPS 最大 100,一旦超过阈值,频繁锁竞争会使数据库性能骤降。
热点账户分类:
入款热点常用的做法是缓冲入账,将入款交易缓冲,按照一定的处理速度做账务处理,使得账务处理速度低于 tps 的阈值,保证数据库性能稳定;如果在逐笔缓冲处理仍有压力,可以使用汇总缓冲。
出款热点若采用缓冲,可能导致不良结果,一般不采用,通常对出款热点的处置方案:
由数据库驱动层检测数据库行锁,在规定时间周期内,合并更新,统一返回处理结果,类似汇总入账,降低热点的更新频度
账务系统的账户记录分散到不同机器的不同表。再对有热点的账户逻辑拆分成多个账户,使拆分的多个账户分散到不同机器的不同表。热点账户变成多个账户,降低账户热度
通过分布式缓存,冻结部分商户资金放在分布式缓存中,由缓存实时扣款。最终再同步到账户余额。
本文账务清结算系统采用分布式缓存方案,包括:账户余额实时处理模块、账户余额缓存处理模块和定时补偿处理模块。
负责用户出款请求。申请缓存余额、余额缓存出款、汇总更新余额功能。
为防止缓存异常等问题导致用户余额失真,定时处理模块定期检查缓存申请的余额处理情况和缓存状态,在缓存过期时调用余额实时处理模块刷新用户余额。
账务清结算数据按用途分:
每笔交易记录借贷双方,便于日终余额核对,同时满足会计上凭证需求
需满足交易的日统计需求
商户结算账单查询需求,商户 T+1 日需要核对 T 日结算账单数据
需满足商户按日实时查询需求
小微商户结算周期多变、对账周期长
需满足小微商户按月账单读取,甚至按季度账单读取
基于热点账户和主要需求,数据库表拆分规则:
先按客户属性完成拆分:
针对商户计费结算规则多变,设计个标准的算法指令,指令可完成数值比较、四则运算、数据赋值等操作。还设计一套算法组合标准,把若干算法按标准组装成算法执行策略,通过对算法策略包含的每个算法指令的执行,完成计费结算逻辑。
关注我,紧跟本系列专栏文章,咱们下篇再续!
作者简介:魔都国企技术专家兼架构,多家大厂后端一线研发经验,各大技术社区头部专家博主,编程严选网创始人。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。
参考: