2. 支付系统架构基础

在深入中间件错误处理与链路追踪之前,必须先理解支付系统的整体架构。一个高可用、高一致性的支付系统通常采用分层解耦的设计思想,将不同职责的模块划分到独立的层次中。本章将剖析典型的三层架构,并明确消息队列、缓存、RPC框架在每一层中的具体角色。

2.1 典型支付系统三层架构

现代支付系统普遍遵循接入层 → 核心层 → 清算层的纵向分层模型。每一层关注不同的业务边界,通过中间件实现异步解耦与状态同步。

架构设计原则: 接入层负责协议转换与流量入口,核心层保证交易状态与资金安全,清算层完成对账与资金结算。层与层之间通过消息队列或RPC进行通信,避免强依赖。
支付系统三层架构总览 支付系统三层架构总览 接入层(接入层) API网关 | 协议适配(HTTP/HTTPS/自定义TCP)| 签名验签 | 限流熔断 中间件:Nginx / Kong / Spring Cloud Gateway + Redis(限流) 核心层(核心层) 交易引擎 | 账户系统 | 风控决策 | 订单状态机 | 支付路由 中间件:RPC框架(Dubbo/gRPC) + 消息队列(RocketMQ/Kafka) 清算层(清算层) 对账系统 | 资金结算 | 差错处理 | 会计记账 | 报表生成 中间件:消息队列(可靠投递) + 缓存(对账快照) 说明:箭头表示请求/数据流向,层间通过中间件解耦,核心层不直接暴露给外部

2.1.1 各层职责与关键组件

层次 核心职责 关键组件 典型中间件
接入层 协议转换、安全校验、流量控制 API网关、负载均衡、限流器 Nginx + Redis(滑动窗口限流)
核心层 交易状态机、账户余额、风控决策 交易引擎、账户服务、风控服务 Dubbo/gRPC + RocketMQ
清算层 对账、结算、差错处理、会计记账 对账系统、结算引擎、会计模块 RocketMQ(事务消息) + Redis
架构要点: 核心层是支付系统的“心脏”,必须保证最终一致性。接入层和清算层可以接受短暂的数据不一致,但核心层的交易状态必须通过分布式事务或TCC模式严格保障。

2.2 中间件在支付系统中的角色

中间件是连接各层、保障高可用与高性能的“骨架”。在支付场景中,消息队列、缓存、RPC框架是最核心的三类中间件,它们分别承担异步解耦、加速访问、服务治理的职责。

2.2.1 消息队列:异步解耦与可靠投递

消息队列在支付系统中主要用于削峰填谷和最终一致性。例如,用户发起支付请求后,接入层将支付指令写入消息队列,核心层异步消费并处理交易,避免同步阻塞。

  • 削峰填谷: 秒杀场景下,消息队列将瞬时流量平摊到多个消费窗口,保护核心数据库。
  • 事务消息: 用于跨服务的事务最终一致性,如支付成功后的积分发放、短信通知。
  • 死信队列: 处理消费失败的消息,结合重试机制实现差错恢复。
选型建议: 支付系统优先选择RocketMQ或Pulsar,它们原生支持事务消息、延迟消息和死信队列,且社区成熟度高。Kafka更适合日志采集场景,不建议用于核心支付链路。

2.2.2 缓存:状态加速与降级兜底

缓存用于减少数据库访问压力,提升接口响应速度。在支付系统中,缓存主要存储热点数据和临时状态。

缓存类型 典型用途 数据一致性要求 常见中间件
本地缓存 路由规则、费率配置 弱一致(定时刷新) Caffeine / Guava Cache
分布式缓存 用户会话、支付令牌、风控黑名单 最终一致(TTL过期) Redis Cluster / Redis Sentinel
持久化缓存 对账快照、交易流水缓存 强一致(写后同步) Redis + RDB/AOF + 数据库双写
避坑提示: 缓存穿透和缓存雪崩是支付系统的常见故障。建议使用布隆过滤器防止穿透,采用本地缓存+分布式缓存双层架构应对雪崩。核心交易数据不要仅依赖缓存,必须落库。

2.2.3 RPC框架:服务治理与链路追踪

RPC框架是核心层内部服务间通信的基石。支付系统通常采用Dubbo或gRPC,它们提供了服务注册发现、负载均衡、超时重试、熔断降级等能力。

  • 服务注册与发现: 使用Nacos或Zookeeper作为注册中心,动态感知服务节点变化。
  • 负载均衡: 支持加权轮询、一致性哈希等策略,避免单点过载。
  • 超时与重试: 支付场景必须设置合理的超时时间(通常500ms~2s),并配合幂等性设计进行重试。
  • 链路追踪: 集成OpenTelemetry或SkyWalking,在RPC调用中传递traceId,实现全链路监控。
中间件在支付系统中的角色关系 中间件在支付系统中的角色关系 消息队列 异步解耦 · 削峰填谷 RocketMQ / Pulsar 缓存 状态加速 · 降级兜底 Redis / Caffeine RPC框架 服务治理 · 链路追踪 Dubbo / gRPC 接入层(API网关、限流、协议适配) 使用缓存做限流计数,使用RPC调用核心层 核心层(交易引擎、账户、风控) 使用RPC框架进行服务间调用,使用消息队列异步处理 清算层(对账、结算、会计) 使用消息队列接收交易流水,使用缓存存储对账快照

2.3 层间通信与数据流

理解中间件角色后,需要掌握数据如何在三层之间流转。以一次用户支付请求为例:

  1. 接入层接收HTTP请求,进行签名验签、限流检查,将请求转换为内部RPC协议。
  2. 核心层通过RPC调用交易引擎,交易引擎更新订单状态,并发送事务消息到消息队列。
  3. 清算层消费消息队列中的交易流水,执行对账和结算,最终写入会计系统。
关键数据流: 请求 → 接入层(缓存限流) → 核心层(RPC + 消息队列) → 清算层(消息队列 + 缓存快照)。每一层都依赖中间件实现解耦和容错。

2.4 本章小结

  • 支付系统采用接入层、核心层、清算层三层架构,层间通过中间件解耦。
  • 消息队列负责异步解耦和最终一致性,缓存负责状态加速和降级,RPC框架负责服务治理和链路追踪。
  • 中间件的选型和配置直接影响支付系统的可用性和数据一致性,后续章节将深入错误处理与链路追踪的具体实践。