Skip to content

面试速答(先看这里)

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

60秒标准回答:

TCC 的过程是

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

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

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **要点1:**TCC 方案本身不提供强一致性,它提供的是最终一致性!
  • **要点2:**通过上面的TCC的流程我们可以知道,Try 阶段和 Confirm/Cancel 阶段之间是存在时间间隔的。
  • **要点3:**所以,这种“中间状态可见”的特性,就违反了强一致性的定义。

**记忆锚点:**TCC → Try → Confirm → Cancel → TCC是强一致性还是最终一致性 → 尽可能确保数据的一致性

关键取舍:

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

易错提醒:

  • Cancel阶段 :如果任何Try操作失败,或者确认过程中遇到问题,执行Cancel操作来回滚所有的操作,释放锁定的资源。

加分表达:

  • Confirm阶段 :如果所有的Try操作成功,那么执行Confirm操作,最终提交事务。

追问准备:

  • 围绕「TCC」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「Try」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「Confirm」:底层原理是什么?使用时有哪些边界和常见坑?
  • 如果线上出现异常,你会如何定位、验证并规避?

典型回答 ​

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

打开文档:✅什么是TCC,和2PC有什么区别?

TCC 的过程是:

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

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

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

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

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

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

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

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