背景
兼容性/幂等分析
- 发布中兼容性(新老机器、新老代码兼容性)
- 新代码对老单据的兼容性(幂等分析)
- 正向支付、逆向退款的兼容性
发布中兼容性
兼容性分析
支付事件驱动框架,事件的执行被分为四个阶段,每个阶段可能因为一些系统异常(rpc超时等等)而中断执行,然后通过云资金的异步命令被拉起。
所以就有了以下发布中的兼容性问题:执行中断的事件,在不同代码的机器上被拉起时,能否正常被执行:
- 新代码创建的交易是否可以由老代码兼容执行完
- 老代码创建的交易是否可以由新代码兼容执行完
解法
在入口层用切流开关做新老代码的隔离,开关关闭的情况下,所有流量都走老逻辑,然后把新代码全部部署到线上后,逐步用切流开关做灰度。
幂等兼容性
兼容性分析
老单据走新事件
新单据走老事件
解法
关键点:
- 新老操作的对同一笔outTradeNo落库时,唯一键保持不变
- isvOrgId + outTradeNo + operateType
- 所以需要 OperateType 保持不变
保证新老单据,能重入新老事件的处理流程
老的退款事件不支持部分退款
- 新的退款事件支持部分退款
兼容性分析
解法
整体思路
- 新支付事件生成的支付单一定走新的退款事件
- 老支付事件生成的支付单,也要支持走新的退款事件
- 才能实现所有支付单都能支持部分退款