在线客服 关于我们 联系我们
凯发k8娱乐登录-凯发k8娱乐官网-凯发k8娱乐官网app
新闻动态
联系我们
销售热线:
Contact Hotline
15899999999
传真:

E-mail:

公司地址:
当前位置: 官网首页 > 新闻动态 > 公司新闻 >
什么是分布式事务以及有哪些解决方案?
  分布式事务-3pc原理图

  相对于2pc而言,3pc对于协调者和参与者都设置了超时时间,而2pc只有协调者才拥有超时时间机制。这个优化解决了,参与者在长时间无法与协调者节点通讯的情况下,无法释放资源的问题,因为参与者自身拥有超时机制会在超时后,自动进行本地commit从而进行释放资源。而这种机制也侧面降低了整个事务的阻塞时间和范围。但是仍然没有解决数据一致性问题,即在参与者收到precommit请求后等待最终指令,如果此时协调者无法与参与者正常通信,会导致参与者继续提交事务,造成数据不一致。

  tcc又称补偿事务。它实际上与2pc、3pc一样,都是分布式事务的一种实现方案而已。它分为三个操作:

  tcc事务的处理流程与2pc两阶段提交类似,不过2pc通常都是在db层面,而tcc本质上就是应用层面的2pc,需要通过业务逻辑来实现。它的优势在于,可以让应用自己定义数据库操作的粒度,使得降低锁冲突、提交吞吐量。

  不过对应用的侵入性非常强,业务逻辑的每个分支都需要实现try、confirm、cancel三个操作。

分布式事务-tcc原理图

  所谓的消息事务就是基于消息中间件的两阶段提交,本质上是中间件的一种特殊利用,他是将本地事务和发消息放在一个分布式事务里,保证要么本地操作成功并且对外发消息成功,要么两者都失败,开源的rocketmq就支持这一特性,具体原理如下:

分布式事务-消息事务

步骤如下:

1、:服务a向消息中间件发送一条预备消息。

2、消息中间件保存预备消息并返回成功。

3、服务a执行本地事务。

4、服务a发送提交消息给消息中间件,服务b接收到消息之后执行本地事务。

  基于消息中间件的两阶段提交往往用在高并发场景下,将一个分布式事务拆成一个消息事务+服务b的本地操作,其中服务b的操作由消息驱动,只要消息事务成功,那么服务a一定成功,消息也一定发出来了,这时候服务b会收到消息去执行本地操作,如果本地操作失败,消息会重投,直到服务b操作成功,这样就变相地实现了a与b的分布式事务。

以上几个步骤可能存在异常情况,现在对其进行分析:

步骤一出错:则整个事务失败,不会执行服务a的本地操作。

步骤二出错:则整个事务失败,不会执行服务a的本地操作。

步骤三出错:需要做回滚预备消息,由服务a实现一个消息中间件的回调接口,消息中间件会不断执行回调接口,检查服务a事务执行是否执行成功,如果失败则回滚预备消息。

步骤四出错:这个时候服务a的本地事务是成功的,但是消息中间件不需要回滚,其实通过回调接口,消息中间件能够检查到服务a执行成功了,这个时候其实不需要服务发提交消息了,消息中间件可以自己对消息进行提交,从而完成整个消息事务。

参考文章:

1、

2、

3、

在线客服1
在线客服2
关注官方微信
返回顶部