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

典型回答

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

关于TCC请看上面的链接。关于TCC,很多人会比较关心他在执行过程中的失败问题。

Confirm失败怎么办?

在TCC模式中,如果Confirm阶段失败,这通常意味着在尝试提交事务的过程中遇到了问题。处理这种情况需要根据特定的失败场景和系统设计来确定最合适的策略。以下是几种常见的处理方法:

1. 重试(用的最多)

一种常见的策略是重试Confirm操作。这通常适用于由于临时问题(如网络延迟、服务短暂不可用等)导致的失败。在重试之前,可以设定一个延迟或等待一段时间,然后再次尝试Confirm操作。通常,会设置重试次数的上限,以避免无限重试。

这个方案用的是最多的,之所以可以这么做,主要是因为在Try的过程中已经锁定了资源,那么在Confirm的时候,大概率是可以成功,而如果Confirm失败就执行Cancel,就会导致可能只是因为网络原因导致的时候就使得整个事务都Cancel了,而且这时候如果Cancel再失败怎么办呢?整个方案就会变得更加复杂了。

2. 执行Cancel操作

如果重试Confirm操作依然失败,或者系统确定Confirm无法成功,下一步是执行Cancel操作。Cancel阶段的目的是撤销在Try阶段预留的所有资源,确保系统回到事务开始前的状态。这是一种典型的回滚操作,用于处理事务失败的情况。

3. 日志记录和异常监控

在Confirm失败的情况下,重要的是记录详细的错误日志和监控异常。这可以帮助系统管理员或开发人员分析为什么Confirm操作失败,并采取相应的改进措施。此外,日志可以帮助在事后定位问题的根源。

4. 人工干预

在某些复杂或重要的事务中,如果自动化的重试和回滚失败,可能需要人工干预。这涉及到系统管理员或运维团队直接介入,手动处理故障和确保系统的一致性与稳定性。

Cancel失败怎么办?

在TCC中,cancel失败了怎么办呢?

一般有以下几种处理手段,和Confirm也差不多,无非就是报警、重试、人工干预。

  1. 记录日志&发送报警:将错误信息记录下来,方便后续分析和处理。并及时通知相关人员进行处理。
  2. 自动重试:在一定程度上,可以通过自动重试的方式尝试多次执行Cancel操作,直到成功为止。
  3. 人工干预:如果重试多次还是不成功, 可以报警,然后进行人工干预,可以尝试手动执行Cancel操作或者进行数据修复等。

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