有两个方案,第一个方案是异步比较数据并修复。
搞了一个离线比对数据并修复的方案,就是用来查找这种相关联的数据的,一部分数据还处于初始化状态,但是一部分数据已经处于可用状态,然后修复那部分初始化的数据。
另外一个方案是:在读取数据的时候,如果发现数据不一致,就丢弃这个数据,同时触发修复逻辑
在一些业务场景下,读请求是能够发现这种数据不一致的。那么它就会立刻丢弃这个数据,并且触发修复程序。
到这里 TCC 你已经讨论得比较深入了。接下来你可以考虑尝试把话题引到 SAGA
TCC 整体来说是追求最终一致性的,和它类似的是 SAGA 事务,也是一个追求最终一致性的事务解决方案,也不满足 ACID 的要求。
#
核心思想:把业务分成一个个步骤,当某一个步骤失败的时候,就反向补偿前面的步骤
注意区分下:回滚和反向补偿
举个例子:某个步骤是插入数据,如果是回滚的话,那么是指插入的时候没有提交,然后业务失败的时候回滚;如果是反向补偿的话,那么是插入的时候已经提交了,在业务失败的时候执行删除
SAGA 的核心思想是反向补偿事务中已经成功的步骤。比如说某个业务,需要在数据库 1 和数据库 2 中都插入一条数据,那么在数据库 1 插入之后,数据库 2 插入失败,那么就要删除原本数据库 1 的数据。但是要注意,在最开始数据库 1 插入的时候,事务是已经被提交了的。