分布式事务处理( Distributed Transaction Processing , DTP )涉及多个分布在不同地方的数据库,但对数据库的操作必须全部被提交或者回滚。只要任一数据库操作时失败,所有参与事务的数据库都需要回滚。
Open 组织定义的分布式事务处理模型X/Open DTP 模型(1994)包括应用程序( AP )、事务管理器( TM )、资源管理器( RM ,即数据库 )、通信资源管理器( CRM )四部分。而 XA 是 X/Open DTP 定义的事务管理器与数据库之间的接口规范(即接口函数),事务管理器用它来通知数据库事务的开始、结束以及提交、回滚等。
XA 接口规范使用两阶段提交协议来完成一个全局事务,保证同一事务中所有数据库同时成功或者回滚。
两阶段提交协议假设每个数据库点都存在一个write-ahead log,每一次的write请求都是先记log后才真正执行写入。
第一阶段为提交请求阶段(Commit-request phase):
1. 事务管理器给所有数据库发query to commit消息请求,然后开始等待回应;
2. 数据库如果可以提交属于自己的事务分支,则将自己在该事务分支中所做的操作固定记录下来(在undo log和redo log中各记一项);
3. 数据库都回应是否同意提交的应答。
第二阶段为提交阶段(Commit phase):
如果事务管理器收到的所有回应都是agreement,
1. 事务管理器记日志并给所有数据库发commit消息请求;
2. 各个数据库执行操作,释放所有该事务相关的锁和资源;
3. 各个数据库给事务管理器回复;
4.当收到所有回复,事务管理器结束当前事务
如果事务管理器收到的任一回应是abort,
1. 事务管理器记日志并给所有数据库发rollback消息请求;
2. 各个数据库执行undo操作,释放所有该事务相关的锁和资源;
3. 各个数据库给事务管理器回复;
4.当收到所有回复,事务管理器结束当前事务
两 阶段提交协议的问题在于数据库在提交请求阶段应答后对很多资源处于锁定状态,要等到事务管理器收集齐所有数据库的应答后,才能发commit或者 rollback消息结束这种锁定。锁定时间的长度是由最慢的一个数据库制约,如果数据库一直没有应答,所有其他库也需要无休止的锁并等待。并且,如果事 务管理器出现故障,被锁定的资源将长时间处于锁定状态。无论是任一数据库或者事务管理器故障,其他数据库都需要永久锁定或者至少长时间锁定。并且,分布式 系统中节点越多,存在缓慢网络或者故障节点的概率也就越大,资源被长时间锁定的概率指数上升。
两阶段提交协议的另一个问题是只要有任意一个数据库 不可用都会导致事务失败,这导致事务更倾向于失败。对于多个副本的备份系统,很多时候我们希望部分副本点失效时系统仍然可用,使用该协议则不能实现。并 且,分布式系统中节点越多,存在故障节点的概率也就越大,系统的可用性指数下降。
另外,如果数据库在第一阶段应答后到第二阶段正式提交前的某个阶段网络故障或者节点故障,该协议无法提交或回滚,数据不一致不能绝对避免。
- 浏览: 188097 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (155)
- oracle (5)
- jms (1)
- 配置 (1)
- InstallAnywhere (1)
- 操作系统 (2)
- 测试 (2)
- linux (22)
- cloud (2)
- java (21)
- jvm (3)
- nsql (1)
- spring ibatis atomikos (1)
- maven (8)
- zookeeker (2)
- spring (4)
- 分布式 (3)
- mina (2)
- 空间 (1)
- OpenSSL (2)
- android (6)
- github (1)
- 支付 (1)
- php (4)
- ant (1)
- 数据库 (1)
- mysql (18)
- pki (1)
- js (3)
- c# (1)
- extjs (1)
- 网络 (1)
- pinyin4j (1)
- selenium (1)
- tomcat (1)
- yjp (1)
- xss (1)
- xsrf (1)
- 系统安装光盘制作 (2)
- kindeditor (1)
- vsftp (1)
- ueditor (2)
- netty (3)
- servlet (1)
- volatile (1)
- ios (1)
- zookeeper (2)
- jmx (1)
- 序列化 (1)
- 蓝牙 (3)
- easyui (1)
- ehcache (1)
- cas (2)
- antx (1)
- diamond (1)
- http (2)
- logback (1)
- storm (1)
- windows (1)
最新评论
-
bihongliang:
你好,博主,我的系统是win10 64位的,用了64位的 bl ...
Eclipse + Java + BlueCove + WIN/MAC 蓝牙开发
发表评论
-
如何在TOMCAT下指定JDK的路径
2015-09-23 14:32 8911,修改bin文件夹下面的catalina.bat文件,把如下 ... -
java资源集合
2015-03-31 13:11 711这里搜集了用来构建应用程序的工具。 Apache Ma ... -
深入探讨 Java 类加载器
2014-11-26 18:13 438http://www.ibm.com/developerwo ... -
serialVersionUID的作用
2014-11-21 17:32 669简单来说,Java的序列 ... -
在UltraEdit中使用正则表达式
2014-10-11 14:42 410在UltraEdit中使用正则表达式 正则表达式 (Ult ... -
java 8stream
2014-10-10 16:54 730上篇文章Java8初体验(一)lambda表达式语法比 较 ... -
并发实战题
2014-10-10 13:50 335实现一个流控程序。控制客户端每秒调用某个远程服务不超过N次 ... -
CopyOnWriteArrayList
2014-10-10 11:01 662除了加锁外,其实还有 ... -
java动态加载
2014-10-09 22:07 855第一部分:Java虚拟 ... -
Checkmarx CxEnterprise企业版静态源代码扫描管理方案
2014-08-14 14:59 2500一、Checkmarx CxEnterprise简介 ... -
Java EE 6.0 的 Cookie 类已经有设置 HttpOnly 的方法
2014-08-13 16:39 801一般的Cookie都是从document对象中获得的,现在浏 ... -
java.lang.OutOfMemoryError: PermGen space解决方法
2014-08-06 23:19 777公司的站点是跑在jboss ... -
java文件下载的文件名乱码问题的解决
2014-07-22 00:35 646在Java的web开发中,文件下载功能的文件名文件名乱码问题 ... -
java文件下载的文件名乱码问题的解决
2014-07-16 16:33 1013在Java的web开发中,文件下载功能的文件名文件名乱码问 ... -
开源混淆工具ProGuard配置详解及配置实例
2014-05-21 23:46 652ProGuard的作用: 1.创建紧凑的代码文档是为了更 ... -
java 二维码
2013-05-31 13:16 749package com.wxthtf.iot.common; ... -
Ant编译utf-8非法字符:/65279 解决方法
2013-05-30 10:15 1027这是一个很郁闷的问题,碰到这问题百度又不能直接搜索“&am ... -
JAVA方法中Bridge修饰符
2013-05-09 11:48 863前段时间研究spring中的 ... -
oracle调用java
2013-04-19 14:40 818前提是数据库上需要安装java虚拟机(JVM),使用下面的语 ... -
jetty6 Continuation
2013-03-18 18:09 862http://langyu.iteye.com/blog/7 ...
相关推荐
大家跨服务器加事务的时候经常遇到以下报错:导入Microsoft分布式事务处理协调器MSDTC,网上大部分教程都是服务器配置msdtc,但是发现两个服务器都配置之后还是不行,可参照此图片解决,已验证过,不好用找我,最低...
支付宝-程立,大规模SOA系统的分布式事务处理,讲义。里面较全面的讲到了分布式事务处理的常规方法,来龙去脉。
本文的目的是要提供一个关于的Java事务处理... 一个分布式事务处理只是一个在两个或更多网络资源上访问和更新数据的事务处理,因此它在那些资源之间必然是等价的。在本文中,我们主要关心的是如何处理关系数据库系统。
大规模SOA系统中的分布式事务处理_程立_SD2C2008.pdf 大规模SOA系统中的分布式事务处理_程立_SD2C2008.pdf 大规模SOA系统中的分布式事务处理_程立_SD2C2008.pdf 大规模SOA系统中的分布式事务处理_程立_SD2C2008.pdf
微服务架构的分布式事务处理方案
结合目前事务处理的精华,我开发了太极分布式事务处理框架TJDTP,采用可靠消息服务和重试、补偿处理机制,使用事件驱动、最终一致的事务模型,巧妙地运用数据库的事务处理能力,对服务操作结果进行判断,调用应用...
.NET简谈事务、分布式事务处理 ,DTC应用
分布式事务是一个绕不过去的挑战!微服务架构本质上就是分布式服务化架构,微服务架构的流行,让分布式事务问题日益突出!尤其是在订单业务、资金业务等系统核心业务流程中,一定要有可靠的分布式事务解决方案来保证...
大规模SOA系统中的分布式事务处理_程立 经典中的经典,蚂蚁CTO 分享的分布式事务解决方案
C# .net 分布式事务处理类及事件使用,可以作为跨数据库事务处理,事件执行信息查看等功能
xa分布式事务处理.docx 一份值得推荐共享的资料!
在讨论分布式事务处理模型及事务提交协议的基础上, 针对实际应用中的银行转账模型, 分 析一般分布式事务处理失败的原因, 给出基于XA接口的MySQL( 关系型数据库管理系统) 和 PHP( 超级文本预处理语言) 对分布式事务...
linq to sql 分布式事务处理.pdf
大规模SOA系统中的分布式事务分析详解,神一样的人所著
DotNet的Com+分布式事务处理的配置与调试 分别讲述sql2000及sql2005中关于分布式事务处理所需的配置。 附有代码。 该文档有47页,内容丰富
微服务架构下的分布式事务处理
龙果学院中华石杉主讲的大型网站分布式微服务分布式事务处理教程,很全配资料,希望对你有帮助的。 微服务架构的分布式事务解决方案,完整31讲-龙果学院
微服务架构下的分布式事务处理.pdf