百图解码支付系统设计与实现

内容概览

根据作者10余年支付行业架构设计与实现的经验,围绕如何设计在线支付系统进行讲解。内容主要包括:专业术语解读、支付系统概述、产品和系统架构、核心业务逻辑、各核心子系统的设计,以及一些专项技术课题。 将以实战经验为主线介绍这些内容,希望能给读者带来一些启发。

适用人群

主要面向学生、编程新手、想提升架构设计能力的编程老手、或对支付领域好奇的专业人士。 希望通过图解示例和通俗易懂的方式,从支付领域的基本概念开始,逐步深入讲解支付系统的核心流程和技术实现。目标是让复杂的支付技术变得简单易懂。 文章中的部分设计思路和方法论同样适用于其他领域,如状态机设计、分布式环境下的流量控制、如何去分析并理解业务的本质等。

互动与反馈

在阅读过程中发现任何不准确或需要改进的地方,欢迎通过留言、私信等方式反馈,我将及时更新内容,避免误导后续读者。

最后,期待能够为大家在支付技术和业务的学习及实践中带来帮助。

欢迎转载。

Github:https://github.com/yinmo-sc/Decoding-Payment-System-Book

公众号:隐墨星辰。

有个小群不定时解答一些问题或知识点,有兴趣的同学可先加微信(yinmo_sc)后进入,添加微信请备注:加支付系统设计与实现讨论群。

致谢

@月朦胧 提出的“状态机领域模型同时被两个线程操作怎么避免状态幂等问题”

@赵晓军528 @康文彬 指出了状态机文章中有关键代码缺失

@用户4725518259032 指出了需要缺失hashCode()的问题。

很多其他网友也给了很多有益反馈,无法一一感谢。

大纲内容

内容和顺序可能在写作过程中可能会有些调整。

1.前言

● 《百图解码支付系统设计与实现》专栏大纲(持续更新)

2.术语

● 支付行业黑话:支付相关必知术语一网打尽(完成)

3.在线支付系统概要

● 跟着图走,学支付:在线支付系统设计的图解教程(完成)

4.核心业务与流程

● 支付:如何从用户账户扣钱到平台账户

● 退款:如何从平台账户扣钱到用户账户

● 清算:外部机构如何把钱给到平台

● 结算:如何把钱从平台结算给商户

● 充值:用户如何把钱充值到平台的个人账户

● 转账:用户账户之间如何转账

● 提现:用户如何把钱从平台账户转出去

● 外汇:跨币种支付怎么结算

5.各核心子域设计

【收单结算】

● 图解收单平台:打造商户收款的高效之道(完成)

● 图解结算平台:准确高效给商户结款(完成)

● 图解拒付平台:如何应对用户的拒付(完成)

【收银支付】

● 图解收银台:支付系统承上启下的关键应用(完成)

● 图解支付引擎:资产流动的枢纽(完成)

【商户网关】

【渠道网关】

● 图解支付渠道网关(一):不只是对接渠道的接口(完成)

● 图解支付渠道网关(二):模型、状态机与流程编排(完成)

● 图解支付报文网关:一种低代码报文网关的设计思路与核心代码实现(完成)

● 图解文件网关:文件交互的底座(完成)

【商服中心】

【会员中心】

【账务中心】

【会计中心】

【对账平台】

【计收费平台】

【风控平台】

【额度中心】

【产品中心】

【密钥中心】

● 图解金融级密钥管理系统:构建支付系统的安全基石(完成)

【卡中心】

6.专业技术课题

【业务ID生成规则】

● 交易流水号的艺术:掌握支付系统的业务ID生成指南(完成)

【支付安全】

● 揭密支付安全:为什么你的交易无法被篡改(完成)

● 金融密语:揭秘支付系统的加解密艺术(完成)

【状态机设计】

● 支付系统的心脏:简洁而精妙的状态机设计与核心代码实现(完成)

【幂等设计】

● 避免重复扣款:分布式支付系统的幂等性原理与实践(完成)

【日志规范设计】

● 支付系统日志设计完全指南:构建高效监控和问题排查体系的关键基石(完成)

【流控】

● 精确掌控并发:固定时间窗口算法在分布式环境下并发流量控制的设计与实现(完成)

● 精确掌控并发:滑动时间窗口算法在分布式环境下并发流量控制的设计与实现(完成)

● 精确掌控并发:漏桶算法在分布式环境下并发流量控制的设计与实现(完成)

● 精确掌控并发:令牌桶算法在分布式环境下并发流量控制的设计与实现(完成)

● 削峰填谷:分布式消息中间件在分布式环境下并发流量控制的应用(完成)

● 流量控制与熔断利器:Sentinel介绍(完成)

● 分布式环境下流控技术汇总(完成)

【资损防控】

● 一种行之有效的防错策略:在支付系统中实施防呆设计的实践(完成)

【数据库与事务】

● Spring事务模板及afterCommit存在的坑 (完成)

【分库分表】

【多活】

【监控核对告警】

【重复支付与重复退款】

【支付失败重试与退款失败重试】

【渠道路由】

【渠道开关】

【多线程与线程池】

【设计模式应用】