1.关于关于 DTM

DTM 是一款基于 Go 语言实现的开源分布式事务管理器,提供跨语言,跨存储引擎组合事务的强大功能。DTM 优雅的解决了幂等、空补偿、悬挂等分布式事务难题,也提供了简单易用、高性能、易水平扩展的分布式事务解决方案

2.安装

通过 Composer 可以非常方便的安装 dtm-client

composer require dtm/dtm-client

使用时别忘了启动 DTM Server

TCC 模式 (预执行)

TCC 模式是一种非常流行的柔性事务解决方案,由 Try-Confirm-Cancel 三个单词的首字母缩写分别组成 TCC 的概念,最早是由 Pat Helland 于 2007 年发表的一篇名为《Life beyond Distributed Transactions:an Apostate’s Opinion》的论文中提出。
TCC 的 3 个阶段
Try 阶段:尝试执行,完成所有业务检查(一致性), 预留必须业务资源(准隔离性)
Confirm 阶段:如果所有分支的 Try 都成功了,则走到 Confirm 阶段。Confirm 真正执行业务,不作任何业务检查,只使用 Try 阶段预留的业务资源
Cancel 阶段:如果所有分支的 Try 有一个失败了,则走到 Cancel 阶段。Cancel 释放 Try 阶段预留的业务资源。

如果我们要进行一个类似于银行跨行转账的业务,转出(TransOut)和转入(TransIn)分别在不同的微服务里,一个成功完成的 TCC 事务典型的时序图如下:

Saga 模式(补偿机制)

Saga 模式是分布式事务领域最有名气的解决方案之一,也非常流行于各大系统中,最初出现在 1987 年 由 Hector Garcaa-Molrna & Kenneth Salem 发表的论文 SAGAS 里。

Saga 是一种最终一致性事务,也是一种柔性事务,又被叫做 长时间运行的事务(Long-running-transaction),Saga 是由一系列的本地事务构成。每一个本地事务在更新完数据库之后,会发布一条消息或者一个事件来触发 Saga 全局事务中的下一个本地事务的执行。如果一个本地事务因为某些业务规则无法满足而失败,Saga 会执行在这个失败的事务之前成功提交的所有事务的补偿操作。所以 Saga 模式在对比 TCC 模式时,因缺少了资源预留的步骤,往往在实现回滚逻辑时会变得更麻烦。
Saga 子事务拆分
比如我们要进行一个类似于银行跨行转账的业务,将 A 账户中的 30 元转到 B 账户,根据 Saga 事务的原理,我们将整个全局事务,拆分为以下服务:

转出(TransOut)服务,这里将会进行操作 A 账户扣减 30 元转出补偿(TransOutCompensate)服务,回滚上面的转出操作,即 A 账户增加 30 元转入(TransIn)服务,这里将会进行 B 账户增加 30 元转出补偿(TransInCompensate)服务,回滚上面的转入操作,即 B 账户减少 30 元
整个事务的逻辑是:

执行转出成功 => 执行转入成功 => 全局事务完成

如果在中间发生错误,例如转入 B 账户发生错误,则会调用已执行分支的补偿操作,即:

执行转出成功 => 执行转入失败 => 执行转入补偿成功 => 执行转出补偿成功 => 全局事务回滚完成

下面是一个成功完成的 SAGA 事务典型的时序图:

