强烈推荐一个大神的人工智能的教程:http://www.captainai.net/zhanghan

文章目录

  • 1.分布式事务产生的背景
  • 2.X/OpenDTP事务模型
  • 3.Mysql事务处理过程
  • 4. 2PC协议
  • 5.3PC协议
  • 6.分布式事务的实现
  • 7.MQ实现最终一致性
    • 7.1消息重复消费解决方案
  • 8.LCN实现

1.分布式事务产生的背景

根据业务需求需要对业务进行拆分,例如将一个大应用拆分成用户模块,订单模块,商品模块,每个模块都有自己的数据库,在用户购买商品的时候需要扣减商品模块库存,在订单模块添加订单数据,这时候需要保证这两个数据库操作在同一个事务中完成,因此就出现了分布式事务

2.X/OpenDTP事务模型

概念: X/Open是一个组织机构,定义了一套分布式事务标准,定义了规范的API接口
角色:

3.Mysql事务处理过程

3.1 记录redo日志和undo日志,确保日志在磁盘上的持久化
3.2 更新数据记录
3.3 提交事务,redo写入commit记录

4. 2PC协议

两阶段提交

  • 阶段一:提交事务请求
  1. TM向所有的AP发送事务内容,询问是否可以执行事务的提交操作,并等待各个AP的响应
  2. 执行事务
    各个AP节点执行事务操作,将undo和redo信息记录到事务日志中,尽量把提交过程中所消耗时间的操作和准备都提前完成后确保后续
    事务提交的成功率
  3. 各个AP向TM反馈事务询问的响应
    各个AP成功执行了事务操作,那么反馈给TM yes的response;如果AP没有成功执行事务,就反馈TM no的response
  • 阶段二: 执行事务提交
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0OvtC2hM-1686406560778)(http://wx3.sinaimg.cn/mw690/0060lm7Tly1ftu0g3llldj30x80gc40y.jpg)]
  • 存在的问题
  1. 数据一致性问题:当AP和TM都宕机了,新选出来的TM不知道宕机的AP到底做了什么操作,如果根据剩下的两个存活的AP的操作(commit或者abort)作为判断,则很可能会因为宕机的操作和存活的操作不一致导致数据不一致
  2. 同步阻塞:第二阶段中,如果所有的AP都宕机了.则TM只能阻塞等待AP的返回

5.3PC协议

  • 阶段一:canCommit:TM请求AP是否可以commit
  • 阶段二:preCommit
  • 阶段三:doCommit

6.分布式事务的实现

  • atomikos

7.MQ实现最终一致性

7.1消息重复消费解决方案

  • 幂等校验:在消费端新建一张表,使用唯一索引,消费数据前往数据表插入一条数据,如果插入成功则证明是第一次消费,如果插入失败则证明已经不是第一次消费
  • 日志表来判断,或者通过状态锁来判断,消费端创建一个日志表,消费时插入一个id和状态,消费成功后去更新状态
    最终一致性模式:
  • 查询模式
  • 补偿模式:A调用B,失败后自动重试,回滚原有操作,若不能自动重试则通知运营,人工补偿(如人工对账),或通知技术,监控,预警
  • TCC事务模型
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J1HIEYAw-1686406560779)(http://wx4.sinaimg.cn/mw690/0060lm7Tly1ftuc8r23whj30l40dptea.jpg)]

8.LCN实现

  • 服务消费方加注解 @TxcTransaction(timeout = 1000 * 10)
  • 服务提供方获取全局事务ID,并绑定到上下文
public int updateStock(OrderDO orderDO) {//获取全局事务ID,并绑定到上下文String xid = RpcContext.getContext().getAttachment("xid");TxcContext.bind(xid,null);//执行自己的业务逻辑int ret = jdbcTemplate.update("update stock set amount = amount - ? where product_id = ?",new Object[]{orderDO.getNumber(), orderDO.getProductId()});TxcContext.unbind();return ret;}

分布式事务几种实现方式相关推荐

  1. 思科新版EI CCIE 企业网软定义中的VxLAN分布式网关两种部署方式

    思科新版EI CCIE 企业网软定义中的VxLAN分布式网关两种部署方式VXLAN集中式网关部署的不足:第一,同一二层网关下跨子网的数据中心三层流量都需要经过集中三层网关转发.第二,由于采用了集中三层 ...

  2. seata 如何开启tcc事物_微服务分布式事务4种解决方案实战

    分布式事务 分布式事务是指事务的参与者,支持事务的服务器,资源服务器分别位于分布式系统的不同节点之上,通常一个分布式 事物中会涉及到对多个数据源或业务系统的操作. 典型的分布式事务场景:跨银行转操作就 ...

  3. 同事操作两个数据源保持事务一致_微服务分布式事务4种解决方案实战

    分布式事务 分布式事务是指事务的参与者,支持事务的服务器,资源服务器分别位于分布式系统的不同节点之上,通常一个分布式 事物中会涉及到对多个数据源或业务系统的操作. 典型的分布式事务场景:跨银行转操作就 ...

  4. 分布式事务的六种处理方式

    分布式事务的六种解决方案 事务 严格意义来说事务实现应该是具备原子性.一致性.隔离性和持久性,简称ACID. 原子性(Atomicity),可以理解为一个事务内的所有操作要么都执行,要么就都不执行. ...

  5. 分布式事务七种解决方案,最后一种经典了!

    随着业务的快速发展.业务复杂度越来越高,几乎每个公司的系统都会从单体走向分布式,特别是转向微服务架构.随之而来就必然遇到分布式事务这个难题,这篇文章总结了分布式事务最经典的解决方案,分享给大家. ◆  ...

  6. 分布式事务几种解决方案

    1.2PC/XA方案 该方案基于两阶段提交协议,因此也叫做两阶段提交方案.在该分布式系统中,其中 需要一个系统担任协调器的角色,其他系统担任参与者的角色.主要分为Commit-request阶段和Co ...

  7. 分布式事务6种解决方案(超详细)

    文章目录 分布式事务六种解决方案 前言 ACID 分布式事务 2PC(二阶段提交)同步阻塞协议 准备阶段 提交阶段 协调者故障分析(协调者是一个单点,存在单点故障问题) 3PC (三阶段提交) 准备阶 ...

  8. redis set 超时_redis分布式锁3种实现方式对比分析总结

    我在这篇文章提到了分布式锁,但没有展开来讲,抛砖引玉,今天就来说说高并发服务编程中的redis分布式锁. 这里罗列出3种redis实现的分布式锁,并分别对比说明各自特点. Redis单实例分布式锁 实 ...

  9. 分布式事务(三种解决方案,各个方案优缺点等)

    什么是分布式事务 指事务的参与者.⽀持事务的服务器.资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上. 简单的说,就是⼀次⼤的操作由不同的⼩操作组成,这些⼩的操作分布在不同的服务器上,且 ...

最新文章

  1. gunicorn源码分析
  2. 如果面试官问你 JVM,额外回答逃逸分析技术会让你加分!
  3. swoole 内存Memory
  4. Python 分析天气,告诉你中秋应该去哪里
  5. java后台两个表关联查询_简单界面+JAVA后台+数据库实现页面对数据库的两张关联表操作...
  6. 大数据入门第二十天——scala入门(二)scala基础02
  7. 服务器新手装备无限拿指令,【新手指南】服务器指令大全
  8. zabbix yum安装
  9. 等比例缩放图片-opencv
  10. 集体智慧编程(5)——优化
  11. matlab数据导入 spss,【excel数据导入系统】excel数据导入_excel数据导入spss-系统城...
  12. 热点综述 | 空间组学技术如何全面解码肿瘤微环境
  13. 开发管理---项目的范围、时间与成本
  14. 数据库系统概论中国人民大学MOOC第一章数据库系统知识点总结(2) 层次结构- 网状结构-关系结构数据的完整性约束条件单向链接 双向链接 环状链接 向首链接
  15. iphone4s 关于大于400M的视频无法拷贝的问题
  16. 第四章第十节数据资产盘点-形成数据资产目录
  17. 知乎之问和小雷之解: 现在的年轻人为什么都那么着急?
  18. Axure8原型设计实战案例:如何设计用户管理,手把手带你学习
  19. 网站页面代码优化的方法有哪些呢?
  20. PayPal开发之IPN的使用

热门文章

  1. 中文技术文档的规范-标点符号
  2. 偶尔勤奋的肥猫——OS时间片轮转调度基本算法
  3. PHP各种各样的面试题目整理
  4. 国内CRM系统排行统计
  5. MyEclipse破解 注册机“System id无法生成” 解决方法:出现com.jniwrapper.util.ProcessorInfo
  6. The underlying provider failed on Open错误
  7. C# 制作类似魔塔小游戏(菜鸟版)
  8. 解魔方机器人系列(二)步进电机控制
  9. PLC远程监控助力食品废水处理智能化管理
  10. 华为网络设备-三层Eth-trunk配置