您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
如何理解TCC分布式事务?
分布式,事务,业务如何理解TCC分布式事务?
发布时间:2019-02-08加入收藏来源:互联网点击:
问题补充: TCC分布式事务处理的实现是怎么实现的。应该怎么理解TCC的TRYING、CONFIRMING、CANCELIING。幂等性又怎么处理?
回答于 2019-09-11 08:43:50
回答于 2019-09-11 08:43:50
公司刚好是分布式架构,对于分布式算是有一定经验,有幸探讨一下!
随着分布式架构的大行其道,微服务系统遍地开花,数据库也不得不采用分布式架构,这样的大型架构事务不同于常规事务(事务在一个内存中,不需要消息传递等),常常会引起数据不一致的业务问题,而解决的办法就是使用分布式事务!
在这就不讨论事务的基本概念了,也不区分本地事务,分布式事务的不同,只要清楚因为消息传递延迟,分布式架构中的单点故障等会引起数据不一致就行了!
分布式事务通常的解决方案有四种:
1,基于XA的协议的两阶段提交方案!(两个本地提交,一个协调者)
2,TCC事务控制(Try、Confirm、Cancel可算是三步吧)
3,基于消息的最终一致性事务方案!
4,GTS,阿里的分布式事务解决方案!
既然本文问得是TCC,那就来详细看下TCC究竟是啥玩意?
TCC:是一种分布式事务解决方案,一般操作分为try,confirm,cancel三步,即业务准备工作完成,确认业务提交,发现问题实现业务回滚!
事务发起的时候,业务方向事务协调器注册,启动事务,所有业务调用事务的try操作,完成阶段一,然后事务协调器根据业务操作的完成情况,判断执行是confirm或者cacel操作!
TCC将本地事务和联合调度结合起来,达到分布式事务的目的,实现数据的一致性!保证大数据量的快速提交!
当然,TCC也存在不足:
1,对应用侵入性大:用户需要在每个涉及事务的地方,自行实现try,confirm,cancel接口,开发复杂!
2,实现难度大:需要根据情况,做幂等性判断,按照不同的失败原因定制不同的回滚方案!
尽管如此,TCC作为一种性能良好的分布式事务解决方案,在很多大型互联网公司都有广泛的应用!
我们公司现在采用的是基于消息的分布式事务,开发难度低,但是幂等性,消息死亡等问题还是没有良好的解决方案!
总的来说分布式事务因为跨服务,跨应用,还有很大的数据安全和一致性问题,还是慎用啊!
还有三种分布式事务,改天再讲讲,有需要的朋友可以关注我,我们一块进步!
回答于 2019-09-11 08:43:50
"TCC是分布式事务实现的一种方式TRYING 阶段主要是对业务系统做检测及资源预留CONFIRMING 阶段主要是对业务系统做确认提交,TRYING阶段执行成功并开始执行CONFIRMING阶段时,默认CONFIRMING阶段是不会出错的。即:只要TRYING成功,CONFIRMING一定成功。CANCELING 阶段主要是在业务执行错误,需要回滚的状态下执行的业务取消,预留资源释放。而幂等性则是指业务方法调用一次与调用多次的执行返回结果是一样的。举个支付项目的例子:支付系统接收到会员的支付请求后,需要扣减会员账户余额、增加会员积分(暂时假设需要同步实现)增加商户账户余额再假设:会员系统、商户系统、积分系统是独立的三个子系统,无法通过传统的事务方式进行处理。TRYING阶段:我们需要做的就是会员资金账户的资金预留,即:冻结会员账户的金额(订单金额)CONFIRMING阶段:我们需要做的就是会员积分账户增加积分余额,商户账户增加账户余额CANCELING阶段:该阶段需要执行的就是解冻释放我们扣减的会员余额以上所有的操作需要满足幂等性,幂等性的实现方式可以是:1、通过唯一键值做处理,即每次调用的时候传入唯一键值,通过唯一键值判断业务是否被操作,如果已被操作,则不再重复操作2、通过状态机处理,给业务数据设置状态,通过业务状态判断是否需要重复执行
上一篇:用心理学怎么理解网络喷子?
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |