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

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

第一步

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

第二步

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

第三步

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

第四步

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

第五步

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

第六步

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

第七步

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

第八步

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

第九步

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

第十步

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

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

相关推荐
万亿少女的梦1681 天前
基于Spring Boot、Java与MySQL的同城宠物服务系统设计与实现
java·spring boot·mysql·系统设计·协同过滤
书香门第3 天前
系统设计练习 - 分布式黑名单服务(design a distributed denylist service)
分布式·系统架构·系统设计
doiito7 天前
【Agent Harness】Gliding Horse 最新升级:把“智能闭环”真正跑通的一次深度优化
rust·架构设计·系统设计·ai agent
doiito11 天前
【Agent Harness】流马(Gliding Horse)DeepSeek Responses API 接入介绍
rust·系统设计·ai agent
万亿少女的梦16811 天前
基于微信小程序、Express与MongoDB的校园失物招领系统设计
mongodb·微信小程序·node.js·express·系统设计
doiito16 天前
【AI 推理】在 Rockchip NPU 上实现 MoE 大模型流式推理的技术方案
ai·系统设计
doiito21 天前
【开源项目】开源智能排产系统深度研究报告(第一部分)
架构设计·系统设计
万亿少女的梦16821 天前
基于Spring Boot的游戏交易管理系统设计与实现
java·spring boot·mysql·系统设计·交易管理
万亿少女的梦16821 天前
基于PHP的碳排放减排管理系统设计与实现
mysql·数据分析·php·系统设计·碳排放
doiito22 天前
【AI 应用】从“外国人味”到地道中文:kokoroi-rs v0.1.2 架构升级深度解析
ai·rust·系统设计