分布式事务方案

XA方案/两阶段提交方案

这个可以看我之前发的分布式事务之2PC和3PC
2PC主要使用场景是一个系统中有多个数据源,这多个数据源之间需要事务去保证数据的一致性,具体方案就是JTA 使用JTA实现多数据源的事务管理。 但开发中不建议直接操作别的数据库,多数据源很多都是为了查询数据,不会设计到增删改数据,所以不常用。

TCC方案

try - confirm - cancel 拿银行转账举例子:

  1. try:资金校验、冻结

  2. confirm:转账

  3. cancel:如果转账失败手动补偿/恢复数据

适用场景,对一致性要求极高

本地消息表方案

image
  1. A系统先插入业务表处理A系统中的业务逻辑,再插入消息表,状态是待确认,在zk中对orderId=xx的node进行监听

  2. 通过mq发消息给B系统

  3. B系统先插入消息表,并且防止重复消费,必须保证幂等性

  4. B系统进行业务操作,如果成功,修改消息表中的值,修改zk中的值,A系统监听到后,修改消息表中的值

  5. B系统如果失败了,就不会修改消息表,A系统会轮询A系统的消息表,超时没有成功的会再次发送,超时时间和重试次数根据自己业务情况来定

缺点:大量依赖消息表,高并发场景下不适用

可靠消息最终一致性方案

image

为了高并发,舍弃消息表,基于MQ来实现事务,阿里的RocketMQ就支持事务

最大努力通知方案

image

系统A执行完会发送消息到MQ,MQ通知最大努力通知系统,然后最大努力通知系统会记录这个消息,发给系统B,直到成功,或者到达最大重试次数。

总结

尽量避免分布式事务。

你可能感兴趣的:(分布式事务方案)