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

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

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

消息一致性方案

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

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

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

消息最终一致性方案

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

采用消息中间件

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

  1. 消息的发送者端 (生产者):发送者端完成操作后一定能将消息成功发送到消息系统
  2. 消息的接收者端(消费者):消费者端仅且能够从消息系统成功消费一次消息。
采用支持事务的消息中间件

阿里巴巴的RocketMQ中间件就支持一种事务消息机制,能够确保本地操作和发送消息达到本地事务一样的效果:

  • 第一阶段,RocketMQ在执行本地事务之前,会先发送一个Prepared消息,并且会持有这个消息的地址
  • 第二阶段,执行本地事物操作
  • 第三阶段,确认消息发送,通过第一阶段拿到的地址去访问消息,并修改状态,如果本地事务成功,则修改状态为已提交,否则修改状态为已回滚
保证消费者不重复消费消息:
  1. 消费端处理消息的业务逻辑保持幂等性
  2. 保存消费者消费的状态即保证每条消息都有唯一编号,并且保证消息处理成功后一定能写入到一张去重日志表;

RocketMQ、Kafka都不保证消息不重复,如果你的业务需要保证严格的不重复消息,那么就需要在我们的业务端保存消费状态,进行去重。

解决消费者消费失败:

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

TCC型分布式事务方案

转载于:https://my.oschina.net/u/1000241/blog/887322

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值