• 分布式事物-本地消息表


    什么是本地消息表

    本地消息表的方案最初是由 eBay 提出,核心思路是将分布式事务拆分成本地事务进行处理。

    方案通过在事务主动发起方额外新建事务消息表,事务发起方处理业务和记录事务消息在本地事务中完成,轮询事务消息表的数据发送事务消息,事务被动方基于消息中间件消费事务消息表中的事务。

    这样设计可以避免”业务处理成功 + 事务消息发送失败",或"业务处理失败 + 事务消息发送成功"的棘手情况出现,保证 2 个系统事务的数据一致性。

    本地消息表处理流程

    以电商用户注册为例

                       1.创建用户(用户服务)

                       2.用户赠送新人优惠券(支付服务)

    用户服务

               1.开启事物

               2.创建用户相关的业务数据 落库

               3.生成一条赠送优惠券的业务消息(状态发送中)

               4.提交事物

               5.发送消息(也可以依赖mq 直接调用赠送优惠券的服务)

               6.如果发送成功则将消息数据改为发送成功

    有可能发送消息失败 

                1.新增一个定时任务扫描发送中的事物 进行补偿(所以消息接收方要做幂等)

    优点

    • 从应用设计开发的角度实现了消息数据的可靠性,消息数据的可靠性不依赖于消息中间件,弱化了对 MQ 中间件特性(事物特性)的依赖。
    • 方案轻量,容易实现。保证最终一致性

    缺点

     1)  本地消息表与业务耦合在一起,难于做成通用性,不可独立伸缩。

     2)本地消息表是基于数据库来做的,而数据库是要读写磁盘IO的,因此在高并发下是有性能瓶颈的 

  • 相关阅读:
    ArrayList源码剖析
    Java集合框架
    Java数据结构和算法(十五)——无权无向图
    Java数据结构和算法(十四)——堆
    Java数据结构和算法(十三)——哈希表
    Java数据结构和算法(十二)——2-3-4树
    Java数据结构和算法(十一)——红黑树
    Java数据结构和算法(十)——二叉树
    Java数据结构和算法(九)——高级排序
    [刷题] Leetcode算法 (2020-2-27)
  • 原文地址:https://www.cnblogs.com/LQBlog/p/14783896.html
Copyright © 2020-2023  润新知