如何设计一个极简支付系统

如何设计一个极简支付系统

第一步

当用户点击"购买"按钮时,会生成一个支付事件 (Payment Event) 并发送到支付服务。

第二步

支付服务 (Payment Service) 将支付事件存储在数据库中。

第三步

单个支付事件可能包含多个支付订单。比如,我们结账时会从多个卖家选择商品。这时,支付服务会拆分支付事件,每个支付订单都会调用一次支付执行服务 (Payment Executor)。

第四步

支付执行服务将支付订单存储在数据库中。

第五步

支付执行服务调用外部的支付服务提供商 (PSP, Payment Service Provider) 完成信用卡支付。

第六步

在支付执行服务成功执行付款之后,支付服务将更新卖家钱包余额。

第七步

钱包服务将更新后的余额信息存储在数据库中。

第八步

在钱包服务成功更新卖家的余额信息后,支付服务将调用分类帐进行更新。

第九步

分类帐服务将新的分类帐信息更新到数据库中。这一步经常采用事件溯源 (Event Sourcing) 的设计范式,将分类账的更新作为一个个事件存储到事件日志中,再用事件去更新账目余额。我们后续会专门讲解事件溯源。

第十步

每天晚上,支付服务提供商或银行向其客户发送结算文件。 结算文件包含银行账户的余额,以及当天发生在该银行账户上的所有交易。

【图解架构设计,关注公众号:ByteByteGo】

相关推荐
庄小焱11 天前
Java开发经验——阿里巴巴编码规范实践解析4
系统设计·编码规范·开发经验总结·java规范
庄小焱1 个月前
数据治理域——数据治理体系建设
大数据·数据治理·系统设计·数仓系统设计
编程在手天下我有1 个月前
缓存:缓解读库压力的高效方案与应用实践
数据库·缓存·性能优化·软件开发·系统设计·技术架构
在未来等你1 个月前
互联网大厂Java求职面试:云原生与AI融合下的系统设计挑战-2
java·微服务·ai·云原生·面试题·架构设计·系统设计
庄小焱1 个月前
【2025软考高级架构师】——计算机网络(9)
软考高级·系统架构师·系统设计
LUCIAZZZ2 个月前
说一下分布式组件时钟一致性的解决方案
java·网络·分布式·计算机网络·操作系统·springboot·系统设计
时光追逐者2 个月前
学习如何设计大规模系统,为系统设计面试做准备!
学习·面试·职场和发展·系统设计
庄小焱3 个月前
财务会计域——合并报表系统设计
系统设计·财务·会计域·数仓系统设计·财务会计域
Normal Developer3 个月前
应用的负载均衡
负载均衡·架构设计·系统设计
图王大胜4 个月前
模型 冗余系统(系统科学)
人工智能·工程管理·系统设计·风险管理·战略规划·企业发展·风险控制