分布式之TCC,2PC

1.是什么?

     TCC和2PC都是分布式事务的一种实现方式,2者不同在于,TCC在业务层实现,而2PC在数据库中实现,例如innodb的XA。

 

2.为什么需要?

     如果我们用到了分布式的架构,那么通常就是一个服务一个数据库,我们都知道ACID在一个库中实现并不难,但是如果我们一个事务涉及到了多个数据库,例如下单这一过程,涉及到了账户数据库,库存数据库,怎样解决账户和库存数据库能够同时进行修改或者失败呢,这就是TCC和2PC解决的问题。

 

3.怎么做?

    不管是2PC还是TTC,都可分为3个操作,预留,确认,回滚。

    2PC:

            预留:首先向每个要操作的数据库发出预留请求,其实相当于一个加锁的操作,要注意一点,一旦预留成功,那么这个事务就必须成功,无论是服务器挂掉了还是后来提交失败了,一定要成功为止。

            提交:每一个事务一一提交。

            回滚:其中一个事务预留失败,集体回滚。

   TCC:其实和2PC差不多,只是在业务层上面实现,但是TCC更加灵活,为什么说他更加灵活呢?2PC从数据库的层面上加上了锁,所以在分布式事务完成之前,其他业务是没有可能读和写的,TCC其实不是加锁操作,更多的是封锁对该字段的读或者写操作,例如现在商品中库存这一字段,现在因为某一用户要购买该商品,进入了预留阶段,那么写操作肯定是不允许的,但是读操作可以吗?在实际中肯定是可以了,因为在一个商城中不可能说因为其中一个人在购买商品,在走购物流程,其他人对这个这个商品还有多少看不见,所以在这个流程的设计中,我们可以关闭写操作,而开放读操作(如果读和写都在同一字段的话),还要注意一点,一旦我们对某一个服务实现了TCC,那么所有的读写操作都应该走服务所提供的接口,因为一旦其他业务可以直接读写该服务所建立的数据库,那么TCC就失去了它的意义。         

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值