大厂聚合支付系统架构演进(上)

点击下方“JavaEdge”,选择“设为星标”

第一时间关注技术干货!

关注我,紧跟本系列专栏文章,咱们下篇再续!

作者简介:魔都国企技术专家兼架构,多家大厂后端一线研发经验,各大技术社区头部专家博主,编程严选网创始人。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。

负责:中央/分销预订系统性能优化;活动&优惠券等营销中台建设;交易平台及数据中台等架构和开发设计 目前主攻降低软件复杂性设计、构建高可用系统方向。

0 前言

聚合支付主要是就是一个将所有的第三方支付,通过借助形式融合在一起,相当于对接一个支付接口,就可以使用各种支付的场景。如便利店购物,贴个码,上有微信支付,支付宝等各种支付。

2fd7552a699623dfd414cb010ad42ea7.jpeg

针对一个小商户进行一个收款工具,让商家他那边会有一个收钱吧商户通,第一个可以实时的收听语音报告,当前用户付款多少钱,第二个就是他可以去实时查看账单,了解当天营业额。

1 V1.0系统

  • 工期短

    基本上所有新项目都这尿性,天天被领导鞭策赶进度

  • 业务不熟

    不知道聚合支付到底做啥的,支付流程啥样?毕竟每个公司支付业务其实完全不一样,无法照搬!

  • 交易量小

    当时的交易量是只有前端的一两个产品在使用,每天的交易笔数也很小

  • 人员缺乏

    新成立的团队做新项目研发,那就只有我和另一十年老鸟同事

该背景下完成 V1.0系统架构,即虚线圈,具体分工:

  • 交易前置

  • 交易网关

直接操作 DB 没做甚至缓存的优化。

68ecdc449519f6b094885b2688b39598.png
  • 交易前置:支付核心业务处理,如记录商户交易流水、对接各个支撑服务

  • 风控系统:交易单日/单笔限额、商户黑名单、欺诈行为识别等风险因素控制

  • 路由系统:通过设定的优先级、限额等路由规则,选择合适的渠道,保证成功率,降低成本

  • 交易网关:负责所有支付渠道的报文包装、数据加密、协议转换、签名验证、状态映射

当时就做这样简单架构,第一个开发比较快,直接拿需求进行改代码,方便测试以及上线。经几个月交易猛增,发现

2 系统瓶颈

2.1 渠道隔离

当时对接了几个渠道,特别渠道不稳定的话,如资源不可用、网络问题,导致超时,就会把所有渠道交易全部影响,级联反应导致交易链路雪崩。系统哪边挂了之后立马要赶紧联系。所以说这个渠道隔离放在第一位首要的。

2.2 接口膨胀

特别涉及相似业务的,如消费、撤销、退款接口,就每个业务类型都有这几个接口,随业务发展,也难维护,开发每次来个需求都考虑到底是改哪个接口,要不要都改。

2.3 动态扩容

聚合支付很多交易异步,用户下单时,我们会立即返回就下单成功,或者下单失败,但是这个交易有没有消费成功,我们需要设置定时的任务去查询最终付款结果。

2.4 定时调度

它需定时、定点、定量拉取订单处理,如拉取数据太多OOM,太少很多交易得不到执行。分布式下如何充分提升并发前提下充分使用机器资源变紧迫。

2.5 配置分散

传统将配置文件存放在每个节点,每次升级都要运维手动改。风险高且不好维护。

3 V2.0系统

3.1 设计方向

  • 稳定:支付系统的根基

  • 支付体验:用户使用支付功能时感知零延迟

  • 低耦合:模块间减少依赖,需求变动风险控制在最小范围

过程试了多种方案,最终演变如下系统架构:

01cf7afca06127716b15712c9bd14a91.png

首先将服务划分三条线,绿色和中间红色和最下面一条橙色:

  • 绿色是把交易核心、交易网关独立出来

  • 任务作业和那个查询网关独立部署

  • 两条业务线通过 MQ  解耦

  • 再独立查询服务,对前端业务仅提供一个流水查询功能

