上次说的幂等的 api 是从 api 层面考虑的事务控制,这次从数据层面考虑事务控制的设计
- 所有参与事务的数据都带有一个 operation_version 字段,每次执行事务的操作需传入一个整个系统全局唯一的 id,这需要一个 unique id generator (比如 https://github.com/sony/sonyflake)
- 具体操作分为 create, update, delete, query
- create 比较简单,需要回滚只需要遍历各个服务删除所有 operation_version 对应的数据就可以了
- update 需要做数据备份,回滚时需要恢复旧数据,单条数据整体备份就可以了,恢复也比较简单
- delete 需要字段做为标记删除,删除时标记删除,恢复只要取消标记删除就可以了
- query 因为有做了标记删除,所以查询时需要增加过滤条件,过滤掉标记删除的数据