实现高并发,高可用,分布式支付系统

简介: 实现高并发,高可用,分布式支付系统

在今年,我开发了一个支付中心系统,用于集合公司所有项目的支付功能配置,功能大致如下:

image.png

具体流程

image.png

高并发

为了实现高并发,我们采用了easyswoole框架,同时针对各个接口做了如下优化:

下单接口

对固定的商户数据做了缓存,避免每次查询数据库,

下单接口只有订单插入这一条io操作

支付成功异步回调接口


先即时判断成功数据,并进行更新,

同时会新开协程通知商户, 如果通知不成功,将通过异步队列通知给商户

高可用

为了实现高可用,我们实现了以下功能:

针对支付成功

1:为了避免系统异步通知出现问题,或者网络出现问题,在下单之后,将定时获取待支付订单,主动向支付平台(支付宝,微信) 查询订单状态,如果订单状态为支付成功,立即更新为支付成功,并异步通知商户  (根据订单的创建时间来进行修改频率)

2:为了避免系统异常终止出现的订单支付问题,在系统启动成功后,将立即执行步骤1

3:为了避免步骤1获取到用户不准备支付的订单,我们新增了过渡状态:订单准备支付状态  当用户创建订单,并请求支付方式接口时,将更新为此状态,只有此状态才会进行步骤1更新

4:订单状态如果为已创建,则在30分钟后自动过期订单,并同时请求支付平台(支付宝,微信) 关闭此订单 (也可在下单时预先设置订单过期时间)

5:在更新为已支付状态时,开启事务并加锁,确保其他进程无法访问此订单数据.

6:所有操作都有做异常日志记录

针对退款订单

1:为了使得退款合理化,我们新增了过渡状态:订单准备退款  只有在请求退款订单并未响应退款成功时才会更新为此状态

2:退款时,将新增一条退款订单记录,通过此记录向支付平台(支付宝,微信) 发起退款,此订单状态为 待退款 ,每条支付订单可多次重复退款,但是金额不能操作

3:因为微信退款为异步操作,同时避免在扩展其他支付方式出现问题,在申请退款之后,将定时获取待退款订单,主动向支付平台(支付宝,微信)请求退款订单信息,如果为退款成功,立即更新为退款成功,并异步通知商户 (根据订单的创建时间来进行修改频率)

4:由于退款订单到账银行卡最长需要7个工作日,所以系统将定时清理7日之前的待退款订单,更新为退款异常,并将原有支付订单改回支付成功状态

5:订单退款所有操作都带上了事务,并对相关数据加锁

6:所有操作都有做异常日志记录

以上2条保证了就算是系统死机,在开机后,也能保证之前的支付订单,退款订单等正常运行,就算是在更新为待退款状态时突然断电,下次也可以重新根据退款订单进行请求退款,也可以通过退款记录恢复退款状态

分布式部署

为了增加系统并发,系统实现了分布式部署,同时对redis,mysql做了集群兼容,只有订单这些重要数据才会直接走主库,其他查询都走从库

同时为了避免系统的定时任务,消费进程等出现冲突,额外实现了redis分布式锁

