分布式事务处理
当数据分布在多个数据库服务器上时,就需要各种保护措施来保证数据正确地写到所有数据库中。例如,考虑一个在三个分离的远程数据库上修改的 客户帐户平衡表,如果在事务写阶段,任何一个数据库连接失败,数据库之间就失去同步。怎样检测并更正这种情形呢?事务处理(TP)监示一个叫做两阶段提交 的过程并在某种程度上解决了这个问题。
分布式系统上的实时事务处理需要一个两阶段提交过程保证将事务得到多个数据库上时的数据完整性。所涉及到的每个数据库在事务被提交给任何其他数据库 时都要授权给它。如果事务成功,则被提交,否则事务应被回退。与容错系统类似,两阶段提交保护系统防止在事务写期间发生系统错误。它也允许操作员异常终止 一个事务并将数据库恢复到原先的状态。事务监示器按下面的过程跟踪事务过程。
1.写操作命令被送到每个数据库后,事务监示器等待一个响应信号以保证所有的系统都准备好写。如果所有系统都来响应,事务将在这里异常终止。
2.假定都响应了,事务监示器指示数据库开始写,然后等待每一个系统表明数据写成功的确认信号。
3.若未得到所有系统响应信号(由于线路或系统故障),事务监示器命令所有数据库将此次的写操作取消。
例如,运行在机器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。
分享到:
相关推荐
本文的目的是要提供一个关于的Java事务处理... 一个分布式事务处理只是一个在两个或更多网络资源上访问和更新数据的事务处理,因此它在那些资源之间必然是等价的。在本文中,我们主要关心的是如何处理关系数据库系统。
分布式事务是一个绕不过去的...教程中的样例项目基于龙果学院开源的微支付系统进行实现,使用Dubbo作为服务化框架,教程中所实现的分布式事务解决方案在Java体系中的微服务架构系统都能通用,与具体的开发框架无关。
支付宝-程立,大规模SOA系统的分布式事务处理,讲义。里面较全面的讲到了分布式事务处理的常规方法,来龙去脉。
实现的一个简单2PC分布式事务框架,客户端与服务端通信使用Netty,市面上成熟的2PC分布式事务框架有:LCN,大致的处理流程都是按照这种方式来的,希望对于学习分布式事务的小伙伴有所帮助。
分布式事务服务 (Distributed Transaction Service, DTS) 是一个分布式事务框架,用来保障在大规模分布式环境下事务的最终一致性。DTS 从架构上分为 dts-core 、dts-schedule、 dts-server 两部分,dts-core是一个...
龙果学院中华石杉主讲的大型网站分布式微服务分布式事务处理教程,很全配资料,希望对你有帮助的。 微服务架构的分布式事务解决方案,完整31讲-龙果学院
Jtom(java open Transaction Manager)是java写的事务管理器并实现了jta接口,而且是开源项目。
基于springboot+druid+fastjson多数据源分布式事务处理源码.zip 基于springboot+druid+fastjson多数据源分布式事务处理源码.zip
基于本地消息表的分布式事务处理-tcc
分布式数据库事务处理(COM+实现)
Shardingsphere-jdbc-nocas-seata用seata分布式事务处理方案分布式事务处理方案,seata分布式事务:项目Spring Cloud + ShardingSphereJDBC + nacos + seata分组事务+ fegin
JTA(Java Transaction API)允许应用程序执行分布式事务处理--在两个或多个网络计算机资源上访问并且更新数据。JDBC驱动程序的JTA支持极大地增强了数据访问能力。本文的目的是要提供一个关于的Java事务处理API(JTA)...
NULL 博文链接:https://ooft.iteye.com/blog/495158
Sharding-JDBC分布式事务应用
基于SpringBoot和Seata实现Dubbo分布式事务管理系统源码+数据库+项目说明.zip 主要介绍SpringBoot2.1.5 + Dubbo 2.7.3 + Mybatis 3.4.2 + Nacos 1.1.3 +Seata 0.8.0整合来实现Dubbo分布式事务管理,使用Nacos 作为 ...
这个项目是在实践过程中,发现seata在处理分布式事务的时候,维护性能的开销相对较大,并且其把调用纳入到全局事务体系是基于xid的传递。 基于以上需求,把seata的一些调用进行异步处理,可以实现异步+分布式事务的...
galaxyLight:欢迎大家完善本系统,结合当前事务处理的本质,我开发了太极分布式事务处理框架MOONWATER,采用可靠消息服务和重试,补偿处理机制,使用事件驱动,最终一致的事务模型,替代地部署数据库的事务处理能力...
传统的分布式事务处理技术在实际应用中存在着效率较低和网络环境复杂时可靠性较差等问题。文章提出了一种基于Java消息服务(Java Message Service,JMS)的分布式异步事务处理模型,该模型采用非阻塞的事务处理机制即...
包括了数据库配置,aop配置,多数据库和分布式事务配置数据库配置:jdbc,jpa,mybatis(注解和mapper文件)mvn mybatis-generator:generate 代码生成器配置多数据库的配置,和jta+atomikos处理分布式事务aop 配置统一的...
脂肪FAT,基于springboot,使用zookeeper,redis,spring异步,spring transactionManager的强一致性分布式事务解决方案框架介绍纯编码方式,强一致性。使用redis / zookeeper作为注册中心,代理事务的执行,使用...