分布式事务

分布式

     总体来看,如果所有数据的修改仅依靠单个数据源就能完成,则这个事务就相当简单了。然而,随着商业需求的日益增加,应用程序变得越来越复杂,经常需要访问多个数据库,这些数据库通常分布在不同的地方,这就是分布式事务。分布式事务修改的数据存储在多个或多种类型的数据源中,这些数据源分布在多台机器上,甚至更复杂的情况。
    设想有一个事务,要求数据变化发生在两个分离的数据库中,仍然要求所有的ACID特性测试能够满足。基本的事务处理不能满足要求,因为如果其中一个数据库服务器失败,无法确保另外一个数据库的数据还没有提交并成为永久的。换句话说,无法协调发生在不同地方的多个事务处理就没有办法保证事务的原子性。
    例如,运行在机器A上的一个组件是单个事务的组成部分之一,组件能够利用机器B上的SQL Server执行数据库事务。组成事务的另一组件用运行在机器C上的Oracle服务器执行数据库事务。这三台机器运行着四块不同的代码,它们全都要参与到这个事务中。
    即使通过COM+隐藏分布式事务中的细节,也必要研究和了解分布式事务的“幕后”结构。请记住这些ACID特性适用于所有类型的事务,不论事务涉及的数据库是什么类型或数量有多少。
使用MS DTC进行两阶段提交
    让我们再看一下上述分布式事务的例子。如果Oracle服务器停机了,如何保证事务的原子性。答案是使用两阶段提交(two-phase commit,2PC)和通过Microsoft分布式事务协调器(MS DTC)协调。
    MSDTC是最先集成在SQL Server中,现在已成为COM+必不可少的部分,通过在事务处理中加入其他的因子,MS DTC确认所有的过程完成并提交他们。
    让我们进一步研究MS DTC,了解其工作方式。为了能用两阶段提交协议进行协调,事务中的每个数据源必须装有MS DTC。在这些安装中,主要的协调器总是在事务的起源之处。这个主要的协调器称为提交协调器,它负责确保事务的提交或终止。不管事务是成功地提交还
是回滚,提交协调器都负责向客户应用程序返回一个报告。
    在两阶段提交中第一阶段是准备阶段,每个服务器执行它接收的指令,但所有应写到磁盘的内容都被缓冲,如图1 9 - 1所示。

    一旦服务器已执行了指令,就通知提交协调器关于事务的状况,如图1 9 - 2所示。

    第二阶段称为提交阶段。如果提交协调器接收到来自每个数据源的“准备提交”通知,就提交事务,如图1 9 - 3。

    然而,如果从某一受影响的数据源接收到失败信息,提交协调器将执行回滚,并且通知客户应用程序,见图1 9 - 4。

时间: 2024-10-31 21:27:49

分布式事务的相关文章

GTS for DRDS分布式事务的实现理解

GTS介绍 全局事务服务(Global Transaction Service,简称 GTS)是一款高性能.高可靠.接入简单的分布式事务中间件,用于解决分布式环境下的数据一致性问题. 一个完整的业务往往需要调用多个子业务或服务,随着业务的不断增多,涉及的服务及数据也越来越多,越来越复杂.传统的系统难以支撑,出现了应用和数据库等的分布式系统.分布式系统又带来了数据一致性的问题,从而产生了分布式事务. 分布式事务是指事务发起者.资源管理器.事务协调者及资源分别位于不同的分布式系统的不同节点之上. G

破解世界性技术难题! GTS让分布式事务简单高效

近日,2017云栖大会·深圳峰会如期举行,多项阿里云新产品对外发布.在企业级互联网架构分会场,来自阿里中间件(Aliware)的技术专家及合作伙伴,为现场参会嘉宾带来最新的传统IT架构到企业级互联网架构跨越式升级.实现互联网转型的产品及解决方案.其中高级技术专家姜宇在分享中带来的Aliware新产品-全局事务服务(Global Transaction Service ,简称GTS),在分布式事务处理上带来的高性能和技术创新令到场参会的各路技术专家眼前一亮. Aliware新成员-全局事务服务GT

