2. 支付系统架构基础
在深入中间件错误处理与链路追踪之前,必须先理解支付系统的整体架构。一个高可用、高一致性的支付系统通常采用分层解耦的设计思想,将不同职责的模块划分到独立的层次中。本章将剖析典型的三层架构,并明确消息队列、缓存、RPC框架在每一层中的具体角色。
2.1 典型支付系统三层架构
现代支付系统普遍遵循接入层 → 核心层 → 清算层的纵向分层模型。每一层关注不同的业务边界,通过中间件实现异步解耦与状态同步。
架构设计原则: 接入层负责协议转换与流量入口,核心层保证交易状态与资金安全,清算层完成对账与资金结算。层与层之间通过消息队列或RPC进行通信,避免强依赖。
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,实现全链路监控。
2.3 层间通信与数据流
理解中间件角色后,需要掌握数据如何在三层之间流转。以一次用户支付请求为例:
- 接入层接收HTTP请求,进行签名验签、限流检查,将请求转换为内部RPC协议。
- 核心层通过RPC调用交易引擎,交易引擎更新订单状态,并发送事务消息到消息队列。
- 清算层消费消息队列中的交易流水,执行对账和结算,最终写入会计系统。
关键数据流: 请求 → 接入层(缓存限流) → 核心层(RPC + 消息队列) → 清算层(消息队列 + 缓存快照)。每一层都依赖中间件实现解耦和容错。
2.4 本章小结
- 支付系统采用接入层、核心层、清算层三层架构,层间通过中间件解耦。
- 消息队列负责异步解耦和最终一致性,缓存负责状态加速和降级,RPC框架负责服务治理和链路追踪。
- 中间件的选型和配置直接影响支付系统的可用性和数据一致性,后续章节将深入错误处理与链路追踪的具体实践。