目录
相关文章
|
4月前
|
人工智能 算法 前端开发
超越Prompt Engineering:揭秘高并发AI系统的上下文工程实践
本文系统解析AI工程范式从Prompt Engineering到Context Engineering的演进路径,深入探讨RAG、向量数据库、上下文压缩等关键技术,并结合LangGraph与智能体系统架构,助力开发者构建高可靠AI应用。
572 2
|
7月前
|
Kubernetes 大数据 调度
Airflow vs Argo Workflows:分布式任务调度系统的“华山论剑”
本文对比了Apache Airflow与Argo Workflows两大分布式任务调度系统。两者均支持复杂的DAG任务编排、社区支持及任务调度功能,且具备优秀的用户界面。Airflow以Python为核心语言,适合数据科学家使用,拥有丰富的Operator库和云服务集成能力;而Argo Workflows基于Kubernetes设计,支持YAML和Python双语定义工作流,具备轻量化、高性能并发调度的优势,并通过Kubernetes的RBAC机制实现多用户隔离。在大数据和AI场景中,Airflow擅长结合云厂商服务,Argo则更适配Kubernetes生态下的深度集成。
884 34
|
3月前
|
存储 算法 安全
“卧槽,系统又崩了!”——别慌,这也许是你看过最通俗易懂的分布式入门
本文深入解析分布式系统核心机制:数据分片与冗余副本实现扩展与高可用,租约、多数派及Gossip协议保障一致性与容错。探讨节点故障、网络延迟等挑战,揭示CFT/BFT容错原理,剖析规模与性能关系,为构建可靠分布式系统提供理论支撑。
227 2
|
3月前
|
机器学习/深度学习 算法 安全
新型电力系统下多分布式电源接入配电网承载力评估方法研究(Matlab代码实现)
新型电力系统下多分布式电源接入配电网承载力评估方法研究(Matlab代码实现)
137 3
|
5月前
|
数据采集 缓存 NoSQL
分布式新闻数据采集系统的同步效率优化实战
本文介绍了一个针对高频新闻站点的分布式爬虫系统优化方案。通过引入异步任务机制、本地缓存池、Redis pipeline 批量写入及身份池策略,系统采集效率提升近两倍,数据同步延迟显著降低,实现了分钟级热点追踪能力,为实时舆情监控与分析提供了高效、稳定的数据支持。
179 1
分布式新闻数据采集系统的同步效率优化实战
|
7月前
|
监控 Linux 应用服务中间件
Linux多节点多硬盘部署MinIO:分布式MinIO集群部署指南搭建高可用架构实践
通过以上步骤,已成功基于已有的 MinIO 服务,扩展为一个 MinIO 集群。该集群具有高可用性和容错性,适合生产环境使用。如果有任何问题,请检查日志或参考MinIO 官方文档。作者联系方式vx:2743642415。
2271 57
|
6月前
|
缓存 NoSQL 算法
高并发秒杀系统实战(Redis+Lua分布式锁防超卖与库存扣减优化)
秒杀系统面临瞬时高并发、资源竞争和数据一致性挑战。传统方案如数据库锁或应用层锁存在性能瓶颈或分布式问题,而基于Redis的分布式锁与Lua脚本原子操作成为高效解决方案。通过Redis的`SETNX`实现分布式锁,结合Lua脚本完成库存扣减,确保操作原子性并大幅提升性能(QPS从120提升至8,200)。此外,分段库存策略、多级限流及服务降级机制进一步优化系统稳定性。最佳实践包括分层防控、黄金扣减法则与容灾设计,强调根据业务特性灵活组合技术手段以应对高并发场景。
1639 7
|
8月前
|
消息中间件 存储 设计模式
RocketMQ原理—5.高可用+高并发+高性能架构
本文主要从高可用架构、高并发架构、高性能架构三个方面来介绍RocketMQ的原理。
2754 21
RocketMQ原理—5.高可用+高并发+高性能架构
|
7月前
|
NoSQL 算法 安全
redis分布式锁在高并发场景下的方案设计与性能提升
本文探讨了Redis分布式锁在主从架构下失效的问题及其解决方案。首先通过CAP理论分析,Redis遵循AP原则,导致锁可能失效。针对此问题,提出两种解决方案:Zookeeper分布式锁(追求CP一致性)和Redlock算法(基于多个Redis实例提升可靠性)。文章还讨论了可能遇到的“坑”,如加从节点引发超卖问题、建议Redis节点数为奇数以及持久化策略对锁的影响。最后,从性能优化角度出发,介绍了减少锁粒度和分段锁的策略,并结合实际场景(如下单重复提交、支付与取消订单冲突)展示了分布式锁的应用方法。
543 3
|
11月前
|
存储 缓存 监控
社交软件红包技术解密(四):微信红包系统是如何应对高并发的
本文将为读者介绍微信百亿级别红包背后的高并发设计实践,内容包括微信红包系统的技术难点、解决高并发问题通常使用的方案,以及微信红包系统的所采用高并发解决方案。
314 13

热门文章

最新文章