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

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

第一步

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

第二步

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

第三步

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

第四步

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

第五步

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

第六步

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

第七步

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

第八步

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

第九步

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

第十步

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

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

相关推荐
記億揺晃着的那天14 天前
Amazon SP-API 报告创建全流程与状态机:从创建、轮询到下载入库,新手避坑指南
api·架构设计·系统设计·amazon api·sp-api
梁辰兴19 天前
软件工程:系统设计
软件工程·设计原则·系统设计·设计工具·设计方法·梁辰兴·设计阶段
郝学胜-神的一滴22 天前
《C++11 工程级应用01:告别冗长类型,开启简洁高效编码新时代》深度解读
开发语言·c++·算法·软件开发·系统设计
thesky12345623 天前
智能体面试准备(五十二):大厂面试实战——系统设计/简历包装/30天冲刺
大厂面试·系统设计·智能体·面试实战·简历包装·30天冲刺·axb协同
阿崽meitoufa25 天前
共享会话存储
系统设计
万亿少女的梦1681 个月前
基于Spring Boot、Java与MySQL的同城宠物服务系统设计与实现
java·spring boot·mysql·系统设计·协同过滤
书香门第1 个月前
系统设计练习 - 分布式黑名单服务(design a distributed denylist service)
分布式·系统架构·系统设计
doiito1 个月前
【Agent Harness】Gliding Horse 最新升级:把“智能闭环”真正跑通的一次深度优化
rust·架构设计·系统设计·ai agent
doiito1 个月前
【Agent Harness】流马(Gliding Horse)DeepSeek Responses API 接入介绍
rust·系统设计·ai agent
万亿少女的梦1681 个月前
基于微信小程序、Express与MongoDB的校园失物招领系统设计
mongodb·微信小程序·node.js·express·系统设计