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

典型回答

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

TCC 的过程是:

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

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


在理想情况下,如果所有参与组件都能正确执行其Try、Confirm和Cancel逻辑,并且系统之间的通信是可靠的,那么TCC是可以提供强一致性的。


但是,如果你想让TCC需要所有参与的服务或组件必须能够正确处理Try、Confirm和Cancel各阶段的逻辑。在分布式系统中,因为网络延迟、服务中断或其他外部因素登的影响,这几乎是不可能的。

所以,因为在调用 confirm 或 cancel 的时候也可能因为某种原因(比如网络延迟)导致调用失败,就需要通过重试等方式来解决,这个过程就会出现短暂的不一致。最终再通过重试、人工介入等手段来保证他能达到最终一致性。

✅TCC中,Confirm或者Cancel失败了怎么办?

所以,TCC模式的设计初衷是提供强一致性的。然而,在实际操作中,因为存在着各种各样的实际问题,如网络延迟等,这就使得它不得不降级为最终一致性。**因此,虽然TCC旨在实现强一致性,但在某些实际应用场景中,它可能表现为介于强一致性和最终一致性之间。

原文: https://www.yuque.com/hollis666/xkm7k3/aedtll1aq21ahiwf