加载中...
加载中...
为多步写操作的每一步预定义反向操作,失败时按倒序执行把系统拉回一致状态——这是 Saga 模式的核心,也是银行链式流程上线前必须过的一关。
Agent 执行多步写操作时,前面几步已经真实生效(客户号已分配、短信已发出、会计流水已入账),后面某步失败——此时重试会重复执行、整体回滚又做不到,唯一出路是为每一步预先定义反向操作并按倒序执行。这就是补偿事务(Compensating Transaction),Saga 模式的核心,也是银行链式流程上线前必须过的一关。
以下 5 项测试帮你把补偿设计从「看起来对」验到「账能对平」,按从单点机制到端到端的顺序覆盖。
测试一:补偿触发率与倒序执行验证
测试二:补偿幂等性测试(重复投递)
测试三:部分补偿失败与悬挂状态发现测试
测试四:不可补偿操作的位置检查
测试五:端到端最终一致性验证(核心指标)
补充参考实现:Temporal(https://temporal.io)与 AWS Step Functions(https://aws.amazon.com/step-functions/)都内置了补偿语义,可以拿来对照自己的实现是否漏了幂等与重试队列。
补偿操作本身也可能被重试。没有幂等键,额度回收会执行两次、客户号释放两次,账实不符比不补偿更糟。正确做法:每个补偿操作携带与正向操作相同的幂等键(或派生键),服务端以补偿键为主键去重。
补偿失败如果没有告警、没有重试队列、没有对账任务,账实不符要等客户投诉或审计发现才知道。必须建立 pending_compensation 状态表,配合定时对账(每小时比对核心状态与流程状态)和超时告警。
短信已发、监管报文已报送、客户已收到通知,后面步骤失败就无法补偿,只能人工处理。设计上把不可撤回操作后置,或改为「先落库待发送,流程成功后再统一发出」。测试上要把这条列为流程设计评审的必查项。
「分享到微信」:手机浏览器打开时一键调起系统分享面板,选择微信即可分享到朋友圈或聊天。电脑上回退为复制文案。
暂无留言,来说两句吧