zoukankan      html  css  js  c++  java
  • 分布式事务解决方案

    一、消息队列

    放到本地事务最后一步

    发送消息写到最后边

    一直重试,知道成功为止

     把方法分开

    先发送消息,后调用本地事务

    消息(事务消息) 不可消费

    本地成功后再把消息改成可消费消息

    本地事务失败把消息删掉

    2PC   两阶段提交

    二、AT-业务无侵入模式

    第二个事务提交前等待下wait

    1、首先拿到事务的控制权(封装数据源重新包装connection)

    2、TXManager    各个本地事务的管理者

    多个本地事务对应一个groupid

    一起提交一起回滚

    添加切面

    三、TCC(业务层面的回滚,不是技术框架的回滚,数据库不支持事务也可以)

    try comit cancel

    1.账户系统

    账户表

    uid,余额,  冻结金额(特殊字段)

    缺点:表的加字段,每个方法都得有try comit cancel,对接其他公司接口时,无法要求其他公司接口添加try comit cancel

    2.订单系统

    下一个订单

    try:冻结金额+100   余额不动

    comit  冻结金额-100  余额-100

    cacel 冻结金额-100

    四、saga

    减错了再加回去

    五、XA

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

    六、seata(阿里)

  • 相关阅读:
    amq笔记:记一个关于PooledConnectionFactory的问题
    ganglia笔记:rrd数据库
    ganglia笔记:rrds目录
    golang笔记:unsupported driver -> Scan pair: <nil> -> *string
    golang笔记:cookie
    golang笔记:net/smtp
    spring笔记
    Qt坑点汇总
    QT自定义控件系列(二) --- Loading加载动画控件
    Qt自定义控件系列(一) --- 圆形进度条
  • 原文地址:https://www.cnblogs.com/jentary/p/13884703.html
Copyright © 2011-2022 走看看