php 分布式事务 DTM (TCC模式和Saga模式的区别)相关推荐

  1. 多个mapper的事务回滚_揭秘蚂蚁金服分布式事务 Seata 的AT、Saga和TCC模式

    作者| 屹远(陈龙),蚂蚁金服分布式事务核心研发 . 导语 本文根据 8月11日 SOFA Meetup#3 广州站 <分布式事务 Seata 及其三种模式详解>主题分享整理,着重分享分布 ...

  2. 探秘蚂蚁金服分布式事务 Seata 的AT、Saga和TCC模式

    作者| 屹远(陈龙),蚂蚁金服分布式事务核心研发 . 导语 本文根据 SOFA Meetup#3 广州站 <分布式事务 Seata 及其三种模式详解>主题分享整理,着重分享分布式事务产生的 ...

  3. 分布式事务、基于Best Efforts 1PC模式的事务

    系统经sharding改造之后,原来单一的数据库会演变成多个数据库,如何确保多数据源同时操作的原子性和一致性是不得不考虑的一个问题.总体上看,目前对于一个分布式系统的事务处理有三种方式:分布式事务.基 ...

  4. 分布式事务 - Seata - TCC模式

    目录 一.什么是TCC 二.AT & TCC区别 及 适用场景 三.代码集成示例 3.1 升级Seata 1.5.2 3.2 示例场景说明 3.3 TCC核心接口定义 3.4 TCC相关阶段规 ...

  5. 分布式事务中Tcc模式常见问题(幂等、空回滚、空悬挂)解决

    TCC的异常场景 在分布式系统中,随时随地都需要面对网络超时,网络重发和服务器宕机等问题.所以分布式事务框架作为搭载在分布式系统之上的一个框架型应用也绕不开这些问题.具体而言,有以下常见问题: 幂等处 ...

  6. 每秒1w+分布式事务--dtm的Redis存储性能测试分析

    概述 之前dtm给出了Mysql作为存储引擎的性能测试报告,在一个普通配置的机器上,2.68w IOPS,4核8G机器上,能够支持大约每秒900+分布式事务,能够满足大部分公司的业务需求. 此次带来的 ...

  7. [转]分布式事务之TCC服务设计和实现注意事项

    1.TCC简介 TCC是一种比较成熟的分布式事务解决方案,可用于解决跨库操作的数据一致性问题: TCC是服务化的两阶段编程模型,其Try.Confirm.Cancel 3个方法均由业务编码实现: 其中 ...

  8. 分布式事务模型--TCC

    本文来说下分布式事务模式之TCC,接着上文XA Specification来说 文章目录 概述 TCC TCC 模型将事务的提交划分为两个阶段 举个例子 特点剖析 本文小结 概述 事务是一组不可分组的 ...

  9. 分布式事务之TCC服务设计和实现注意事项!

    来源:云栖社区  |  作者:绍辉  |  原文地址见文末 常见的分布式解决方案有: 最大努力通知型事务 可靠消息一致性事务 TCC事务 一.TCC简介 TCC是一种比较成熟的分布式事务解决方案,可用 ...

  10. 我说分布式事务之TCC

    来源:http://t.cn/E4miiwy 接触分布式相关的开发已经有一段时间了,自然绕不开分布式事务.从本文开始,我将带领大家了解常见的分布式事务的解决方案,深入原理,浅出实践,让我们在今后的开发 ...

最新文章

  1. 关于AI方面创业公司的分析
  2. python 内存溢出能捕获吗_从0基础学习Python (19)[面向对象开发过程中的异常(捕获异常~相关)]...
  3. .Net 垃圾回收和大对象处理
  4. 【TensorFlow】tf.nn.softmax_cross_entropy_with_logits 函数:求交叉熵损失
  5. erp系统方案书_解决方案 |快普M8为系统集成企业定制的ERP系统
  6. 享元模式源码解析(jdk+tomcat)
  7. 计算机各种硬盘的规格,硬盘规格参数表大全
  8. 常见RPM,YUM,DNF指令
  9. linux看不到boot分区,解决CentOS和Ubuntu /boot分区空间不足问题
  10. 面向对象的程序设计方法
  11. ojdbc6报红以及nested exception is org.hibernate.service.spi.ServiceException: 已解决
  12. 车牌识别——合成车牌数据
  13. 关于射频技术在粮食安全的科研进展
  14. 2019北京中考英语口语计算机考试,2019北京中考英语听说考试体验系统发布,附考试流程和注意事项...
  15. 我的微信公众号开通了!
  16. Moir´e Photo Restoration Using Multiresolution Convolutional Neural Networks 摩尔纹领域论文阅读复现
  17. UnrealEditor-RHI.dll 没有被指定在windows上运行
  18. 怎么检测计算机硬件好坏,鲁大师如何检测硬件好坏?硬件好坏检测方法介绍
  19. 定期定量采购_定量、定期订货法的比较
  20. 语音交互设计的一点认知

热门文章

  1. 2.前端开发命名规范
  2. 如何利用Tempo BI大数据分析工具快速完成数据同环比分析?
  3. echarts(雷达图和中国地图)
  4. Linux 设置代理
  5. linux下解压rpm包,linux下 各种解压文件使用方法
  6. 领导含泪叮嘱我:MySQL 建表字段记得用 not null,不然就收拾包袱滚蛋
  7. docker Got permission denied while trying to connect
  8. 全面设防 让广播风暴远离局域网
  9. Datawhale组队学习开源内容汇总
  10. uni-app 对接企业微信登录