支付系统设计

news2024/11/16 23:57:18

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

1. 支付系统总览

核心系统交互

业务图谱

2. 核心系统解析

交易核心

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

交易核心

基础交易类型抽象

多表聚合 & 订单关联

支付核心

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

支付核心总览

支付行为编排

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

异常处理

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

渠道网关

资金核算

3. 服务治理

平台统一上下文

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

数据一致性治理

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

CAS校验

幂等 & 异常补偿

对账

准实时对账

DB拆分

异步化

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

消息异步化

外部支付调用异步化

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

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

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

异步并行化

资金核算异步化

热点账户账务单独处理

记账事务切分

4. 生产实践

性能压测

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

稳定性治理

核心链路分离

服务依赖降级

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/150665.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TCP/IP网络传输模型

先来个总结: TCP/IP的网络传输模型可以分为以下四层:应用层、传输层、IP网络层、网络接口层。 下面我们来简单介绍每一层的作用和工作原理 应用层(Application Layer) 从网络传输模型来说,应用层能说的东西不是太多&a…

Merkle trees vs Verkle trees

什么是默克尔树,它们是如何工作的?使用加密哈希算法的二叉树称为 Merkle 树。哈希树也称为 Merkle 树,用数据块的加密哈希标记叶节点。此外,它还使用其子节点标签的加密散列来标记非叶节点。每个节点都会生成一个摘要(Hash)&#…

SpringBoot笔记(持续更新)

要学习SpringCloud,但是SpringBoot是基础,所以需要开个篇补一下 突发奇想:学习编程,一定要自顶向下学习,刚刚入门了SC,对整个开发部署流程有了一个大概的认知,在听SB的课程发现理解起来很容易…

菲鹏生物冲刺创业板上市:毛利率稳中有降,崔鹏、曹菲夫妇控股

2023年1月6日,菲鹏生物股份有限公司(下称“菲鹏生物”)在深交所更新招股书(注册稿),准备在创业板上市,泰联合证券为其独家保荐人。本次冲刺上市,菲鹏生物计划募资25.056亿元。 其中…

SpringCloud(12)— 分布式事务(Seata)

SpringCloud(12)— 分布式事务(Seata) 一 事务基础 1.事务的ACID原则 2.分布式事务问题 在分布式系统下,一个业务跨越多个服务或数据源,每一个服务都是一个事务。 要保证所有分支事务的最终状态一致&am…

【Qt】为应用程序设置标题栏、状态栏、可执行程序显示 三种状态下的图标

Qt为应用程序添加图标的几种方式 应用程序的图标分为: 程序左上角显示的标题栏的图标: 程序打开后在任务栏显示的状态栏图标: 程序在文件管理器中显示的可执行程序图标: 设置这几种图标的方式有以下几种。 方式1,一…

Maven项目管理

01-Maven概述02-Maven简介03-Maven基本使用04-IDEA配置Mavenhelloworld 版本错误 已解决 https://blog.csdn.net/qq_41428418/article/details/12416917505-依赖管理&依赖范围找不到Any changes??? 感觉无关紧要compile 最大的 默认的scope,表示 dependency …

Linux——文件的读取与搜索

文章目录文件读取cat和tac命令head和tail命令more和less命令wc和du命令文件读取 cat和tac命令 cat命令将文件中全部内容都打印到屏幕上,适合较小文件的读取,不适合大文件。 tac命令是从最后一行开始反向打印,这一点与cat命令正好相反。 语法&…

2023.1.9 学习总结

1.二叉排序树的相关操作 二叉排序树的相关操作可以分为这几种: 1.创建二叉排序树 2.插入值 3.查找值 4.删除值 首先给出二叉排序树的结点类型定义:(就是一个二叉树) struct bis {int data;bis* left;bis* right; }; 因为创…

熊海cms1.0代码审计

目录 一、环境搭建 二、代码审计 (1)后台存在登录绕过漏洞 (2)登录后台user处存在SQL注入 (3)前(后)台文件包含漏洞 (4)后台SQL注入 1、admin/files/…

程序员简历上写这种项目,难怪面试当炮灰。。。

目录: 高级工程师必备:系统设计能力如何让你的项目更有技术含量 上篇文章 《我只是把握好了这3点,1个月后成功拿下大厂offer!》我们聊了聊Java工程师在跳槽前的1个月,如何利用较短的时间从技术广度、技术深度、基础功…

实现一个二叉搜索树

目录 1、认识二叉搜索树 2、实现一个二叉搜索树 2.1 成员变量 2.2 insert 方法 2.3 search 方法 2.4 remove 方法(重点) 3、二叉搜索树总结 1、认识二叉搜索树 从字面上来看,它只比二叉树多了搜索两个字,我们回想一下,如果要是在二…

TP4056国产替代DP4056 1A 锂离子电池充电器芯片

DP4056是一款单节锂离子电池恒流/恒压线性充电器,采用底部带散热片的SOP8封装以及简单的外部应用电路,非常适合便携式设备应用,适合USB电源和适配器电源工作,内部采用防倒充电路,不需要外部隔离二极管。热反馈可对充电电流进行自动调节,以便在…

一篇文章了解 StarRocks

前言 本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据技术体系 正文 StarRocks 是新一代极速全场景 MPP 数据库。St…

php宝塔搭建部署实战响应式园林景观设计公司网站系统源码

大家好啊,我是测评君,欢迎来到web测评。 本期给大家带来一套php开发的响应式园林景观设计公司网站系统源码,感兴趣的朋友可以自行下载学习。 技术架构 PHP7.2 nginx mysql5.7 JS CSS HTMLcnetos7以上 宝塔面板 文字搭建教程 下载源码…

12月更新2022亮点总结 | Java on Visual Studio Code

大家好,一年的时间过得很快,我们已经来到了2023年。回顾2022年,我们的产品也经历了很多的迭代,在此之中,我们有几个亮点想与大家分享! 2022年的亮点 Spring Boot 插件的重大可视化体验升级 从今年年初开始…

基于springboot+mybatis+mysql+vue房屋租赁管理系统

基于springbootmybatismysqlvue房屋租赁管理系统一、系统介绍二、功能展示1.用户登陆2.管理员端主要功能2.房主角色端主要功能3.租客角色端主要功能三、其它系统一、系统介绍 功能说明: 普通用户角色: 寻找房源功能–提供了两种寻找房源的功能&#xff…

JS日期格式化——数字日期转中文日期(封装函数,dayjs时间格式化YYYY-MM-DD)

JS数字日期转中文日期往期相关文章场景复现封装函数(数字日期转中文日期)实际应用往期相关文章 文章内容文章链接JS数组对象——根据日期进行排序,按照时间进行升序或降序排序https://blog.csdn.net/XSL_HR/article/details/128579840?spm1…

10分钟完全理解golang context

当前go的各种源码中应该都可以看到context的使用,Context是golang 1.7的引入的核心结构,本质是为了处理go的并发控制问题。本文主要带大家深入理解context如何使用,为什么需要context和context设计原理。 并发控制问题 先来看下并发控制到底…

Unity 3D 使用高度图创建地形|| Unity 3D 使用笔刷绘制地形

Unity 3D 使用高度图创建地形 在 Unity 3D 中编辑地形有两种方法: 通过地形编辑器编辑地形。通过导入一幅预先渲染好的灰度图来快速地为地形建模。 地形上每个点的高度被表示为一个矩阵中的一列值。这个矩阵可以用一个被称为高度图(heightmap&#xff0…