• 分布式事务解决方案


    1.基于XA协议的两阶段提交(2PC)

    XA协议:XA是一个分布式事务协议。XA中大致分为两部分:事务管理器本地资源管理器。其中本地资源管理器往往由数据库实现,比如Oracle、DB2这些商业数据库都实现了XA接口,而事务管理器作为全局的调度者,负责各个本地资源的提交和回滚。

    ①概念:二阶段提交2PCTwo phase Commit是指,在分布式系统里,为了保证所有节点在进行事务提交时保持一致性的一种算法。

    ②背景:在分布式系统里,每个节点都可以知晓自己操作的成功或者失败,却无法知道其他节点操作的成功或失败。

    当一个事务跨多个节点时,为了保持事务的原子性与一致性,需要引入一个协调者Coordinator来统一掌控所有参与者Participant的操作结果,并指示它们是否要把操作结果进行真正的提交(commit)或者回滚(rollback)。

    ③思路:2PC顾名思义分为两个阶段,其实施思路可概括为:

    (1)投票阶段(voting phase:参与者将操作结果通知协调者;

    (2)提交阶段(commit phase:收到参与者的通知后,协调者再向参与者发出通知,根据反馈情况决定各参与者是否要提交还是回滚;

    ④缺陷:算法执行过程中,所有节点都处于阻塞状态,所有节点所持有的资源(例如数据库数据,本地文件等)都处于封锁状态。

    2. 代码补偿事务(TCC)

    TCC的作用主要是解决跨服务调用场景下的分布式事务问题

    ①业务场景举例

    操作方法

    含义

    Try

    完成所有业务检查(一致性),预留业务资源(准隔离性) 回顾上面航班预定案例的阶段1,机票就是业务资源,所有的资源提供者(航空公司)预留都成功,try阶段才算成功

    Confirm

    确认执行业务操作,不做任何业务检查, 只使用Try阶段预留的业务资源。回顾上面航班预定案例的阶段2,美团APP确认两个航空公司机票都预留成功,因此向两个航空公司分别发送确认购买的请求。

    Cancel

    取消Try阶段预留的业务资源。回顾上面航班预定案例的阶段2,如果某个业务方的业务资源没有预留成功,则取消所有业务资源预留请求。

    ②TCC两阶段提交与XA两阶段提交的区别

    a.XA是资源层面的分布式事务,强一致性,在两阶段提交的整个过程中,一直会持有资源的锁

    b.TCC是业务层面的分布式事务,最终一致性,不会一直持有资源的锁。

    c.其核心在于将业务分为两个操作步骤完成。不依赖 RM 对分布式事务的支持,而是通过对业务逻辑的分解来实现分布式事务。

    3.本地消息表(异步确保)- 事务最终一致性

    本地消息表这种方案实现了最终一致性,需要在业务系统里增加消息表,业务逻辑中多一次插入的 DB 操作,所以性能会有损耗,而且最终一致性的间隔主要由定时任务的间隔时间决定。

    ②优点: 一种非常经典的实现,避免了分布式事务,实现了最终一致性。

    ③缺点: 消息表会耦合到业务系统中,如果没有封装好的解决方案,会有很多杂活需要处理。

     

  • 相关阅读:
    【数据结构】链表的大概认识及单链表的实现
    Mac/m1终端配置自动登录ssh服务器等后续操作
    零时科技 || Victor the Fortune攻击事件分析
    Metabase学习教程:入门-5
    Codeforces Round #812 (Div. 2)补题(A-E)
    【C++STL基础入门】list的运算符重载和关于list的算法
    java计算机毕业设计网上书城网站源代码+数据库+系统+lw文档
    mac的node版本安装及升降级
    0109连续函数的运算和初等函数的连续性-函数与极限-高等数学
    C#使用SendMessage进行进程间通讯
  • 原文地址:https://blog.csdn.net/kobe_IT/article/details/128077303