Visual LabINTERACTIVE LEARNING
05 · WORKFLOWP014 MIN

状态副作用、回滚与 Audit Log

让状态转换、数据库写入和外部副作用在失败时保持可恢复。

MENTAL MODELWORKFLOW EFFECTS
01Validate
02Transaction: State + Data + Outbox
03Commit
04Async Effect
05Compensate if Needed
数据库内可回滚,外部世界通常只能补偿;可靠流程要区分原子事务与 Saga 式补偿。
01 · CONCEPTS & BOUNDARIES

先把概念与边界说清楚

定义告诉你它是什么,边界告诉你它不负责什么;企业系统最常见的误解通常发生在两者混用时。

01

Side Effect

状态变化之外产生的库存、付款、通知、文件或第三方调用。

02

Rollback

数据库事务失败时恢复到提交前;外部动作则常需反向补偿。

03

Outbox

在业务事务内写待发布事件,提交后由 Worker 可靠投递。

04

Audit Trail

记录 from/to、事件、actor、原因、时间与 trace,使流程可还原。

02 · BLIND BOTS CASE

Order Confirmed 但通知与库存不一致

问题现场

确认接口先改状态,再逐个调用库存和邮件,邮件超时后整个请求返回失败。

  1. 01

    订单确认、库存预占、审计和 outbox 同事务。

  2. 02

    邮件 Worker 重试且幂等。

  3. 03

    预占失败直接回滚,不进入 confirmed。

得到什么

数据库不变量同步完成,外部通知最终完成且不会诱导用户重复下单。

03 · PRACTICE

马上动手

  1. 区分可回滚、需补偿和可重试副作用。
  2. 为付款失败后的订单设计补偿状态。
04 · PITFALLS

常见坑

  • 外部 HTTP 放长事务
  • 副作用失败就把状态随意改回
  • 审计日志晚于业务提交且可能丢失
05 · KNOWLEDGE CHECK什么时候需要补偿而不是回滚?查看答案⌄
答案

当副作用已发生在数据库事务之外且外部系统没有共同原子提交能力时,需要用退款、释放、撤销等新动作补偿。