Skip to main content

System Design: 支付系统

· 3 min read

为了解决支付系统中高并发、容错、事务一致性等复杂问题,我们可以尝试应用以下设计模式和关键概念:


1. 断路器模式(Circuit Breaker)

  • 作用:防止系统因外部依赖故障而崩溃。
    • 外部通信:当调用第三方服务或 API 时,通过断路器监控失败率。
    • 服务无响应:若失败阈值触发,断路器"跳闸",直接拒绝请求(快速失败),避免资源耗尽。
    • 系统保护:通过降级策略(如返回缓存数据)保证核心功能可用。

典型场景:支付网关超时、数据库连接失败时快速熔断。


2. Saga 模式

  • 作用:管理跨服务的分布式事务,替代传统 ACID 事务(性能低、不适用于微服务)。
    • 分布式事务:将一个业务逻辑拆分为多个本地事务,按顺序执行。
    • 本地事务提交:每个服务独立提交事务(非 2PC,避免长锁)。
    • 补偿操作:若某步骤失败,触发逆向补偿操作(如退款、库存回滚)。

类型

  • 协同式:由服务间事件驱动。
  • 编排式:通过中央协调器(Orchestrator)控制流程。

典型场景:电商下单(扣库存 → 创建订单 → 支付),若支付失败则补偿库存。


3. 弹性和高性能模式

  • 重试:对暂时性故障(如网络抖动)自动重试,需配合退避策略(如指数退避)。
  • 幂等操作:同一操作多次执行结果一致(如通过唯一 ID 防止重复扣款)。
  • 故障处理:超时控制、限流、负载均衡等,避免级联故障。

工具:Spring Retry、Resilience4j、Hystrix(已停维护)。


4. 交易结算相关概念

  • 幂等键(Idempotency Key):客户端生成的唯一标识(如 UUID),服务端据此识别重复请求。
  • 唯一键(Unique Key):数据库唯一约束(如订单号),防止数据重复。
  • 客户端接受:明确告知客户端请求是否成功(如 HTTP 202 Accepted + 异步回调)。
  • 重复请求处理:通过幂等键+去重表(或 Redis 缓存)过滤重复提交。

典型场景:支付接口防重、对账系统确保交易唯一性。


总结对比

模式/概念核心目标关键实现手段
断路器模式故障隔离和快速失败监控 → 熔断 → 恢复
Saga 模式分布式事务最终一致性本地事务+补偿
弹性模式高可用和容错重试、限流、降级
交易结算幂等防止重复操作唯一键、幂等键、状态机

这些模式常结合使用,例如:

  • 断路器保护 Saga 中的服务调用,失败时触发补偿;
  • 幂等键确保重试或补偿操作的安全性。

Resources