编程严选网(www.javaedge.cn)

写在最后

编程严选网(www.javaedge.cn),程序员的终身学习网站已上线!

点击阅读原文,即可访问网站!

欢迎长按图片加好友,我会第一时间和你分享软件行业趋势面试资源学习途径等等。

f6de60f8f748b74c800e630415ad78b6.jpeg添加好友备注【技术群交流】拉你进群,更多教程资源应有尽有

关注公众号后,在后台私信:

  • 回复【架构师】,获取架构师学习资源教程

  • 回复【面试】,获取最新最全的互联网大厂面试资料

  • 回复【简历】,获取各种样式精美、内容丰富的简历模板

  • 回复 路线图,获取直升Java P7技术管理的全网最全学习路线图

  • 回复 大数据,获取Java转型大数据研发的全网最全思维导图

  • 微信【ssshflz】私信 【副业】,进副业交流群

  • 点击阅读原文,即可访问程序员一站式学习网站

 

0b0e9b35567a03c43f40371079fd8676.png

最近在准备面试,为大家准备一份2024最新最全Java学习路线一条龙

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

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

相关文章

1.0 Zookeeper 分布式配置服务教程

ZooKeeper 是 Apache 软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。 ZooKeeper 的架构通过冗余服务实现高可用性。 Zookeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高…

GPTs保姆级教程之实践

GPTs什么 使用GPTs的前提:ChatGPT Plus帐号 GTPs的作用:把我们和GPT对话的prompt,封装起来成为一个“黑匣子”。 主要有两个作用: 1、避免反复输入prompt,“黑匣子”打开,输入问题即可使用 2、在别人可以…

pycharm deployment 灰色 一直无法点击

我的development的配置如下,我看了很多教程一直不知道为什么一直是灰色的, 文件夹配置: 如果你这里 Autodect,那么你Mapping 的文件夹应该是应该省略这个前缀的,例如我下面,我应该将本地文件夹映射到/home…

项目经理怎么处理客户提出的不合理请求?

一、客户不合理请求的定义和特点 客户不合理请求是指客户在项目执行过程中提出的与项目需求、合同约定或者实际情况不符的要求,通常表现为追加要求、频繁的变更、过度的要求等。这些请求可能会导致项目范围膨胀、成本增加、工期延长、甚至影响项目进度和质量。客户…

【HTML】MDN

文章目录 一、html元素1.1 <a>1.2 <abbr>1.3 <address>1.4<area>1.5 <article>1.6 <aside>1.7 <audio>1.8 <b>1.9 <base>1.10<bdi>1.11 <bdo>1.12 <blockquote>1.13 <body>1.14 <br>1.15…

人工智能(pytorch)搭建模型24-SKAttention注意力机制模型的搭建与应用场景

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能(pytorch)搭建模型24-SKAttention注意力机制模型的搭建与应用场景&#xff0c;本文将介绍关于SKAttention注意力机制模型的搭建&#xff0c;SKAttention机制具有灵活性和通用性&#xff0c;可应用于计算机视…

一个Vivado仿真问题的debug

我最近在看Synopsys的MPHY仿真代码&#xff0c;想以此为参考写个能实现PWM-G1功能的MPHY&#xff0c;并应用于ProFPGA原型验证平台。我从中抽取了一部分代码&#xff0c;用Vivado自带的仿真器进行仿真&#xff0c;然后就遇到了一个莫名其妙的问题&#xff0c;谨以此文作为debug…

ROS2 CMakeLists.txt 和 package.xml

这里记录一下ROS2中功能包package.xml和CMakeLists.txt的格式。以LIO-SAM的ROS2版本为例&#xff1a; 一&#xff1a;CMakeLists.txt cmake_minimum_required(VERSION 3.5) project(lio_sam)if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)set(CMAKE_BUILD_TYPE…

C语言之自定义类型:联合和枚举

目录 1. 联合体类型的声明2. 联合体的特点3. 联合体大小的计算联合的一个练习 4. 枚举类型的声明5. 枚举类型的优点6. 枚举类型的使用 1. 联合体类型的声明 像结构体一样&#xff0c;联合体也是由一个或者多个成员构成&#xff0c;这些成员可以不同的类型 但是编译器只为最大…

