05 · WORKFLOWP014 MIN
状态副作用、回滚与 Audit Log
让状态转换、数据库写入和外部副作用在失败时保持可恢复。
MENTAL MODELWORKFLOW EFFECTS
01Validate
→02Transaction: State + Data + Outbox
→03Commit
→04Async Effect
→05Compensate if Needed
先把概念与边界说清楚
定义告诉你它是什么,边界告诉你它不负责什么;企业系统最常见的误解通常发生在两者混用时。
Side Effect
状态变化之外产生的库存、付款、通知、文件或第三方调用。
Rollback
数据库事务失败时恢复到提交前;外部动作则常需反向补偿。
Outbox
在业务事务内写待发布事件,提交后由 Worker 可靠投递。
Audit Trail
记录 from/to、事件、actor、原因、时间与 trace,使流程可还原。
Order Confirmed 但通知与库存不一致
确认接口先改状态,再逐个调用库存和邮件,邮件超时后整个请求返回失败。
- 01
订单确认、库存预占、审计和 outbox 同事务。
- 02
邮件 Worker 重试且幂等。
- 03
预占失败直接回滚,不进入 confirmed。
数据库不变量同步完成,外部通知最终完成且不会诱导用户重复下单。
马上动手
- 区分可回滚、需补偿和可重试副作用。
- 为付款失败后的订单设计补偿状态。
常见坑
- 外部 HTTP 放长事务
- 副作用失败就把状态随意改回
- 审计日志晚于业务提交且可能丢失
05 · KNOWLEDGE CHECK什么时候需要补偿而不是回滚?查看答案⌄
答案
当副作用已发生在数据库事务之外且外部系统没有共同原子提交能力时,需要用退款、释放、撤销等新动作补偿。