先这样答
跨会话恢复任务,核心是保存状态快照,并在恢复前确认每个副作用是否已经生效。快照保存三样内容:任务目标与计划、已完成步骤及其结果、未决事项。
任务中断后,系统读取快照,先定位未决事项,再继续执行。已完成步骤不能只看本地记录。每个外部操作都要带唯一操作 ID。恢复前,系统用这个 ID 查证操作是否已经生效。比如扣款相关操作,要查订单状态,不能根据上次是否返回成功来猜。
如果操作已经生效,恢复流程就跳过它。如果操作还没有生效,恢复流程再执行它。这个判断依赖副作用具备幂等设计。没有幂等设计,恢复过程可能重复执行已完成操作,最后造成重复扣款事故。这是阿里宝典真题里要考的关键点。
面试官会怎么追问
-
「为什么只保存任务进度还不够?」
任务进度只能说明流程走到哪里,不能证明外部副作用是否已经生效。系统还要保存已完成步骤及其结果,并在恢复前重新查证外部状态。否则,记录成功但实际状态不一致时,恢复仍可能重复执行。 -
「恢复时怎么判断一个外部操作能不能跳过?」
每个外部操作都带唯一操作 ID。恢复前用这个 ID 查证操作是否已经生效,例如查询订单状态。已生效就跳过,未生效才执行。 -
「如果外部操作没有做幂等设计,会怎样?」
恢复流程无法可靠地区分“已经执行”和“还没执行”。它可能再次触发同一个副作用,形成重复扣款事故。幂等是恢复流程成立的前提。
回答的坑
- 只恢复任务目标和当前步骤,却不保存已完成步骤的结果与未决事项,状态信息就不完整。
- 只依据上次执行记录判断副作用是否生效,没有用唯一操作 ID查证外部状态,就可能重放已完成操作。
同系列的题
—— 本题完 ——