互联网通用架构技术----分布式事务解决方案

经常使用的分布式事务解决方案

  • 消息发送一致性(可靠消息的前提保障);
  • 消息一致性的异常处理流程;
  • 常规MQ队列消息的处理流程和特色;
  • 消息重复发送问题及业务接口的幂等性设计;
  • 消息子系统消息确认;

消息一致性方案

  • 本地消息服务设计;
  • 独立消息服务设计;

本地消息服务设计:

考虑将一个分布式事务拆分为两个独立的自事务,每一个子事务都有一张本地消息表。分布式

先记录本地消息,调用远程接口,操做本地消息表修改状态。这个过程不涉及分布式操做。设计

消息最终一致性方案

创建定时服务对比建立表及结果表,进行补偿操做。日志

采用消息中间件

当采用消息中间件时,消息的可靠性体如今两个方面:中间件

  1. 消息的发送者端 (生产者):发送者端完成操做后必定能将消息成功发送到消息系统
  2. 消息的接收者端(消费者):消费者端仅且可以从消息系统成功消费一次消息。

采用支持事务的消息中间件

阿里巴巴的RocketMQ中间件就支持一种事务消息机制,可以确保本地操做和发送消息达到本地事务同样的效果:接口

  • 第一阶段,RocketMQ在执行本地事务以前,会先发送一个Prepared消息,而且会持有这个消息的地址
  • 第二阶段,执行本地事物操做
  • 第三阶段,确认消息发送,经过第一阶段拿到的地址去访问消息,并修改状态,若是本地事务成功,则修改状态为已提交,不然修改状态为已回滚

保证消费者不重复消费消息:

  1. 消费端处理消息的业务逻辑保持幂等性
  2. 保存消费者消费的状态即保证每条消息都有惟一编号,而且保证消息处理成功后必定能写入到一张去重日志表;

RocketMQ、Kafka都不保证消息不重复,若是你的业务须要保证严格的不重复消息,那么就须要在咱们的业务端保存消费状态,进行去重。队列

解决消费者消费失败:

解决消费失败:报警系统+人工处理事务

TCC型分布式事务方案

相关文章
相关标签/搜索