`
lobin
  • 浏览: 425969 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

分布式事务

 
阅读更多

分布式事务

分布式事务

事务

事务特性

分布式事务

分布式事务一致性实现

两阶段提交协议

Dynamic Two Phase Commitment (D2PC) protocol

三阶段提交协议

Paxos

分布式事务实现

 

事务

事务是计算机应用中不可或缺的组件模型,它保证了用户操作的原子性 ( Atomicity )、一致性 ( Consistency )、隔离性 ( Isolation ) 和持久性 ( Durabilily )。 

 

事务存在本地事务和分布式事务。本地事务的处理局限在当前事务资源内。

 

所谓资源,比如数据库连接、数据源、连接的数据库都可以认为是一种资源,数据源可以认为对应的就是连接的那个数据库。

 

数据库事务是我们经常接触到的一个事务场景,实际上,除了数据库事务之外,我们很少能遇到甚至直接考虑事务的案例。虽然,但是,事务的确不只是说的数据库事务,也不仅限于数据库事务,除了数据库事务之外,也存在其他很多需要考虑事务的情况,只是一般很难碰到这样的特殊场景罢了。

 

如在单数据源的情况下,对应数据库DBA,数据库连接connection,通过这个connection往数据库中插入2条记录,执行插入后,完成事务提交,本地事务就能保证完成(成功或失败)。这个是最常见的一个本地事务场景,在这个例子中,本地事务实际上依赖于数据库对事务的支持,如果数据库不支持事务,那么在这个例子中,本地事务也无法保证事务完成(成功或失败) 。

 

但如果是多数据源的情况下,比如有两个数据库DBA,DBB,对应的数据库连接dbca,dbcb,通过dbca往数据库DBA插入一条数据A,通过dbcb往数据库DBB插入一条数据B,完成事务提交,这种情况下本地事务就无法保证事务完成,可能出现A数据插入成功而B数据插入失败,这个时候就需要使用分布式事务了。

 

 

事务

事务特性

事务的5个基本特性:

原子性

Atomicity

一致性

Consistency 

隔离性

Isolation 

持久性

Durability 

 

分布式事务

 

 

 

 

 

分布式事务一致性实现

两阶段提交协议

角色

协调者

参与者

基本算法

准备阶段

提交阶段

消息

协议实现

JOTM

JOTM2

 

两阶段提交协议

角色

协调者

 

参与者

基本算法

两阶段提交协议由两阶段组成:

准备阶段

准备阶段(Prepare  phase)或叫作准备提交阶段、提交请求阶段(Commit request phase)、请求提交阶段、投票阶段(Voting phase )

提交阶段

提交阶段(Commit phase)或叫作执行阶段、完成阶段(Completion phase )

 

 

 

 

 

两阶段提交协议

消息

prepare

Prepare消息也称vote request消息、query to commit消息

 

agreement 

abort 

commit 

acknowledgment 

rollback 

 

事务协调者(通常是事务管理器)向每个参与者发送prepare消息时,由于网络故障或者所有参与者都由于故障宕机而无法接收prepare消息,则整个事务过程还没开始就直接结束。

 

 

 

 

 

 

3PC

3PC(三阶段提交协议)

角色

参与者

参与者有多个。

 

协调者

 

2PC(两阶段提交协议)分3个阶段完成提交

1、询问(Can-Commit)提交阶段

2、预(Pre-Commit)提交阶段

3、提交(Do-Commit)阶段

 

 

 

 

                                                   +---------------+

    -----------------------------abort--->|               |<---abort-----------------------------

    | --------------------------commit----|               |----commit-------------------------- |

    | | -------------------------ack----->|               |<-----ack------------------------- | |

    | | |  ----------------------abort--->|               |<----------------------abort---  | | |

    | | |  | ---------------------pre-----|    协调者     |-----pre--------------------- |  | | |

    | | |  | | -------------------ack---->|               |<----ack------------------- | |  | | |

             | | |  | | |  --------------abort---->|               |<----abort--------------  | | |  | | |

    | | |  | | |  | -------------can------|               |------can------------- |  | | |  | | |

    | | |  | | |  | | -----------ack----->|               |<-----ack----------- | |  | | |  | | |

    | | |  | | |  | | |                   +---------------+                   | | |  | | |  | | |

    | | |  | | |  | | |                      ^    |    ^                      | | |  | | |  | | |

    | | |  | | |  | | |                      |   can   |                      | | |  | | |  | | |

             | | |  | | |  | | |                    abort  |   ack                     | | |  | | |  | | |

             | v |  | v |  | v |                      |    v    |                      | v |  | v |  | v |

          +-----------------------+            +-----------------------+            +-----------------------+

          |         参与者1       |            |        参与者2        |            |          参与者n      |

 +-----------------------+            +-----------------------+            +-----------------------+

 

 

 

 

 

 

分布式事务实现

JOTM

JOTM2

Atomikos

JBoss JTA

… …

 

 

JOTM

资源

资源管理器 

协调者

参与者

事务

事务管理器

JOTM Java Open Transaction Manager实例

 

 

 

 

JOTM

JOTM(Java Open Transaction Manager)是ObjectWeb的一个开源JTA实现,本身也是开源应用程序服务器JOnAS(Java Open Application Server)的一部分,为其提供JTA分布式事务的功能。 

 

 

JOTM

资源

org.objectweb.jotm.Resource资源

javax.transaction.xa.XAResource资源

 

JOTM

org.objectweb.jotm.Resource资源

 

实现

org.objectweb.jotm.ControlImpl

 

实现接口

org.objectweb.jotm.Coordinator

org.objectweb.jotm.RecoveryCoordinator

org.objectweb.jotm.Terminator

org.objectweb.jotm.TimerEventListener

org.objectweb.jotm.Resource

org.objectweb.jotm.Control

 

 

实现

org.objectweb.jotm.SubCoordinator

 

实现接口

org.objectweb.jotm.Resource

 

 

 

JOTM

javax.transaction.xa.XAResource资源

 

 

 

JOTM

协调者

实现

org.objectweb.jotm.ControlImpl

 

实现接口

org.objectweb.jotm.Coordinator

org.objectweb.jotm.RecoveryCoordinator

org.objectweb.jotm.Terminator

org.objectweb.jotm.TimerEventListener

org.objectweb.jotm.Resource

org.objectweb.jotm.Control

 

 

 

实现

org.objectweb.jotm.SubCoordinator

 

实现接口

org.objectweb.jotm.Resource

 

 

 

 

 

 

协调者源代码分析

org.objectweb.jotm.ControlImpl

org.objectweb.jotm.SubCoordinator

实际上,org.objectweb.jotm.SubCoordinator才是真正的协调者实现

 

prepare方法

prepare 方法对应两阶段提交协议的第一阶段准备阶段(Prepare  phase),协调者向所有参与者节点发起Prepare消息询问各个参与者节点是否可以执行提交操作,并开始等待各参与者节点的响应。 关键代码在doPrepare方法中。

 

 

 

 

JOTM

参与者

 

 

 

 

 

 

 

 

 

JOTM

事务管理器

实现

org.objectweb.jotm.Current

 

 

 

实现接口

javax.transaction.UserTransaction

javax.transaction.TransactionManager

javax.naming.Referenceable

java.io.Serializable

 

 

 

 

 

 

 

 

JOTM

JOTM Java Open Transaction Manager实例

 

 

 

 

 

 

 

 

 

JOTM2

Atomikos

 

X/Open DTP——分布式事务模型, http://www.cnblogs.com/aigongsi/archive/2012/10/11/2718313.html 

 

0
0
分享到:
评论

相关推荐

    java分布式事务demo

    Java分布式事务是大型分布式系统中不可或缺的一个重要组成部分,它确保在多个网络节点间的数据操作能够保持一致性和完整性。在分布式环境中,由于多个服务之间可能存在数据交互,因此需要一种机制来处理跨服务的数据...

    深入理解分布式事务,高并发下分布式事务的解决方案

    本文来自于csdn,本文主要从分布式的原因,事务特性,和解决方案中深入理解了分布式事务,希望对您的学习有所帮助。 分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的...

    深入理解分布式事务

    ### 深入理解分布式事务 #### 一、分布式事务定义及重要性 分布式事务是指在分布式系统中,为了确保跨多个节点上的操作能够正确地完成或者全部回滚,所采取的一种事务处理机制。在这样的场景下,事务的参与者、...

    springboot多数据源即分布式事务解决方案

    SpringBoot作为一款轻量级的框架,提供了便捷的多数据源配置和分布式事务管理方案,使得开发者能够高效地管理和操作不同的数据库。本文将详细探讨SpringBoot如何实现多数据源以及分布式事务。 首先,我们要理解什么...

    基于Hyperf框架的TCC分布式事务组件.zip

    TCC(Try-Confirm-Cancel)模式是一种著名的分布式事务解决方案,它适用于大型微服务架构。本资料"基于Hyperf框架的TCC分布式事务组件"旨在帮助开发者理解如何在Hyperf这个高性能、轻量级的PHP微服务框架中实现TCC...

    浅谈分布式事务实现技术及应用场景探讨.pdf

    "浅谈分布式事务实现技术及应用场景探讨" 分布式事务是指在分布式系统中,多个节点之间的数据访问和更新操作集合,需要保证事务的原子性、一致性、隔离性和持久性。随着软件系统支持用户数的不断提高,对其架构的...

    java+spring+mybatis+mysql+RuoYi-atomikos-实现分布式事务.zip

    本项目"java+spring+mybatis+mysql+RuoYi-atomikos-实现分布式事务.zip"是一个基于若依(RuoYi)框架改造的多模块分布式事务解决方案,它利用了Atomikos这一强大的分布式事务管理器。以下将详细解析这个项目的知识点...

    分布式事务若依框架文档

    ### 分布式事务若依框架文档 #### 一、分布式事务基本概念 在理解分布式事务之前,我们首先需要了解数据库事务的基本属性,即ACID特性。 - **原子性(Atomicity)**:事务中的所有操作要么全部成功,要么全部失败...

    微服务架构的分布式事务解决方案(Dubbo分布式事务处理)

    分布式事务是一个绕不过去的挑战!微服务架构本质上就是分布式服务化架构,微服务架构的流行,让分布式事务问题日益突出!尤其是在订单业务、资金业务等系统核心业务流程中,一定要有可靠的分布式事务解决方案来保证...

    大规模SOA系统中的分布式事务处事

    在大规模的SOA(Service-Oriented Architecture,面向服务架构)系统中,分布式事务处理是一项至关重要的技术。这种架构通常涉及多个独立的服务协同工作,每个服务都可能有自己的数据存储,因此,确保这些服务之间的...

    spring+jotm+ibatis+mysql实现JTA分布式事务

    在IT行业中,分布式事务处理是复杂系统架构中的一个重要环节,特别是在多数据库或服务协同工作的场景下。本项目“spring+jotm+ibatis+mysql实现JTA分布式事务”旨在利用这些技术来确保在分布式环境中的数据一致性。...

    分布式事务源代码

    分布式事务是一种在分布式系统中处理数据一致性的重要技术。在大型网络应用中,数据往往分散在多个数据库或服务器上,为了保证这些数据的一致性,就需要使用分布式事务来协调跨多个节点的操作。本资料包“分布式事务...

    基于Java的分布式事务解决方案myth设计源码

    该项目是一个采用消息队列解决分布式事务的开源框架,基于Java语言开发(JDK1.8),并支持dubbo、springcloud、motan等RPC框架进行分布式事务处理。通过该项目,开发者可以学习并实践分布式事务的处理,为后续的...

    ejb3.0 分布式事务

    【ejb3.0 分布式事务详解】 在企业级Java应用中,EJB(Enterprise JavaBeans)3.0提供了一种强大而灵活的方式来处理分布式事务。分布式事务是指跨越多个数据库或资源管理器的单一逻辑操作,确保了数据的一致性和...

    分布式事务与Seata.pptx

    分布式事务与Seata 分布式事务是指在分布式系统中跨多个资源或服务进行的交易操作,需要保证操作的原子性、一致性、隔离性和持久性。分布式事务的解决方案包括Seata、TCC、SAGA、X/Open XA等。 分布式事务的产生是...

    分布式事务.pdf

    分布式事务是为了解决分布式系统中跨越多个节点的操作,要求这些操作要么全部成功要么全部失败的一种事务机制。它是为了保证在不同节点上的数据一致性而产生的概念。分布式事务广泛应用于微服务架构、数据库分库分表...

    微服务架构的分布式事务控制及解决方案视频教程

    最全分布式事务视频课程详细讲解,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 视频课程大纲: 1.事务基本概念讲解(本地、分布式) 2.分布式事务理论(CAP、BASE) 3.分布式事务解决方案之2PC(xa、...

Global site tag (gtag.js) - Google Analytics