35 | 分布式事务:使用 Nacos+Seata 实现 TCC 补偿模式
TCC 事务模型
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了使用Nacos和Seata实现TCC补偿模式的分布式事务。作者首先生动地解释了TCC事务模型的三个阶段:Try、Confirm和Cancel,并通过考研占座的例子阐述了TCC的工作流程。随后,详细介绍了TCC的实现方式,包括注册TCC接口和编写三个阶段的具体逻辑。文章还涵盖了TCC空回滚和倒悬的处理方法,以及对幂等性的重要性进行了强调。总体而言,TCC相比AT而言,代码开发量要大大增加,但换取了事务的高度可控性。文章以实际代码和生动的比喻深入浅出地介绍了TCC的实现方式,为读者提供了一种落地TCC案例的实践经验。文章内容丰富,对于想要深入了解分布式事务的读者来说是一篇非常有价值的文章。
《Spring Cloud 微服务项目实战》,新⼈⾸单¥59
全部留言(7)
- 最新
- 精选
- 奔跑的蚂蚁对于tcc 和 at 如果涉及到分布式事务 小公司 和 团队人数少的公司选择哪个好呢?还有别的更简单的方法吗
作者回复: 小公司,小团队,可千万别上TCC,除非跟这家老板有仇。 更简单的方法,就是自建本地事务表+跑批job补偿,短链路用事务型消息也可以
2022-03-04213 - 奔跑的蚂蚁老师能讲下 微服务的 后端接口 版本升级怎么控制的嘛,多个版本兼容怎么做的呢?是通过网关转发到不同的服务上吗。
作者回复: 如果是用dubbo或者HSF的话,其实版本控制内置version属性就可以很好解决,但是如果是open feign这类对版本控制支持的并不咋样的组件,那我们一般就是采取/v1/v2这种path来区分。比如手机app,老版本新版本要同时支持,但业务差别很大,那么就新app用v2,老app用v1,直到老app强制更新后下线v1
2022-03-045 - 西门吹牛之前看过Seata文档,看了老师的文章后,发现理解更深了,问个问题,关于AT隔离性问题,默认是读提交,这是因为全局事务中,每个分支事务都是直接提交的,所以针对全局事务来说,是需要读到其他事物中部分分支已经提交的事务吗?
作者回复: 如果是串行执行的分布式事务,比如A->B->C,当执行到C的时候,A和B可以认为已经完成了Commit操作,所以C如果去捞数据的话,那么读到的就是AB步骤执行过后的数据。 另外针对全局事务来说,每个分支事务完成事务提交后会上报TC完成状态。
2022-06-021 - peter请教老师几个问题: Q1:接口类指向是什么意思? 文中有一句话“将 CouponTemplateServiceImpl 的接口类指向刚定义好的 CouponTemplateServiceTCC 方法”,怎么指向的? Q2:阿里这种级别的公司,其入口是怎么做的? 网站最外面的入口,是怎么实现的?现有的外部网关,比如F5、Nginx、LVS等,处理速度都是有限的,对于阿里这种规模的公司,肯定是处理不过来的。那怎么解决这个问题? Q3:tomcat连接数与CPU核数的矛盾问题。 tomcat服务器一般能够支持500个连接,好像最大支持1000个连接;一个连接一个线程,那就是500个线程。但一般服务器的CPU核数也就是10个左右。一般的规律是:线程的数量一般是核数的2倍,也就是20个。20个和500个不矛盾吗?
作者回复: 1. implements实现接口 2. 当年通过mtop来做,自研魔改黑科技。大厂一般都用各种自研产品 3. 我对tomcat调优并不精通,但是看这个问题好像出自面试宝典
2022-03-0441 - GeekJohn要是新增操作,try阶段如何去锁定资源呢?那时数据库还没有生成记录。
作者回复: Try阶段要结合具体业务场景看怎么锁定资源,有的时候是插入一条init状态的数据,到confirm阶段再改状态成为正式生效数据;有的是在日志表里通过幂等性ID来占坑锁定资源。需要结合具体要实现的业务来决定
2023-09-26归属地:日本 - 天天有吃的这个tcc的步骤怎么感觉跟2pc的一模一样啊?这两者有什么区别吗2023-11-09归属地:广东
- Geek_5c44aa老师问个问题:使用Seata的时候,是否必须用Nacos作为微服务的注册中心?2023-10-21归属地:山东1