如何设计一个极简支付系统
如何设计一个极简支付系统
第一步
当用户点击“购买”按钮时,会生成一个支付事件 (Payment Event) 并发送到支付服务。
第二步
支付服务 (Payment Service) 将支付事件存储在数据库中。
第三步
单个支付事件可能包含多个支付订单。比如,我们结账时会从多个卖家选择商品。这时,支付服务会拆分支付事件,每个支付订单都会调用一次支付执行服务 (Payment Executor)。
第四步
支付执行服务将支付订单存储在数据库中。
第五步
支付执行服务调用外部的支付服务提供商 (PSP, Payment Service Provider) 完成信用卡支付。
第六步
在支付执行服务成功执行付款之后,支付服务将更新卖家钱包余额。
第七步
钱包服务将更新后的余额信息存储在数据库中。
第八步
在钱包服务成功更新卖家的余额信息后,支付服务将调用分类帐进行更新。
第九步
分类帐服务将新的分类帐信息更新到数据库中。这一步经常采用事件溯源 (Event Sourcing) 的设计范式,将分类账的更新作为一个个事件存储到事件日志中,再用事件去更新账目余额。我们后续会专门讲解事件溯源。
第十步
每天晚上,支付服务提供商或银行向其客户发送结算文件。 结算文件包含银行账户的余额,以及当天发生在该银行账户上的所有交易。
【图解架构设计,关注公众号:ByteByteGo】