支付系统概述(七):资产交换
上一章我们介绍了和用户支付交互相关的收银台系统,本章我们继续说和用户支付行为相关的另外一个系统:资产交换系统。
资产交换系统有一系列的别名,例如支付核心、统一支付。不管名称叫什么,这个系统承担的职责大致是一样的:记录和推进用户的支付行为。具体来说,资产交换系统提供如下能力:
创建和推进支付单据,并记录支付单据和商品单据之间的关系。
抽象用户所使用的支付资产,定义用户资产和支付工具之间的关系,记录一次支付行为所使用的用户资产。
协调支付过程中各类资产的变动,比如余额的扣减、余额的增加、和渠道的交互。并保证支付过程中各类资产变动的一致性。
这个系统的称呼也就是看待这个系统职责的视角。如果从推进支付行为看,叫统一支付很合适。但更重要的,这个系统是需要协调和保证各类支付资产之间的一致性,所以我们更倾向于叫他资产交换。
在模型上,资产交换系统有两类重要的模型。
一类模型用户记录支付过程和行为,我们称之为支付单。支付单需要有严格定义的生命周期:创建->支付中->支付完成->退款等等。考虑到退款和正向有可能是多对一的关系,正向逆行需要单独的模型。
第二类模型是保证资产交换一致性需要的模型。如果用的是 TCC,可能是 TCC 相关的长事务的表。如果用的是状态机控制的最终一致性,需要有模型记录各类资产的生命周期。
对于资产模型,资产交换系统会去使用,但是我们一般将这个模型归入资产管理系统,我们再下一章介绍,这里就不再赘述。
在服务上,资产交换系统提供 API 和 SPI 两类服务。
对于 API,主要完成对于支付单据全生命周期的管理,包括:
创建支付单据。
关联支付资产。
支付单状态变更通知和查询。
对于 SPI,主要是用于抽象支付资产,并完成和下游关于资产生命周期的协调。我们一般将资产抽象成一个贷记和借记的行为:
DEBIT:扣减资产。
CREDIT:增加资产。
COMMIT:为了保证最终一致性,采用两阶段事务。
资产交换系统是整个支付系统中最核心的部分,同时也是资金风险的高发区。在整个支付系统中,资金风险主要就是集中在资产交换和渠道网络中。
所以,资产交换系统的实施过程中,最重要的就是要做好一致性保障和核对:
资产交换处于一个中间地带,上游是收单,下游是账务系统和渠道网络。对上和对下都可能是一个多对多的关系。整体的幂等逻辑需要严格定义清楚。需要记录总分的关系,分录和下游需要定义严格的幂等逻辑。
资产交换在支付单据和资产上都有严格的生命周期需要保证。同时这两个生命周期之间还有一定的依赖关系。状态机也是资产交换系统需要重点考虑的技术组件。
资产交换系统在协调资产的过程中,存在多个资产的情况,需要保证这些资产推进的最终一致性。一般来说,会采用 TCC 框架来保证。TCC 的分布式事务逻辑,也是资产交换系统的重要组件之一。
总之,资产交换系统对上完成对商品订单的支付,对下完成对支付资产的推进。模型和服务上都体现了这两类交换行为。在技术架构上重点需要考虑最终一致性、状态机和幂等的保障。
版权声明: 本文为 InfoQ 作者【agnostic】的原创文章。
原文链接:【http://xie.infoq.cn/article/ac1dbba7a0cf47fc3d05ae2ce】。文章转载请联系作者。
评论