`
javatgo
  • 浏览: 1124105 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

分布式事务简述

 
阅读更多

随着系统越来越大,不断的模块化和SOA化,你的系统可能被分散于不同的机器上,这时候,你原先的单机本地事务可能已经无法满足你的需求,你可能要跨系统跨资源的去使用事务。这就是分布式事务。
  事务有四个特性:

  1.    原子性
  2.    一致性
  3.    隔离性
  4.    持久性

  具体就不多介绍了,相信大家都能明白ACID特性的基本含义。

事务模型

而一个具体的事务需要涉及到的模型(无论哪种模型)一般由下面几部分组成:

  1. AP 应用程序
  2. RM 资源管理器
  3. TM 事务管理器

这里的资源管理器一般指数据库资源,而事务管理器,大多是由数据库厂商提供。
那么其实在分布式事务中,也应该符合以上事务的特性和模型,只是资源管理器(RM)变得多了起来.

分布式事务介绍

分布式事务最大的问题在于如何确定资源的状态,以及保证一致性,原子性
一般来说分布事务由

  1. 原子提交协议 
  2. 协调器
  3. 参与者
  4. 事务恢复器
  5. 死锁检测器

五部分组成。

原子提交协议 指的是如何保证原子提交,一般分为单阶段原子提交协议两阶段原子提交协议三阶段原子提交协议

对于单阶段原子提交协议 来说,根本没有办法保证分布式事务的原子性,所以不适用于分布式事务中。

两阶段原子提交协议则 是 各种分布式事务实现中使用最广泛的一种原子提交协议:它主要是交事务提交的过程分为二阶段,投票和最终提交。事务由协调者发起一个事务,参与者加入到事务 中后,第一阶段时候,所有的参与者准备资源,并将资源hold住,协调者询问所有的参与者是否可以提交?所有的参与者向协调者响应结果YES/NO,当所 有的协调者都响应YES的时候,协调者才会发起第二阶段,向所有的参与者通知提交事务,当所有的参与者都提交确认会会再通知协调者。至此事务处理完毕。

三阶段提交协议 由于协调者与参与者多次进行沟通所以代价很大,一般不会使用。但是它能缩小事务处理“不确定”状态的延迟时间。

所谓“不确定”状态就是指当参与者向协调者反馈可以提交的时候,长时间没有收到协调者的通知,这时候参与者没有办法确定事务最终需要如何处理,所以状态为不确定状态。

协调者,参与者一般通过如下动作来进行通信:

  1. join:由协调者提供,用来注册新的参与者
  2. canCommit:协调者询问参与者是否能够提交
  3. doCommit :协调者通知参与者提交事务
  4. doAbort:协调者通知参与者放弃事务
  5. haveCommit:参与者向协调者确认已经提交事务
  6. getDecision:当处于“不确定”状态时,参与者用来询问协调者事务的目前状态。

对于haveCommit特别说明一下,是当第一阶段的时候,协调者发现长时间参与者没有向协调者反馈事务状态,则协调者会主动调用该接口事务的情况,如果仍然无响应,则会通知所有的参与者放弃该事务。

任何事情都会有意外产生,特别是对于跨系统间的通信更容易产生问题,比如网络异常,机器down机,这个时候就需要事务恢复器来作相应的处理。

对于处于第一阶段的事务,
如果参与者发生意外,则协调者会通知所有的参与者进行事务放弃,但是如果协调者出生故障时,就必须要能 够就行事务恢复,所以协调者必须在开始事务的时候,产生唯一的事务ID,并且对事务进行持久化,在协调者恢复的时候,参够让人参与者继续进行事务。

而对于第二阶段出现的故障,
由于第一阶段进行了资源的个决,则事务认为是必然能成功的,这个事候,如果这个时候参与者发生故障,则协调者需要一套重试机制,让参与者在恢复过来后,能够将事务进行完成或者人工介入。

关于死锁检测器这里就不多描述了,以后有机会再描述。

1
3
分享到:
评论

相关推荐

    分布式数据库试题及答案.doc

    1.4. 设数据项x,y存放在S1场地,u,v存放在S2场地,有分布式事务T1和T2,T1在S1场地的操作为R1(x)W1(x)R1(y)W1(y),T2在S1场地的操作为R2(x)R2(y)W2(y);T1在S2场地上的操作作为R1(u)R1(v)W1(u),T2在S2场地上的操作作为...

    研究生分布式数据库参考习题

    1.4. 设数据项x,y存放在S1场地,u,v存放在S2场地,有分布式事务T1和T2,T1在S1场地的操作为R1(x)W1(x)R1(y)W1(y),T2在S1场地的操作为R2(x)R2(y)W2(y);T1在S2场地上的操作作为R1(u)R1(v)W1(u),T2在S2场地上的操作作为...

    分布式数据库系统复习题.doc

    另外,由以上三个分布式数据库系统的基本特点还可以导出它的其它特点,即: 数据分布透明性、集中与自治相结合的控制机制、存在适当的数据冗余度、事务 管理的分布性。 2. 简述分布式数据库的模式结构和各层模式的...

    分布式数据库系统复习题(1).doc

    另外,由以上三个分布式数据库系统的基本特点还可以导出它的其它特点,即: 数据分布透明性、集中与自治相结合的控制机制、存在适当的数据冗余度、事务 管理的分布性。 2. 简述分布式数据库的模式结构和各层模式的...

    sharding-jdbc-demo:基于sharding-jdbc实现的各种分库分表、读写分离、柔性事务、分布式主键、分布式治理等示例,持续更新中。。

    Adam Lu(刘亚壮),高级软件架构师,Java编程专家,开源分布式消息引擎Mysum发起者、首席架构师及开发者,Android开源消息组件Android-MQ独立作者,国内知名开源分布式数据库中间件Mycat核心架构师、开发者,精通Java...

    课程设计基于Java实现的校园快递代拿系统源码+sql数据库+项目详细说明.zip

    9. 本项目偏向于个人的未知领域探索实现(绝对不是因为偷懒,笑),比如分布式事务如何保证最终一致性等,所以对个别功能定了计划但并没有实现, 比如:百度地图的区域可视化,收获地址管理等(以前的作品都实现过的...

    Java数据库编程宝典2

    4.7.1 分布式事务管理 4.7.2 Connection对象 4.8 SQL语句 4.8.1 Statement对象 4.8.2 PreparedStatement语句 4.8.3 CallableStatement 4.9 事务 4.9.1 事务独立性等级 4.9.2 事务存储点 4.9.3 多线程 ...

    Java数据库编程宝典4

    4.7.1 分布式事务管理 4.7.2 Connection对象 4.8 SQL语句 4.8.1 Statement对象 4.8.2 PreparedStatement语句 4.8.3 CallableStatement 4.9 事务 4.9.1 事务独立性等级 4.9.2 事务存储点 4.9.3 多线程 ...

    Java数据库编程宝典1

    4.7.1 分布式事务管理 4.7.2 Connection对象 4.8 SQL语句 4.8.1 Statement对象 4.8.2 PreparedStatement语句 4.8.3 CallableStatement 4.9 事务 4.9.1 事务独立性等级 4.9.2 事务存储点 4.9.3 多线程 ...

    Java数据库编程宝典3

    4.7.1 分布式事务管理 4.7.2 Connection对象 4.8 SQL语句 4.8.1 Statement对象 4.8.2 PreparedStatement语句 4.8.3 CallableStatement 4.9 事务 4.9.1 事务独立性等级 4.9.2 事务存储点 4.9.3 多线程 ...

    后端开发关键的后端开发技巧和常用的总结概要.docx

    解决方案:SQL优化、索引设计、事务管理、引入NoSQL或分布式数据库 三、安全性问题 数据安全与隐私保护 防止SQL注入与XSS攻击 加密敏感数据传输与存储 解决方案:参数化查询、HTTPS加密、使用哈希与盐值对密码加密...

    数据库系统原理练习.doc

    在分布式数据库系统中,将数据库划分为若干不相交的逻辑子集,且每个场地存储 一个逻辑子集的数据分配策略称为( ) A.集中式 B.分割式 C.混合式 D.组合式 15.在面向对象数据库系统中,对象定义采用的信息隐蔽...

    大数据的存储管理技术.doc

    本文主要分析了大数据面临 的存储管理问题以及简述了存储管理关键技术。 【关键词】大数据 分布式文件系统 分布式数据库 NoSQL数据库 云数据库 1 大数据面临的存储管理问题 1.1 存储规模大 大数据的一个显著特征就是...

    erperperp.zip

    2.简述ERP与MRPⅡ有哪些主要区别? (1)在资源管理范围方面的差别; MRPⅡ主要侧重对企业内部人、财、物等资源的管理,ERP系统提出了供应链(Supply Chain)的概念,即把客户需求和企业内部的制造活动以及供应...

    java 面试题 总结

    Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接...

    超级有影响力霸气的Java面试题大全文档

    31、EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?  SessionBean: Stateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立一个Bean的实例时,EJB容器不一定要创建...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    180多页面试题,前前后后不间断的更新了两年,准备换工作时,总是拿来看看,有比较好的面试题,也不间断的更新,面试题目录如下: 【基础】面向对象的特征有哪些方面 13 ...4、ZooKeeper在大型分布式系统中的应用 189

    net学习笔记及其他代码应用

    1. 简述 private、 protected、 public、 internal 修饰符的访问权限。 答 . private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类中可以访问。 public : 公共成员,完全公开,...

    asp.net知识库

    CMT DEMO(容器管理事务演示) 事务隔离性的一些基础知识 在组件之间实现事务和异步提交事务(NET2.0) 其它 在.NET访问MySql数据库时的几点经验! 自动代码生成器 关于能自定义格式的、支持多语言的、支持多数据库的...

Global site tag (gtag.js) - Google Analytics