vCenterServer部署

一、硬件配置 vCenterServer本身最低的硬件要求是14GB&#xff0c;而vCenterServer则是以虚拟机的形式安装在ESXi中的虚拟机&#xff0c;所以ESXi的最低硬件要求是15.5GB&#xff0c;就是15872MB 二、安装vCenterServer 直接解压VMware-VCSA-all-8.0.0-20920323.iso&#xf…

TDengine用户权限管理

Background 官方文档关于用户管理没有很详细的介绍&#xff0c;只有零碎的几条&#xff0c;这里记录下方便后面使用。官方文档&#xff1a;https://docs.taosdata.com/taos-sql/show/#show-users 1、查看用户 show users;super 1&#xff0c;表示超级用户权限 0&#xff0c;表…

python实现飞书群机器人消息通知

python实现飞书群机器人消息通知&#xff08;消息卡片&#xff09; 直接上代码 """ 飞书群机器人发送通知 """ import time import urllib3 import datetimeurllib3.disable_warnings()class FlybookRobotAlert():def __init__(self):self.web…

一道sql注入的ctf题目致使用phpmyadmin上传 webshell 拿后台权限

以下均为靶场测试环境渗透&#xff0c;非正式环境。 遇见登录框&#xff0c;直接万能密码’or(11)or’/1 直接登录成功并返回结果: 既然存在sql注入&#xff0c;那就用sqlmap跑一下吧&#xff1a; 输出所有的数据库&#xff1a; sqlmap -u <目标URL> --dbs 要输出数据库…

Android Button background 失效

问题 Android Button background 失效 详细问题 笔者开发Android项目&#xff0c;期望按照 android:background中所要求的颜色展示。 实际显示按照Android 默认颜色展示 解决方案 将xml的Button 组件修改为<android.widget.Button> 即将代码 <Buttonandroid:l…

「云原生可观测团队」获选「InfoQ 年度技术内容贡献奖」

随着云原生、人工智能逐渐成为各行各业的创新生产力工具。可以预见&#xff0c;我们即将进入全新的智能化时代。随着数据成为新型生产要素&#xff0c;云和 AI 正走向深度融合。云原生通过提供大规模多元算力的高效供给&#xff0c;可观测成为业务创新的核心基础设施&#xff0…

CSS伸缩盒模型

CSS伸缩盒模型 伸缩盒模型是CSS中的一种布局手段&#xff0c;可以使元素具有弹性&#xff0c;让元素可以跟随页面大小的改变而改变。 1. 伸缩容器 给元素设置display:flex 或 display:inline-flex &#xff0c;就是伸缩容器。 2. 主轴与侧轴 主轴&#xff1a; 伸缩项目沿着…

python coding with ChatGPT 打卡第17天| 二叉树:找树左下角的值、路径总和

相关推荐 python coding with ChatGPT 打卡第12天| 二叉树&#xff1a;理论基础 python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历 python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历 python coding with ChatGPT 打卡第15天| 二叉树&#xff1a;翻转…

SpringBoot+随机盐值+双重MD5实现加密登录

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 前言一、salt…

阿里云游戏服务器收费价格表,一年和1个月报价

阿里云游戏服务器租用价格表&#xff1a;4核16G服务器26元1个月、146元半年&#xff0c;游戏专业服务器8核32G配置90元一个月、271元3个月&#xff0c;阿里云服务器网aliyunfuwuqi.com分享阿里云游戏专用服务器详细配置和精准报价&#xff1a; 阿里云游戏服务器租用价格表 阿…

Linux系统调试课:硬件断点

沉淀、分享、成长,让自己和他人都能有所收获!😄 📢在linux内核编程中,经常会遇到由于内存被篡改,例如 buffer overflow,野指针,write after free等。查找分析此类问题非常的麻烦。 一、什么是硬件断点 硬件断点,是Linux内核中是一种被ptrace和内核内调试器使用调试…