常见分布式应用系统设计图解(十五):支付系统
系统 常见 支付 十五 分布式应用 设计图
2023-06-13 09:13:29 时间
支付(Payment)系统可以很复杂,比如可以和银行打交道,和信用卡系统打交道。如果我们考虑用户在一家电商买东西,在结账的时候,借助电商支持的支付系统(Payment Service Provider)来完成支付行为。
支付系统需要结合商家(包含卖家和买家)一起来看。最典型的一种需求是,卖家在电商网站挂了东西卖,买家挑选了货物,结账并支付,电商依赖于支付系统来完成支付,并通知买家支付成功。
- 图中用两条虚线分隔出了 3 列,最左边是用户,中间是电商系统(比如 Amazon),右边是 Payment Service Provider(PSP,比如 PayPal)。支付操作需要保证幂等性,从而在重试的过程中保证不会被重复扣钱。
- 有的电商自己会存储用户具体的支付信息,比如信用卡信息和银行账号信息,但是这样的数据管理成本由于安全需求的原因非常高,因此也有很多电商省掉这个麻烦,选择让 PSP 来管理。图中就是对于这种情况的示意。
- 图中用户在 checkout page 结账页面,store 向 PSP 发送一个 registration 请求,得到一个 token,这个 token 就可以后续用来查询支付信息。再根据这个 token 生成一个跳转到 PSP 网页的 URL,于是这个 URL 重定向用户的请求到了 PSP 的支付页面。一并带过去的,除了 token,还可能会有一个回调 URL,用以支付成功以后跳转回 store 的成功页。
- 用户填上信用卡信息并提交,PSP 会生成一个待支付的事件放到 Payment Queue 中。
- Payment Worker 会异步地和信用卡公司通信并完成支付行为,更新账本 Ledger 系统,并放入一个通知事件到 Notification Queue 中。对于反复投递不成功的消息,放入 Dead Letter Queue 作备案处理。
- 这个 queue 会有不同的消费者,其中一个是 Webhook Worker,将成功的消息告知 store(或者是通知支付页处理完成的消息,用户就被重定向到 store 的订单支付完成页面)。这之后如果 store 需要知道具体的支付信息,可以使用之前的 token,发起主动查询。
- 定期还可能会有对账(Reconciliation)和生成 statement 等异步任务,图中没有列出。例如,store 往往需要定期执行对账任务,调用 PSP API 来检查支付和账户数据的一致性。
这是《常见分布式系统设计图解》系列文章中的一篇,如果你感兴趣,请参阅汇总(目录)寻找你其它感兴趣的内容。
文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接 《四火的唠叨》
×Scan to share with WeChat
你可能也喜欢看:
相关文章
- Java项目毕业设计:基于springboot+vue的电影视频网站系统「建议收藏」
- 园区视频监控智能分析系统
- Windows系统装机步骤以及常见专用名词汇总(实用)
- 智能合约DAPP程序搭建流程(系统开发源码)
- 光伏组件IV测试系统
- Linux系统下常见的分区工具
- 深入了解:Linux系统重启时间查看(linux查看重启时间)
- 安装linux:最小化体验(linux最小化安装系统)
- 有哪些探究Linux发行版:常见的系统版本有哪些?(常见的Linux发行版)
- 开启新世界:从u盘启动安装Linux系统(u盘启动装linux)
- process使用Linux系统创建进程的方式(linuxcreat)
- 命令熟悉Linux系统常用命令(常见linux)
- Linux 系统架构分支之解析(linux的分支)
- Linux系统安装:从U盘到完美体验(linuxu盘装系统)
- Linux系统关闭防火墙的安全指南(关闭linux的防火墙)
- Linux的分支:多样化的开源系统(linux的分支)
- Linux的发展之路:探索分支系统的多样性(linux的分支)
- linux系统的常见服务介绍。
- Linux系统宽带连接指南(linux连接宽带)
- 系统特性探索Mac OS最新版系统的特性(新版macos)
- linux系统的常见服务介绍。
- Linux配置SSL证书:快速通过安全连接保护系统(linux配置ssl证书)
- 使用调整MSSQL内存,减少系统性能开销(减少mssql内存)
- Linux系统常用端口扫描防范背后的安全含义(Linux 常见端口)
- "Linux系统中最常见文件系统的探究"(常见的linux文件系统)
- Linux系统中MAN指令的应用(linuxman指令)
- 使用Linux系统移除文件夹的简单操作(linux移除文件夹)
- 利用旧电脑快速安装Linux系统(linux旧电脑)
- 的高可用Dos环境下的Oracle高可用 实现工作的可靠保障(dos系统下oracle)
- oracle系统中常见的死锁类型分析(oracle中死锁类型)
- C#中常见的系统内置委托用法详解