✅TCC是强一致性还是最终一致性?

✅TCC是强一致性还是最终一致性?

典型回答

✅什么是TCC,和2PC有什么区别?

TCC 的过程是:

  • Try阶段:尝试执行所有操作,并锁定所需资源以准备提交。
  • Confirm阶段:如果所有的Try操作成功,那么执行Confirm操作,最终提交事务。
  • Cancel阶段:如果任何Try操作失败,或者确认过程中遇到问题,执行Cancel操作来回滚所有的操作,释放锁定的资源。

通过他这个通过精心设计的流程,你就能看得出他的设计尽可能确保数据的一致性。


TCC 方案本身不提供强一致性,它提供的是最终一致性!


在分布式事务中,强一致性要求:

  • 在任何时刻,从任何副本节点读取的数据,都是最新的、成功提交的数据。
  • 事务的中间状态对用户是不可见的。

通过上面的TCC的流程我们可以知道,Try 阶段和 Confirm/Cancel 阶段之间是存在时间间隔的。在这个时间间隔内:

  • 数据处于一种“中间状态”(如“资金已冻结但未扣款”)。
  • 用户可能能看到这种中间状态(比如在银行APP里看到一部分钱被冻结了)。

所以,这种“中间状态可见”的特性,就违反了强一致性的定义。因此,从技术严格意义上讲,TCC 是最终一致性的。