支付系统核心架构设计思路(万能通用)

news/2024/11/23 16:48:58/

文章目录

    • 1. 支付系统总览
      • 核心系统交互
      • 业务图谱
    • 2. 核心系统解析
      • 交易核心
        • 交易核心
        • 基础交易类型抽象
        • 多表聚合 & 订单关联
      • 支付核心
        • 支付核心总览
        • 支付行为编排
        • 异常处理
      • 渠道网关
      • 资金核算
    • 3. 服务治理
      • 平台统一上下文
      • 数据一致性治理
        • CAS校验
        • 幂等 & 异常补偿
        • 对账
        • 准实时对账
      • DB拆分
      • 异步化
        • 消息异步化
        • 外部支付调用异步化
        • 异步并行化
        • 资金核算异步化
        • 热点账户账务单独处理
        • 记账事务切分
    • 4. 生产实践
      • 性能压测
      • 稳定性治理
      • 核心链路分离
      • 服务依赖降级
  • 结语

支付永远是一个公司的核心领域,因为这是一个有交易属性公司的命脉。那么,支付系统到底长什么样,又是怎么运行交互的呢?抛开带有支付牌照的金融公司的支付架构,下述链路和系统组成基本上符合绝大多数支付场景。其实整体可以看成是交易核心+支付核心 两个大系统。交易系统关联了业务场景和底层支付,而支付系统完成了调用支付工具到对账清算等一系列相关操作。下面我们就来一起看下各个系统的核心组成和交互。

1. 支付系统总览

核心系统交互

图片

业务图谱

图片

2. 核心系统解析

交易核心

交易核心把公司的业务系统和底层支付关联起来,让业务系统专注于业务,不比关心底层支付。

交易核心

图片

基础交易类型抽象

图片

多表聚合 & 订单关联

图片

支付核心

支付核心主要负责将多种支付类型进行抽象,变成 充值提现退款转账四种支付形态。同时,还要负责集成多种支付工具,对支付指令进行编排等等。

支付核心总览

图片

支付行为编排

其目的,是实现 插件式开发支付规则可配置的 灵活开发方式。

图片

异常处理

异常处理包括了 重复支付、部分支付、金额不一致、其他异常等异常场景。

图片

渠道网关

图片

资金核算

图片

3. 服务治理

平台统一上下文

通过确定系统边界、业务建模拆分之后,整个支付平台被拆分几十个服务,而如何保障在服务间流转业务信息不被丢失,是我们需要考虑的问题。平台统一上下文的要素信息(唯一业务标识码),在整个支付平台链路中全程传递,被用来解决这个问题。

图片

数据一致性治理

大型的支付公司,内部都有非常严格和完备的数据一致性方案,比如采用业务侵入性非常大的分布式事务等,以牺牲开发效率来提升数据的稳定,是非常有必要的。而业务公司,如果不采用分布式事务又有哪些应对策略呢?

CAS校验

图片

幂等 & 异常补偿

图片

对账

图片

准实时对账

图片

DB拆分

图片

异步化

支付是整个交易链路的核心环节,那么,怎么兼顾支付系统的稳定性和执行效率呢?是异步化。

消息异步化

图片

外部支付调用异步化

图片

在外部支付中,经常需要服务方与第三方支付交互,获取预支付凭证,如上图所示。

这种同步调用的情况下,由于需要跨外部网络,响应的 RT 会非常长,可能会出现跨秒的情况。由于是同步调用,会阻塞整个支付链路。一旦 RT 很长且 QPS 比较大的情况下,服务会整体 hold 住,甚至会出现拒绝服务的情况。

图片

因此,可以拆分获取凭证的操作,通过独立网关渠道前置服务,将获取的方式异步化,从前置网关获取内部凭证,然后由前置网关去异步调用第三方。

异步并行化

图片

资金核算异步化

图片

热点账户账务单独处理

图片

记账事务切分

图片

4. 生产实践

性能压测

构建压测模型,模拟现实真实场景;压测数据进影子库,正常业务无侵入;单机性能和集权链路都不能忽视;识别系统稳定性和容量配比。。。

图片

稳定性治理

图片

核心链路分离

图片

服务依赖降级

图片

作者:PetterLiu
来源:www.cnblogs.com/wintersun/

结语

如果这篇文章对您有所帮助,或者有所启发的话,求一键三连:点赞、评论、收藏➕关注,您的支持是我坚持写作最大的动力。


http://www.ppmy.cn/news/22923.html

相关文章

【C++提高编程】list 容器详解(附测试用例与结果图)

目录1. list容器1.1 list基本概念1.2 list构造函数(初始化)1.3 list 赋值和交换1.4 list 大小操作1.5 list 插入和删除1.6 list 数据存取1.7 list 反转(reverse)、排序(sort)和去重(unique&…

PyQt6-QTextEdit学习笔记

一、概述技术PyQt6中QTextEdit控件的基本用法。QTextEdit是一个先进的所见即所得查看器/编辑器,支持使用html风格标签或Markdown格式的富文本格式。它经过优化,可以处理大型文档并快速响应用户输入。QTextEdit工作在段落和字符。段落是一个格式化的字符串…

算法_爬楼梯题解

leetcode链接 70. 爬楼梯 - 爬楼梯 - 力扣(LeetCode) 爬楼梯问题的本质是斐波那契数。这个题可以用递归来解决: int climbStairs(int n) {if(n1)return 1;if(n2)return 2;else return climbStairs(n-1)climbStairs(n-2); } 但是&#xf…

C++ 浅谈之适配器

C 浅谈之适配器 HELLO,各位博友好,我是阿呆 🙈🙈🙈 这里是 C 浅谈系列,收录在专栏 C 语言中 😜😜😜 本系列阿呆将记录一些 C 语言重要的语法特性 🏃&#…

不坑盒子:强大的word插件,让工作更高效

不坑盒子简介 很多朋友在工作过程中需要对Word文档进行编辑处理,如果想让Word排版更有效率可以试试小编带来的这款不坑盒子软件,这是一个非常好用的插件工具,专门应用在Word文档中,支持Office 2010以上的版本,用户可以…

开发微服务电商项目演示(一)

从本期开始为大家讲解一个微服务电商项目的一个开发过程 其中包括以下等技术1.项目框架及多模块开发2.mybatis与微服务注册3.服务调用&分布式session4.网关服务限流熔断降级&分布式事务5.商品秒杀展示6.商品秒杀接口测压及优化7.消息推送8.分布式锁一.项目模式电商模式…

Apollo搭建使用

Apollo的执行过程 Apollo的原理 Client(Java应用端)通过域名访问Meta Server获取Config Service服务列表(IPPort),而后直接通过IPPort访问服务,同时在Client侧会做load balance、错误重试 Apollo的引入 1…

【论文速递】NAACL2022- 文档级事件论元抽取的双流AMR增强模型

【论文速递】NAACL2022- 文档级事件论元抽取的双流AMR增强模型 代码:RunxinXu/TSAR: Source code for “A Two-Stream AMR-enhanced Model for Document-level Event Argument Extraction” NAACL 2022 (github.com) 论文:[2205.00241] A Two-Stream A…