Java分布式事务概念与实现示例

分布式|概念|示例   在java中有如下三种事务, 简单的JDBC级的事务 JTA - 在EJB环境下,用户得到事务并进行控制 CMP - 完全由容器控制事务,用户通过Bean配置文件来定义事务行为 二三种都支持分布式事务,但只支持Java环境下的分布式事务. 下面讨论如何在Java程序里实现分布式事务,即在同一个事务里访问多个数据源.实际上就是如何使用JTA. 这里假设使用Oracle数据库,使用WebLogic部署应用,所要做的是如下几步: 1. 配置 1.1 确认数据库支持分布式事务 -

MS SQLServer OLEDB分布式事务无法启动的一般解决方案

server|sqlserver|分布式|解决 本文属spanzhang原创,其blog地址为:http://blog.csdn.net/spanzhang.引用或转贴请注明出处,谢谢!! 服务器: 消息 7391,级别 16,状态 1,行 6该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务.[OLE/DB provider returned message: 不能在指定的事务处理器中获得新事务.]------------------------------

c# 分布式事务以及MSDTC

# 分布式事务 以及MSDTC.这里解决的是这个问题: # 分布式事务 以及MSDTC 这里解决的是这个问题: 如果一个请求需要执行多个操作: {     int iGet=MethodA();     if(iGet>0){         MethodB();     } } 现有两个方法: int MethodA(){} bool MethodB(){} 有可能出现A执行成功,但是B不成功,需要回滚,这就需要MSDTC的系统事务,亦为分布式事务. 其主要功能为使代码块成为事务性代码,在Sy

关于SQL Server 2000和SQL Server 2005分布式事务能否协同工作的测试

server|分布式 关于SQL Server 2000和SQL Server 2005分布式事务能否协同工作的测试 MS DTC Report 1.      MS DTC 背景 2.      MSDTC 测试目的 3.      MSDTC 测试环境 3.1            本次验证测试环境: 3.2            环境配置 3.3            验证MSDTC 3.4            创建验证用表 4.      Linked Server测试 5.     

分布式查询和分布式事务

分布式 Microsoft SQL Server 允许创建与称为链接服务器的 OLE DB 数据源的链接.在链接到 OLE DB 数据源之后,可以: 从 OLE DB 数据源引用行集,作为 Transact-SQL 语句中的表. 将命令传递给 OLE DB 数据源,并包含结果行集,作为 Transact-SQL 语句中的表. 每个分布式查询都可以引用多个链接的服务器,而且可以对每个链接的服务器分别执行更新或读取操作.单个分布式查询可以对某些链接的服务器执行读取操作,并且对其它链接的服务器执行更新

ADO.NET 系列 quiz 2 关于分布式事务

ado|分布式 问题:关于分布式事务的例子: 数据库A 和数据库B 上各有一个bank 表 ( 实际情况下A 和 B 分别在不同的机器上,不同类型的数据库(支持dtc))表结构如下BankAccount, Amount A 数据库中的记录:A 1000 B 数据库中的数据B 1000 为了测试方便,没有用 COM+,而是直接在 web service 中测试.代码如下: <WebMethod(TransactionOption:=EnterpriseServices.TransactionOpt

支付宝分布式事务测试方案简介

什么是分布式事务 传统的基于数据库本地事务的解决方案只能保障单个服务的一次处理具备原子性.隔离性.一致性与持久性,但无法保障多个分布服务间处理的一致性.因此,我们必须建立一套分布式服务处理之间的协调机制,保障分布式服务处理的原子性.隔离性.一致性与持久性. 支付宝为什么需要分布式事务 基于SOA架构,整个支付宝系统会拆分成一系列独立开发.自包含.自主运行的业务服务,并将这些服务通过各种机制灵活地组装成最终用户所需要的产品与解决方案. 在多个服务协同完成一次业务时,由于业务约束(如红包不符合使用条