frankwangzy0 2015-07-17
悬在支付类平台头上的达摩克利斯之剑——保障资金安全和稳定运行是如何实现的。主要讲解基础体系、资损控制和账务高可用性三个方面,在实践中遇到的难点和解决办法:基础体系
原有系统承接各种业务需求,很好的满足当时的业务需要。但缺乏全站统一的会员、账务、交易基础体系,支付平台实施过程必须面对基础体系融合、切换和迁移的种种困难。因此在基础体系中首先要完成:
(1)会员体系融合
(2)统一账务体系
(3)统一交易中心
其次,新老交易系统迁移时要采用逐步分流、兼容过渡的方式。建立流量分流系统,切换流量从小到大分步验证新交易的正确和兼容性;例如针对退款等此类关联交易,按同源处理原则分流到原正单处理的系统兼容过渡。这样,新交易既能得到充分验证,同时切换迁移时上游系统或外部用户无感知。资损控制金融机构存在的意义就是承担风险、获得收益,作为第三方支付公司,资损控制是资金安全的重要指标,这里所说的资损是指交易、账务等系统因程序逻辑或系统异常导致的资产损失。
(1)幂等控制
分布式架构各系统服务间的访问难免出现处理中断或访问超时等情况,通常的做法是通过重试补偿的方式解决,对于支付系统这种重试如果没有幂等控制就会产生资损,在恶化的情况下甚至是灾难。
新支付平台从业务、交易、支付、账务、金融渠道的关键链路上增加幂等控制和唯一流水号,具体来说就是在数据库上增加一张幂等锁表,用流水号控制资金转移活动的重复执行。
(2)资金核算
除了联机交易期间控制资损之外还需进行资金核算,日清月结确保每日交易、账务资金无误;主要资金核算内容包含下图所示:
(3)数据一致性
通常一次支付过程需要涉及多个支付工具或多个账户的资金转移,特别是组合支付工具的场景。步骤一旦出现不一致,则会出现资金风险;新支付平台业务流程采用“先收后付不垫资”原则和“掉单补查”机制控制数据不一致产生的资损,后续规划使用最终一致性的分布式事务或称柔性事务来解决此类数据不一致问题。账务高可用性高可用性是支付服务质量的重要指标。平台的业务量越来越大,系统越来愈多,特别是关键链路上的核心系统,如:账务核心的异常,就会影响全站大面积的业务。下面介绍账务高可用性设计中的缓冲记账和异步记账。
(1)缓冲记账
参与缓冲记账的账户在账务请求时系统先将记账信息登记在缓冲区,缓冲记账每隔一定时间对于当日的缓冲账务操作请求进行逐笔记账并更新账户余额。这样即使有大批量业务数据的账户,账户余额和账务明细每隔几分钟更新一次,在一定时间内能满足账户查询的需要,同时能解决热点账户并发引起的数据库锁超时问题。
(2)异步记账
异步记账是在特殊业务场景下的记账优化,当业务对账户余额实时一致性要求不高时,可以通过异步记账,缓解高峰时段大量同步调用账务服务而产生的记账压力。本文作者:网银在线资深架构师 阮森灵