返回

分布式事务

数据库全局事物,两段式提交,三段式提交 TCC AT

20200526140940829

两段式提交

(2 Phase Commit,2PC)

准备阶段

重操作

提交阶段

轻操作

三段式提交

(3 Phase Commit,3PC)

  • 在事务需要回滚的场景中:三段式的性能通常是要比两段式好很多的。

  • 但在事务能够正常提交的场景中:两者的性能都依然很差,甚至三段式因为多了一次询问,还要稍微更差一些。

CanCommit

轻操作

PreCommit

重操作

CanCommit

轻操作

TCC事务

业务侵入性强

加入业务的中间字段

Try

confirm

冥等

cancel

AT事务

反向sql

MQ消息最终一致性解决方案

事务消息

由于传统的处理方式无法解决消息生成者本地事务处理成功消息发送成功两者的一致性问题,因此事务消息就诞生了,它实现了消息生成者本地事务与消息发送的原子性,保证了消息生成者本地事务处理成功与消息发送成功的最终一致性问题。

image-20211020111849317

https://www.jianshu.com/p/eb571e4065ec

RocketMQ支持事务消息

  • 生产者先发消息,再执行业务操作: 如果反过来,可能业务执行成功就宕机,消息没发出,导致不一致
  • 事务消息是针对生产端而言的,而消费端,消费端的一致性是通过MQ的重试机制来完成的:消息消费失败的话,MQ自己会负责重推消息,直到消费成功(消费者保证幂等性)。

RocketMQ事务消息原理

MQ存储了待发送的消息,但是MQ无法感知到上游处理的最终结果。对于RocketMQ而言,它的解决方案非常的简单,就是其内部实现会有一个定时任务,去轮训状态为待发送的消息,然后给producer发送check请求,而producer必须实现一个check监听器,监听器的内容通常就是去检查与之对应的本地事务是否成功(一般就是查询DB),如果成功了,则MQ会将消息设置为可发送,否则就删除消息。

Built with Hugo
Theme Stack designed by Jimmy
本站访问量:   您是本站第 位访问者