分布式事务TCC

  • Post author:
  • Post category:其他


1.TCC事务其实是try-confirm-cancel的简称,将事务的步骤分为三步,属于柔性事务,因为2PC同步阻塞的缘故,就产生了效率高的TCC.

2.TCC可以解决跨库的数据一致性问题,常用于,电商库存扣减业务

  • Try操作作为一阶段,负责资源的检查和预留
  • Confirm操作作为二阶段提交操作,执行真正的业务
  • Cancel是预留资源的取消;

3.补偿性事务

在2PC中,资源会被一直的上锁,但是在TCC中不会一直上锁,TCC会预扣所需的资源,如果try过程成功,就完成扣减资源的过程,但是如果失败,就会通过事务日志,将预扣的资源补偿回去,达到最终一致的效果。

4.2PC和TCC的区别

  • 2PC是资源层面的事务,但是TCC是业务层是事务,是能感知到的
  • 2PC在进行事务的过程中,整个过程都会上锁,属于强一致性,但是TCC是补偿性事务,不会一直上锁,属于最终一致性。
  • 2PC因为会一直占用锁,所以是同步阻塞,性能较差。TCC不会占用锁,是异步阻塞,性能较好

5.注意事项

5.1允许空回滚

在TCC事务的过程中,如果出现网络波动,导致try请求的包丢失,则会造成超时异常,但是就算这样,TCC仍然会通过事务日志回滚到事务执行之前

5.2 防悬挂设置

在高并发请求中,网络拥挤等场景,都会造成try请求操作长时间未到达数据库,所以,会执行而简短的rollback操作,但是就在执行了rollback之后,try请求到达数据库,事务管理器收到了响应,造成了 rollback操作比try请求先执行的事情,所以,在执行 rollback操作之后要拒绝一切try操作。

5.3 幂等控制

无论是网络数据包重传,还是异常事务的补偿执行,都会导致TCC服务的Try、Confirm或者Cancel操作被重复执行;用户在实现TCC服务时,需要考虑幂等控制,即Try、Confirm、Cancel 执行次和执行多次的业务结果是一样的;



版权声明:本文为wang20010104原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。