一 定义 TCC方案是可能是目前最火的一种柔性事务方案
二 具体 内容 TCC=try(预设)-confrim(应用确认)-canal(回滚取消)
三 目的 解决跨服务调用场景下的分布式事务问题,避免使用XA分步事务导致的锁争用和事务堆积问题,用程序设计来实现分布式事务功能
四 具体过程
 1 ) 在阶段1:
  在XA中,各个RM准备提交各自的事务分支,事实上就是准备提交资源的更新操作(insert、delete、update等);而在TCC中,是主业务活动请求(try)各个从业务服务预留资源。
 2) 在阶段2:
 XA根据第一阶段每个RM是否都prepare成功,判断是要提交还是回滚。如果都prepare成功,那么就commit每个事务分支,反之则rollback每个事务分支。
 TCC中,如果在第一阶段所有业务资源都预留成功,那么confirm各个从业务服务,否则取消(cancel)所有从业务服务的资源预留请求

五 两者对比

XA是资源层面的分布式事务,强一致性,在两阶段提交的整个过程中,一直会持有资源的锁。
  1 XA事务中的两阶段提交内部过程是对开发者屏蔽的,回顾我们之前讲解JTA规范时,通过UserTransaction的commit方法来提交全局事务,这只是一次方法调用,其内部会委派给TransactionManager进行真正的两阶段提交,因此开发者从代码层面是感知不到这个过程的。而事务管理器在两阶段提交过  程  中,从prepare到commit/rollback过程中,资源实际上一直都是被加锁的。如果有其他人需要更新这两条记录,那么就必须等待锁释放。
  TCC是业务层面的分布式事务,最终一致性,不会一直持有资源的锁。
   1 TCC中的两阶段提交并没有对开发者完全屏蔽,也就是说从代码层面,开发者是可以感受到两阶段提交的存在
     1 try、confirm/cancel在执行过程中,一般都会开启各自的本地事务,来保证方法内部业务逻辑的ACID特性。其中:
       1、try过程的本地事务,是保证资源预留的业务逻辑的正确性。
       2、confirm/cancel执行的本地事务逻辑确认/取消预留资源,以保证最终一致性,也就是所谓的补偿型事务(Compensation-Based Transactions)。
  2 由于是多个独立的本地事务,因此不会对资源一直加锁。
六 TCC事务的优缺点:
 优点:XA两阶段提交资源层面的,而TCC实际上把资源层面二阶段提交上提到了业务层面来实现。有效了的避免了XA两阶段提交占用资源锁时间过长导致的性能地下问题。 
 缺点:主业务服务和从业务服务都需要进行改造,从业务方改造成本更高。还是航班预定案例,原来只需要提供一个购买接口,现在需要改造成try、confirm、canel3个接口,开发成本高。
七 总结 本文只是简单的概括 具体可参考
http://www.tianshouzhi.com/api/tutorials/distributed_transaction/388 柔性事务与TCC方案,本文内容来源于此篇文章

转载于:https://www.cnblogs.com/danhuangpai/p/10670119.html

