分布式事务简介

    学过数据库理论的都知道事务的感念,简单点说就是一系列操作要么全做,要么全不做。我常举的一个例子就是要把甲账户转账1000元到乙账户,至少要做两步操作,首先从甲账户减1000元,然后在乙账户加1000元,这个转账要么两步都做,要么都不做,这就是一个事务的概念。绝对不允许出现甲账户减了1000元,乙账户没变化这样的情况。
    有些时候,一个事务会在多个数据库之间进行。例如上面那个例子,甲账户数据存在A数据库中,乙账户数据存在B数据库中,要完成这个事务就需要在A数据库和B数据库中进行,这样跨越多个数据库的事务就是分布式事务。
    分布式事务(Distributed Transaction Processing,DTP)与我们通常所用的单数据库事务有所不同,要复杂一些,主要过程就是两阶段提交:第一阶段是预提交,也就是把对数据库的操作提交各数据库,询问各数据库这样的操作能不能提交,各数据库则作出回应;第二阶段是提交或者回滚,根据第一阶段各数据库的应答结果,作出提交或回滚决定,在这里对于各数据库的应答结果是一票否决的,只要有一个数据库回应不能提交,则整个事务回滚,全部数据库都可以提交时,整个事务才可以提交,然后通知各数据库提交或者回滚操作。
    如何处理分布式事务,也有相关规范存在,Open Group的X/Open XA规范就是对分布式事务的操作模型、接口进行定义的,影响非常大。在Java里面,有JTA(Java Transaction API)规范,但也遵守了X/Open XA规范,为相关产品和开发提供标准。
    在分布式事务里面,主要有5种角色:
    1、应用程序。利用分布式事务的接口提供分布式事务的应用。
    2、应用服务器。是应用程序的容器,需要知道分布式事务的状态。
    3、事务管理器。对分布式事务进行管理,如开启、提交、回滚事务。
    4、资源管理器。提供应用程序对资源的访问,执行事务中的部分操作,主要是数据库、消息队列等资源,需要支持两阶段提交。
    5、通信资源管理器。对事务的状况进行传播,主要是消息中间件。
    对于分布式事务,有不少组件可用,如java里的EJB、开源组件AtomikosTransactionsEssentials、JOTM等,微软的MTS。在需要分布式事务的应用里面,把这些组件集成进去就可以提供分布式事务的支持了。
    由于分布式事务涉及的资源更多,执行的步骤更复杂,需要更多的资源、时间来完成一个事务,对应用程序的性能会有所影响。出于性能方面的考虑,能够不使用分布式事务就不用,如果确实需要用,也有很多组件可以选择。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值