知识卡片

补偿不同于回滚需定义逆操作

普通读书笔记卡 · 1976.ad

内容

保证最终一致需考虑失败时如何恢复,一种办法是补偿。补偿不同于回滚:回滚在强一致事务下、变更仅限内存,异常时撤销未提交操作;补偿是对已发生的事实做事后补救,数据已真正变更无法撤销,只能执行逆操作(插入订单的逆操作是删除订单)。故用补偿实现最终一致,需为每个改状态的操作定义逆操作。采用补偿的柔性事务称补偿模式;与可靠事件模式不同,补偿模式上游强依赖下游、据下游结果判断是否补偿。发散:”已提交无法回滚,只能反向再做一次”是补偿类模式的共同逻辑。

参考来源

- 位置:《解构领域驱动设计》第18章《领域驱动设计的战略考量》18.4.3(源文件:_epub-src/OEBPS/031.xhtml) - 结论依据:原文辨析补偿与回滚的本质区别,指出补偿针对已发生的事实做逆操作,并对比补偿模式与可靠事件模式的依赖关系。 - 原始内容:补偿则是对已经发生的事实做事后补救,由于数据已经发生了真正的变更,因而无法对数据进行撤销,而是执行相应的逆操作……需要为每个修改状态的操作定义对应的逆操作。