分布式事务处理( 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消息结束这种锁定。锁定时间的长度是由最慢的一个数据库制约,如果数据库一直没有应答,所有其他库也需要无休止的锁并等待。并且,如果事 务管理器出现故障,被锁定的资源将长时间处于锁定状态。无论是任一数据库或者事务管理器故障,其他数据库都需要永久锁定或者至少长时间锁定。并且,分布式 系统中节点越多,存在缓慢网络或者故障节点的概率也就越大,资源被长时间锁定的概率指数上升。
两阶段提交协议的另一个问题是只要有任意一个数据库 不可用都会导致事务失败,这导致事务更倾向于失败。对于多个副本的备份系统,很多时候我们希望部分副本点失效时系统仍然可用,使用该协议则不能实现。并 且,分布式系统中节点越多,存在故障节点的概率也就越大,系统的可用性指数下降。
另外,如果数据库在第一阶段应答后到第二阶段正式提交前的某个阶段网络故障或者节点故障,该协议无法提交或回滚,数据不一致不能绝对避免。
- 浏览: 194207 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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 9231,修改bin文件夹下面的catalina.bat文件,把如下 ... -
java资源集合
2015-03-31 13:11 760这里搜集了用来构建应用程序的工具。 Apache Ma ... -
深入探讨 Java 类加载器
2014-11-26 18:13 484http://www.ibm.com/developerwo ... -
serialVersionUID的作用
2014-11-21 17:32 714简单来说,Java的序列 ... -
在UltraEdit中使用正则表达式
2014-10-11 14:42 453在UltraEdit中使用正则表达式 正则表达式 (Ult ... -
java 8stream
2014-10-10 16:54 762上篇文章Java8初体验(一)lambda表达式语法比 较 ... -
并发实战题
2014-10-10 13:50 363实现一个流控程序。控制客户端每秒调用某个远程服务不超过N次 ... -
CopyOnWriteArrayList
2014-10-10 11:01 694除了加锁外,其实还有 ... -
java动态加载
2014-10-09 22:07 892第一部分:Java虚拟 ... -
Checkmarx CxEnterprise企业版静态源代码扫描管理方案
2014-08-14 14:59 2574一、Checkmarx CxEnterprise简介 ... -
Java EE 6.0 的 Cookie 类已经有设置 HttpOnly 的方法
2014-08-13 16:39 834一般的Cookie都是从document对象中获得的,现在浏 ... -
java.lang.OutOfMemoryError: PermGen space解决方法
2014-08-06 23:19 809公司的站点是跑在jboss ... -
java文件下载的文件名乱码问题的解决
2014-07-22 00:35 678在Java的web开发中,文件下载功能的文件名文件名乱码问题 ... -
java文件下载的文件名乱码问题的解决
2014-07-16 16:33 1042在Java的web开发中,文件下载功能的文件名文件名乱码问 ... -
开源混淆工具ProGuard配置详解及配置实例
2014-05-21 23:46 696ProGuard的作用: 1.创建紧凑的代码文档是为了更 ... -
java 二维码
2013-05-31 13:16 783package com.wxthtf.iot.common; ... -
Ant编译utf-8非法字符:/65279 解决方法
2013-05-30 10:15 1068这是一个很郁闷的问题,碰到这问题百度又不能直接搜索“&am ... -
JAVA方法中Bridge修饰符
2013-05-09 11:48 912前段时间研究spring中的 ... -
oracle调用java
2013-04-19 14:40 849前提是数据库上需要安装java虚拟机(JVM),使用下面的语 ... -
jetty6 Continuation
2013-03-18 18:09 893http://langyu.iteye.com/blog/7 ...
相关推荐
大家跨服务器加事务的时候经常遇到以下报错:导入Microsoft分布式事务处理协调器MSDTC,网上大部分教程都是服务器配置msdtc,但是发现两个服务器都配置之后还是不行,可参照此图片解决,已验证过,不好用找我,最低...
分布式事务处理是现代大型服务导向架构(SOA)系统中不可或缺的一部分,特别是在诸如支付宝这样的高并发、高可用性环境中。本讲义将深入探讨在Java环境下实现大规模SOA系统中的分布式事务处理的关键技术和挑战。 ...
在大规模的Service-Oriented Architecture (SOA)系统中,分布式事务处理是一个核心且复杂的议题。本文基于程立,一位知名的技术领导者,同时也是蚂蚁集团的CTO,分享的分布式事务解决方案进行深入探讨。 首先,我们...
在大规模的SOA(Service-Oriented Architecture,面向服务架构)系统中,分布式事务处理是一项至关重要的技术。这种架构通常涉及多个独立的服务协同工作,每个服务都可能有自己的数据存储,因此,确保这些服务之间的...
本文的目的是要提供一个关于的Java事务处理... 一个分布式事务处理只是一个在两个或更多网络资源上访问和更新数据的事务处理,因此它在那些资源之间必然是等价的。在本文中,我们主要关心的是如何处理关系数据库系统。
大规模SOA系统中的分布式事务处理_程立_SD2C2008.pdf 大规模SOA系统中的分布式事务处理_程立_SD2C2008.pdf 大规模SOA系统中的分布式事务处理_程立_SD2C2008.pdf 大规模SOA系统中的分布式事务处理_程立_SD2C2008.pdf
微服务架构下的分布式事务处理.pdf 微服务架构下的分布式事务处理是指在微服务架构下,多个服务之间的交互和数据访问,导致的事务处理变得更加复杂。传统的分布式事务处理模型无法满足微服务架构的需求,这就需要新...
本主题将深入探讨C#中的分布式事务处理类及事件使用,帮助你理解如何在分布式系统中实现一致性和可靠性。 分布式事务是在多个资源管理器(如不同的数据库)之间协调的事务,它要求所有的操作要么全部成功,要么全部...
### .NET中的事务与分布式事务处理 #### 一、引言 事务处理是现代软件开发中不可或缺的一部分,尤其是在处理数据库操作或需要确保一系列操作原子性的场景下。.NET框架提供了强大的事务支持,允许开发者轻松地在不同...
《LINQ to SQL 分布式事务处理》是针对.NET框架中使用LINQ to SQL进行数据库操作时,如何处理复杂业务场景下涉及多个数据源的事务一致性问题的专业书籍。LINQ (Language Integrated Query) 是.NET Framework引入的一...
在大规模的SOA(Service-Oriented Architecture,面向服务架构)系统中,分布式事务处理是一项至关重要的技术。本文将深入探讨这一主题,基于程立的资料,主要关注分布式事务处理模型、XA规范以及两阶段提交和三阶段...
因此,分布式事务处理系统成为了解决这一问题的关键。 分布式事务处理系统的发展背景主要源于两方面的需求:一是性能需求,二是灵活性和扩展性的需求。传统集中式系统在面对大规模并发操作和海量数据时,容易出现...
分布式事务处理是解决多数据库系统中一致性问题的关键技术,而X/Open Distributed Transaction Processing (DTP)模型和XA规范是这一领域的重要理论基础和实现标准。X/Open组织,现称为Open Group,于1994年提出了DTP...
分布式事务处理的核心在于确保跨多个数据库的操作能够成功地一起完成或者一起失败,以保持数据的一致性。本文将深入探讨基于MySQL和PHP实现的分布式事务处理机制,并重点介绍如何利用XA接口来实现可靠的分布式事务...
结合目前事务处理的精华,我开发了太极分布式事务处理框架TJDTP,采用可靠消息服务和重试、补偿处理机制,使用事件驱动、最终一致的事务模型,巧妙地运用数据库的事务处理能力,对服务操作结果进行判断,调用应用...
腾讯TDSQL分布式事务处理技术概述 腾讯TDSQL分布式事务处理技术是指在分布式系统中对事务的处理和管理,以确保事务的一致性和可靠性。该技术的核心是多级一致性技术(强一致性),它可以确保在分布式系统中所有节点...