mysql 分库分表 ~ 柔性事务相关推荐

  1. MySQL分库分表面试知识点

    目录 1 问题分析: 1.1 背景 1.2 业务分库 1.3 数据库分表 2 为什么要分库分表? 3 用过哪些分库分表中间件? 3.1 你们具体是如何对数据库如何进行垂直拆分或水平拆分的? 4 Mys ...

  2. 高可用Mysql架构_Mysql主从复制、Mysql双主热备、Mysql双主双从、Mysql读写分离(Mycat中间件)、Mysql分库分表架构(Mycat中间件)的演变...

    [Mysql主从复制] 解决的问题 数据分布:比如一共150台机器,分别往电信.网通.移动各放50台,这样无论在哪个网络访问都很快.其次按照地域,比如国内国外,北方南方,这样地域性访问解决了. 负载均 ...

  3. 如何彻底解决烦人的 MySQL 分库分表问题?写一个更好的数据库!

    作者 | 黄东旭 责编 | 郭   芮 我还清楚记得,五年前的这个时候,当时还在豌豆荚,午后与刘奇和崔秋的闲聊关于未来数据库的想象,就像一粒种子一样,到了今天看起来也竟枝繁叶茂郁郁葱葱,有点感慨.按照 ...

  4. MySQL分库分表多维度查询——比较好的方法

    转载自:http://blog.itpub.net/29254281/viewspace-2086198/ MySQL分库分表,一般只能按照一个维度进行查询. 以订单表为例, 按照用户ID mod 6 ...

  5. MySQL运维(二)MySQL分库分表概念及实战、读取分离详解

    MySQL运维(二)MySQL分库分表详解.读取分离详解 1.MySQL分库分表相关概念 1.1 分库分表概念 1.1.1 分库的原因 分库:就是一个数据库分成多个数据库,部署到不同机器. 如果业务量 ...

  6. MySQL分库分表面试知识总结

    场景分析 Web开发工作,亦或是海量数据开发工作,学习分库.分表.分区等知识都是很有必要的 . 面试的时候,也有可能也会被问到.不过作为一个有经验的Coder,不熟悉分库.分表技术确实有些 low. ...

  7. MySQL分库分表原理

    分库分表原理 前言 垂直拆分 水平拆分 分库分表后引入的问题 分库分表中间件 前言 在互联网还未崛起的时代,我们的传统应用都有这样一个特点:访问量.数据量都比较小,单库单表都完全可以支撑整个业务.随着 ...

  8. 【分布式mysql分库分表中间件sharding】

    分布式mysql分库分表中间件,sharding领域的一站式解决方案.具备丰富.灵活的路由算法支持,能够方便DBA实现库的水平扩容和降低数据迁移成本.shark采用应用集成架构,放弃通用性,只为换取更 ...

  9. MySQL分库分表会带来哪些问题?分库分表问题

    MySQL分库分表会带来哪些问题? 分库分表能有效的环节单机和单库带来的性能瓶颈和压力,突破网络IO.硬件资源.连接数的瓶颈,同时也带来了一些问题.下面将描述这些技术挑战以及对应的解决思路. 分库分表 ...

最新文章

  1. Docker安装weblogic(五)
  2. reentrantLock 和 synchronized 哪个性能高?
  3. Gentoo 安装日记 02 (建立并启动虚拟机)
  4. springboot webservice cxf 客户端调用
  5. PHP 继承新增,php类的扩展和继承用法实例
  6. 报送数据标准校验java_Java:数据校验 - osc_gaqp1a2z的个人空间 - OSCHINA - 中文开源技术交流社区...
  7. 黑鲨或将在明天公布黑鲨4系列游戏手机
  8. 32位linux时间戳,32位unix时间戳哪一年用尽
  9. The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, forc
  10. SpringBoot之kafka安装windows
  11. 苹果Mac Finder 替代工具:Path Finder
  12. 拓端tecdat|matlab使用贝叶斯优化的深度学习:卷积神经网络CNN
  13. 交易平台谁能在移动支付的大潮中成为赢家?
  14. iview render设置属性_iView 发布 3.4.0 版本,代号 BestLuck
  15. 史上最真实的网络飙车游戏
  16. Access根据出生日期计算年龄_Excel表格中怎么用出生日期计算年龄?这些方法好用哟...
  17. 【虚幻引擎UE】场景中物体闪烁抖动摩尔纹问题集合
  18. 优先调度规则(PDR)
  19. 100个数据分析常用指标和术语
  20. 信息安全技术——(六)网络与系统攻击技术

热门文章

  1. raid5通常需要几块盘_raid5需要几块硬盘
  2. 不同系统下的shell的不同_不同论文检测系统有哪些区别?
  3. ubutnu16.04搭建LAMP环境(搭建wordpress博客)
  4. 洪嘉振 计算多体系统动力学pdf_多体动力学演化python入门——quantum many-body scars 和稀疏矩阵后续...
  5. python将一组数据转化为列表_python如何将一个全部为int的列表,转化为全部为str的列表...
  6. 正则不等于一个字符串_更正一个观念:“积食”不等于“吃多了”
  7. 动态顺序字符串基本操作实验_掌握套路,你也会用动态规划
  8. 新版手机浏览器_新版《野性的呼唤》IGN仅3分 烂番茄72% M站54分
  9. mysql 普通索引使用方法,Mysql索引类型与基本用法实例分析
  10. python csv字符串写入_请教:如何把csv里的 emoji 字符串正确写入 DB?