系统经sharding改造之后,原来单一的数据库会演变成多个数据库,如何确保多数据源同时操作的原子性和一致性是不得不考虑的一个问题。总体上看,目前对于一个分布式系统的事务处理有三种方式:分布式事务、基于Best Efforts 1PC模式的事务以及事务补偿机制。我们下面对这三种处理方式一一进行分析。本文原文链接: http://blog.csdn.net/bluishglc/article/details/7793172  转载请注明出处!

事务分为:局部事务和全局事务(分布式事务)

局部事务:当前事务只有一个RM(Resource Manager。负责存储并管理系统数据资源的状态)参与其中。

分布式事务是指操作多个数据库之间的事务

分布式事务

这是最为人们所熟知的多数据源事务处理机制。本文并不打算对分布式事务做过多介绍,读者可参考此文: 关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究  。在这里只想对分布式事务的利弊作一下分析。

优势:

1. 基于两阶段提交,最大限度地保证了跨数据库操作的“原子性”,是分布式系统下最严格的事务实现方式。
2. 实现简单,工作量小。由于多数应用服务器以及一些独立的分布式事务协调器做了大量的封装工作,使得项目中引入分布式事务的难度和工作量基本上可以忽略不计。

劣势:

系统“水平”伸缩的死敌。基于两阶段提交的分布式事务在提交事务时需要在多个节点之间进行协调,最大限度地推后了提交事务的时间点,客观上延长了事务的执行时间,这会导致事务在访问共享资源时发生冲突和死锁的概率增高,随着数据库节点的增多,这种趋势会越来越严重,从而成为系统在数据库层面上水平伸缩的"枷锁", 这是很多Sharding系统不采用分布式事务的主要原因。

基于Best Efforts 1PC模式的事务

与分布式事务采用的两阶段提交不同,Best Efforts 1PC模式采用的是一阶段端提交,牺牲了事务在某些特殊情况(当机、网络中断等)下的安全性,却获得了良好的性能,特别是消除了对水平伸缩的桎酷。 Distributed transactions in Spring, with and without XA 一文对Best Efforts 1PC模式进行了详细的说明,该文提供的Demo代码更是直接给出了在Spring环境下实现一阶段提交的多数据源事务管理示例。不过需要注意的是,原示例是基于spring 3.0之前的版本,如果你使用spring 3.0+,会得到如下错误: java.lang.IllegalStateException: Cannot activate transaction synchronization - already active ,如果使用spring 3.0+,你需要参考 spring-data-neo4j 的实现。鉴于Best Efforts 1PC模式的性能优势,以及相对简单的实现方式,它被大多数的sharding框架和项目采用。

事务补偿机制

对于那些对性能要求很高,但对一致性要求并不高的系统,往往并不苛求系统的实时一致性,只要在一个允许的时间周期内达到最终一致性即可,这使得事务补偿机制成为一种可行的方案。事务补偿机制最初被提出是在“长事务”的处理中,但是对于分布式系统确保一致性也有很好的参考意义。笼统地讲,与事务在执行中发生错误后立即回滚的方式不同,事务补偿是一种事后检查并补救的措施,它只期望在一个容许时间周期内得到最终一致的结果就可以了。事务补偿的实现与系统业务紧密相关,并没有一种标准的处理方式。一些常见的实现方式有:对数据进行对帐检查;基于日志进行比对;定期同标准数据来源进行同步,等等。

分布式事务、基于Best Efforts 1PC模式的事务相关推荐

  1. 关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究[转]

    1.XA XA是由X/Open组织提出的分布式事务的规范.XA规范主要定义了(全局)事务管理器(Transaction Manager)和(局部)资源管理器(Resource Manager)之间的接 ...

  2. 关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究

    本文原文连接: http://blog.csdn.net/bluishglc/article/details/7612811 ,转载请注明出处! 1.XA XA是由X/Open组织提出的分布式事务的规 ...

  3. 关于分布式事务 两阶段提交 一阶段提交 Best Efforts 1PC模式和事务补偿机制的研究

    本文原文连接: http://blog.csdn.net/bluishglc/article/details/7612811 ,转载请注明出处! 1.XA XA是由X/Open组织提出的分布式事务的规 ...

  4. 关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究...

    本文原文连接: http://blog.csdn.net/bluishglc/article/details/7612811 ,转载请注明出处! 1.XA XA是由X/Open组织提出的分布式事务的规 ...

  5. 关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究[转]...

    1.XA XA是由X/Open组织提出的分布式事务的规范.XA规范主要定义了(全局)事务管理器(Transaction Manager)和(局部)资源管理器(Resource Manager)之间的接 ...

  6. Best Efforts 1PC 跨库事务

    Best Efforts 1PC 跨库事务 一.背景介绍 分布式事务主要解决两种事务问题,一个是跨库事务,另一个是跨服务事务:跨库是指在一个事务里面包含多个数据源的数据库操作.跨服务是一个事务中包行多 ...

  7. 问题 seata_架构设计 | 基于Seata中间件,微服务模式下事务管理

    一.Seata简介 1.Seata组件 Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata将为用户提供了AT.TCC.SAGA.XA事务模式,为用户打造一 ...

  8. druid seata 配置_架构设计 | 基于Seata中间件,微服务模式下事务管理

    一.Seata简介 1.Seata组件 Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata将为用户提供了AT.TCC.SAGA.XA事务模式,为用户打造一 ...

  9. 架构设计 | 基于Seata中间件,微服务模式下事务管理

    源码地址:GitHub·点这里 || GitEE·点这里 一.Seata简介 1.Seata组件 Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata将为用 ...

最新文章

  1. zeroclipboard 粘贴板的应用示例, 兼容 Chrome、IE等多浏览器
  2. [MySQL FAQ]系列 -- mysqldump出错一例:打开文件数太多
  3. 腾讯财付通漏洞遭***利用 威胁QQ彩钻等付费用户
  4. python做作业没头绪_使用Python做作业
  5. EFI BIOS下的磁盘管理工具Diskpart,Efifmt与Efichk(转)
  6. java版 modbus crc16校验 (已测试成功)_java版 ModBus CRC16校验 (已测试成功)
  7. 计算机信息系统安全保卫工作,对计算机信息系统安全保护工作的检查
  8. WLS_Oracle Weblogic服务器生命周期(案例)
  9. html5引擎 laya,传说中的HTML5超级引擎layabox今日开放
  10. 【C语言】学习笔记6——const
  11. oracle中kill session的方法
  12. Eclipse Community Survey 2012
  13. 牛腩学ASP.NET CORE做博客(视频)
  14. Java实训:学生信息管理系统
  15. 2021-06-08
  16. Consul Sessions
  17. Kafka消费组rebalance原理
  18. Android Work Profile
  19. java微信实现窗口自动输入(微信骚扰机)
  20. 正基WiFi6模块AP6275S

热门文章

  1. 证明spring中property name=这个双引号的内容只与setter方法有关,与一个类定义的字段和getter方法无关...
  2. Python 决策树预测 分类算法
  3. 如何制定有效的项目计划,提高团队执行力
  4. 看完这些面试必问的Linux小知识,我保证你面试后会来给我的文章一键三连
  5. windows自带w32tm实现做ntp client端,精确同步时间。
  6. 2021-2025年中国人工膝关节行业市场供需与战略研究报告
  7. 无线网dhcp服务器租期,缺省情况下,DHCP服务器分配IP地址的租期为()。
  8. 德州扑克游戏算法讲解
  9. python基础学习2020.6.23-条件、循环和其他语句
  10. 人在旅途——》张家界之旅:20190422