Payment Systems

支付系统的一致性:先定义资金事实,再谈技术方案

支付系统设计的关键不是让接口返回成功,而是明确每个阶段什么才算资金事实。

从资金事实开始

支付系统中的“成功”可能指请求被接收、渠道授权成功、内部账务记账完成,或者资金最终结算。不同阶段使用同一个成功状态,是大量一致性问题的来源。

设计系统前,应该先定义:

  1. 哪个系统记录不可争议的资金事实;
  2. 哪些状态允许回滚,哪些只能通过反向交易修正;
  3. 渠道结果未知时如何继续查询;
  4. 重复请求由哪一层负责幂等;
  5. 对账发现差异后如何恢复。

幂等不是一个字段

幂等键只是入口。完整的幂等设计还需要确定业务作用域、有效期限、并发写入策略、历史结果返回方式,以及相同键携带不同参数时的处理规则。

最终一致也需要期限

“稍后会一致”不是可执行的承诺。系统需要定义恢复时间目标、补偿触发条件和人工介入边界。对于资金系统,一致性策略最终必须落到可观测的运营流程上。