社区里缺的不是架构图,而是可供参考的架构实践。程序员缺的不是技术原理知识,而是抽象来的可供复用的方案思路。为了切实帮助技术人成长,在信息爆炸时代获取最精华的架构知识,腾讯云开发者携手腾讯云架构师技术同盟推出架构师系列文集,每期会以《如何设计一个 XX 系统》为主题,分享同盟架构师们多年经验抽象来的经典方案设计思想。
本文是系列第一篇,我们聊聊支付系统的经典设计。除了作为普适方案的本文,作者还准备了上中下三篇信息密度更丰富、细节更详实的雄文,各位读者朋友一定持续关注腾讯云开发者公众号,不错过后续更新。
概述
支付系统在电商交易平台中发挥着至关重要的作用,涵盖了支付处理、安全性保障、支付方式管理、订单管理与结算、交易记录和报告、退款与售后支持等方面。一个高效、安全、可靠的支付系统对于电商企业的顺利运营和用户体验至关重要。
支付系统/核心交易系统的架构特点
2.1 支付系统的作用
从上图中我们可以看出真实的资金流向。首先当用户产生支付行为时,资金从用户端流向支付系统,退款时则相反,从支付系统回流至用户端。因此在整个交易过程中用户端与支付系统是双向资金的流动方式。对于支付系统而言,资金有进有出。从支付系统到商户端就比较简单了,在清算完成后支付系统负责将代收的资金结算给商户,通常结算的操作可以在线上来完成(采用支付公司代付接口或者银企直连接口来完成),也可以由公司财务通过线下手工转账的方式来完成,因此这种资金流动的方式是单向的。出于资金安全考虑,大多数公司通常这部分采用线下方式实现。
真实的资金流由支付公司按照约定期限(通常 T+1 )结算到平台公司对公账户中,然后再由平台公司再按照交易明细进行二次清算后结算给对应的商户。
2.2 支付系统的架构
2.2.1 架构概述
系统说明
2.2.2 支付系统设计要点
在支付系统中,支付网关和支付渠道的对接确实是非常重要且繁琐的功能之一。支付网关作为对外提供服务的接口,扮演着将资金操作请求分发到对应支付渠道模块的角色。支付渠道模块则负责接收网关的请求,并调用相应支付渠道的接口执行真正的资金操作。
支付网关在这个过程中类似于设计模式中的“wrapper”,它封装了各个支付渠道之间的差异,为网关提供了统一的接口。这样一来,无论是哪个支付渠道,网关都能够以统一的方式与其进行交互。
支付系统对其他系统,尤其是交易系统,提供了多种支付服务,包括签约、支付、退款、充值、转账、解约等。有些地方还可能提供签约并支付的接口,以支持在支付过程中绑定银行卡的操作。这些支付服务的实现流程基本上是相似的,包括下单、取消订单、退单、查询订单等操作。
每个操作的实现通常包括以下七个步骤:
对于一些比较复杂的支付渠道服务,还可能涉及到异步通知和处理的步骤,以确保支付结果的及时性和准确性。
在实现支付系统时,软件工程师需要具备扎实的编程技能和对支付领域的深入理解。同时,注重细节、进行充分的测试和质量保证也是非常重要的,以确保支付系统的稳定性和安全性。此外,与团队成员和其他相关方进行良好的沟通和协作,也是成功实现支付系统的关键因素之一。
交易系统的链路优化
交易系统在整个支付系统中充当了连接业务前置和支付网关的桥梁,确保支付过程的可靠性、一致性和安全性。其设计和实现需要考虑各种业务场景、并发情况和异常情况,以构建一个稳定、高效的支付交易处理系统。同时交易系统还需要与其他系统进行集成,如清结算系统、风控系统等,以实现全面的支付功能和业务支持。
交易系统具备如下功能:
对账系统的设计
4.1 对账系统概述
对账系统或对账平台通常用于比对财务数据上的金额或订单数据的差异等,主要体现在交易的金额上。然而,这里所指的对账平台旨在成为一个更广泛的工具,一个平台化的解决方案。尽管对账的需求起源于财务对账,但目前该平台已经扩展支持多种业务领域之间不同形式的对账工作。此外,这个工具化的产品还能够支持不同业务形态下的大数据量比对。通过统一的平台建设,该对账平台使得不同业务线之间相同或相似的对账诉求能够得到统一解决,从而减少人力资源消耗和独立开发所带来的资源浪费。总体而言,这个对账平台成为一个全面且高效的工具,使得企业能够更加便捷地进行对账工作,并且满足多样化的对账需求。同时,平台化的特性也使得它更灵活适应不同业务场景,提升了数据对比的精度和效率。
对账其实就是在两个数据源当中,找出指定范围内的相同及差异的数据。对账系统都会包含三个环节:数据的采集加工,对账,以及调账。
4.2 对账需求分析
4.2.1 对账数据间的关系
我将需要比对的两个数据源称为主数据源与目标数据源,那么通常比对的两个大数据源的数据关系会有如下的三种情况:
当然,在不影响业务含义的情况下,针对不同的对账数据间的关系,其实都可以转化成一对一的关系进行比对。如一对多以及多对多的关系,我们都可以将数据分组汇总后,通过一对一关系进行匹配比对。
4.2.2 对账的维度
在业务的对账需求上,数据会存在下面两种情况的对账:
汇总对账的维度可能不只一个。例如,业务上可以按照商家和月度进行汇总后对账。也可以按照,商家及产品维度汇总后进行对账,总之汇总对账的维度其实是灵活多变的,应当完全按照不同的业务线进行配置。
4.2.3 对账结果的输出
对账结果包含了两部分,第一是交集,也就是相同的数据,第二部分是差集,也就是不同的部分,即有差异的部分。在很多的对账诉求当中,有的业务线需要输出全量的数据,即包含交集和所有差集,而有的业务线则只需要保留有差异的部分即可。因此根据不同的对账诉求,我们将对账结果输出模式设置成如下四种:
总结
支付系统的健壮性和稳定性至关重要。对于一个复杂的系统来说,监控是必不可少的。监控可以分为多个层面,包括业务监控(核心交易流程)、渠道监控(支付渠道的可用性和性能)、商户监控(商户交易状况)和账户监控(用户账户变动等)。这些监控措施可以及早发现问题,减少潜在的风险,架构设计是一个动态的过程。
作者介绍
江湖人称“山哥”,腾讯云架构师技术同盟名人堂专家、“技术方舟”主理人,专注于人工智能、互联网金融和大型电商领域,拥有丰富的架构设计和开发经验,擅长大模型调优及智能体搭建,精通TensorFlow和PyTorch等深度学习框架,具备全面的技术选型与实施能力,为企业提供高效、稳定的技术解决方案。
-End-
原创作者|李伟山