精华内容
下载资源
问答
  • 记得好像有个命令,可以在clp中输入命令回车后,不落实,然后执行一个commit命令后才落实的,有人知道这个命令么? ...
    记得好像有个命令,可以在clp中输入命令回车后,不落实,然后执行一个commit命令后才落实的,有人知道这个命令么?

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14951038/viewspace-589058/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/14951038/viewspace-589058/

    展开全文
  • 分布式提交的问题 在分布式系统中,为了保证数据的高可用,通常会将数据保留多个副本(replica),这些副本会放置在不同的物理的...下面介绍的两阶段提交和三阶段提交都是通过引入一个协调者来进行协调。 两阶段提交 概述

    分布式提交的问题

    在分布式系统中,为了保证数据的高可用,通常会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上。
    在数据有多份副本的情况下,如果网络、服务器或者软件出现故障,会导致部分副本写入成功,部分副本写入失败。这就造成各个副本之间的数据不一致,数据内容冲突,造成事实上的数据不一致。

    解决思路

    可以看到,这里出现问题的主要原因是多个副本之间没有同步机制,可以增加一个协调机制来解决数据不一致问题。下面介绍的两阶段提交和三阶段提交都是通过引入一个协调者来进行协调。

    两阶段提交

    概述

    1. 请求阶段

    事务协调者通知每个参与者准备提交或取消事务,然后进入表决过程,参与者要么在本地执行事务,写本地的redo和undo日志,但不提交,到达一种"万事俱备,只欠东风"的状态。请求阶段,参与者将告知协调者自己的决策: 同意(事务参与者本地作业执行成功)或取消(本地作业执行故障)。

    2. 提交阶段

    在该阶段,写调整将基于第一个阶段的投票结果进行决策: 提交或取消。
    当且仅当所有的参与者同意提交事务,协调者才通知所有的参与者提交事务,否则协调者将通知所有的参与者取消事务。
    参与者在接收到协调者发来的消息后将执行响应的操作。

    解决了哪些问题

    在正常的情况下,如果第一阶段某些参与者出现问题,那么其他所有参与者都能够知道事务失败了,可以执行取消操作,数据保持了一致性。
    如果所有的参与者都能够执行成功,那么在提交阶段,所有事务提交,数据也是一致的。

    还有哪些问题

    1. 阻塞
      在请求和提交阶段都是阻塞的,多个参与者都要进行决策,阻塞时间边长,如果出现网络问题,长时间等待阻塞。
    2. 单点故障
      协调者的作用非常重要,协调者挂了,参与者长期阻塞。
    3. 不一致
      如果协调者在提交阶段中间挂了,某些参与者收到了提交命令,某些参与者没有收到,还是会出现数据不一致情况。

    三阶段提交

    概述

    三阶段提交协议在协调者和参与者中都引入超时机制,并且把两阶段提交协议的第一个阶段分成了两步: 询问,然后再锁资源,最后真正提交。

    1. canCommit阶段

    协调者向参与者发送commit请求,参与者如果可以提交就返回yes响应,否则返回no响应

    2. preCommit阶段

    协调者根据参与者canCommit阶段的响应来决定是否可以继续事务的preCommit操作。根据响应情况,有下面两种可能:

    1. 协调者从所有参与者得到的反馈都是yes:
      那么进行事务的预执行,协调者向所有参与者发送preCommit请求,并进入prepared阶段。
      参与者接收到preCommit请求后会执行事务操作,并将undo和redo信息记录到事务日志中。
      如果一个参与者成功地执行了事务操作,则返回ACK响应,同时开始等待最终指令。
    2. 协调者从所有参与者得到的反馈有一个是No或是等待超时之后协调者都没收到响应:
      那么就要中断事务,协调者向所有的参与者发送abort请求。
      参与者在收到来自协调者的abort请求,或超时后仍未收到协调者请求,执行事务中断。

    3. doCommit阶段

    协调者根据参与者preCommit阶段的响应来决定是否可以继续事务的doCommit操作。根据响应情况,有下面两种可能:

    1. 协调者从参与者得到了ACK的反馈:
      协调者接收到参与者发送的ACK响应,那么它将从预提交状态进入到提交状态,并向所有参与者发送doCommit请求。
      参与者接收到doCommit请求后,执行正式的事务提交,并在完成事务提交之后释放所有事务资源,并向协调者发送haveCommitted的ACK响应。
      协调者收到这个ACK响应之后,完成任务。
    2. 协调者从参与者没有得到ACK的反馈, 也可能是接收者发送的不是ACK响应,也可能是响应超时:
      执行事务中断。

    解决了哪些问题

    1. 减少阻塞
    2. 如果第一个阶段,参与者挂了,或者协调者挂了,最终数据都是一致的,因为超时机制,也不会一直等待。

    还有哪些问题

    如果进入PreCommit后,Coordinator发出的是abort请求,假设只有一个Cohort收到并进行了abort操作,而其他对于系统状态未知的Cohort会根据3PC选择继续Commit,此时系统状态发生不一致性。

    展开全文
  • 第一部分阐述两阶段提交的原理和优缺点。 第二部分阐述三阶段提交的原理和优缺点。 第三部分阐述如何解决业务中最终一致性的问题。 一.两阶段提交 两阶段提交方法是用于分布式事务中用来完成事务操作的。 ...

    本文主要分为三个部分

    第一部分阐述两阶段提交的原理和优缺点。

    第二部分阐述三阶段提交的原理和优缺点。

    第三部分阐述如何解决业务中最终一致性的问题。

     

    一.两阶段提交

    两阶段提交方法是用于分布式事务中用来完成事务操作的。

     

    两阶段提交是一种思想,XA协议,TCC,Paxos,Raft都用到了这种思想。

     

    这里先基于XA协议谈一下,因为我们一般提到的两阶段提交都是基于XA协议

     

    两阶段提交分为投票提交两个阶段。

    投票阶段,协调者向参与者发送事务请求,参与者进行操作并记录进日志,但不提交,并将操作结果通知协调者。

    提交阶段,协调者收到参与者的操作结果后,如果都是成功的,就通知参与者提交。如果有不成功,就通知参与者回滚。

     

    它的优点是原理简单,实现方便。

    它的缺点是会出现单点故障,同步阻塞,数据不一致的问题。

     

    由于XA协议会在第一阶段就锁定资源,所以会有一些性能问题。

     

    同样运用到两阶段提交思想的TCC协议,则针对性能做了一些提升

     

    TCC也是一种两阶段提交方法,它的全称是Try,Confirm,Cancel。它分为预留阶段和确认阶段,预留阶段参与者要实现事务操作,确认和撤销操作。确认阶段,如果所有参与者确认成功,就确认操作,否则就实现撤销操作。

     

    它是通过业务代码来实现的 。它本质上是一种补偿事务,就是他为每一个操作都注册一个确认和撤销的操作。这样可以减轻数据库压力,可以提升并发性能。

     

    通俗的讲TCC协议就是把出现成功和失败后的应对操作都考虑到了,并用业务代码编写。

     

    另外,两阶段提交会出现数据不一致的问题。

    在第二阶段进行提交时,如果这时发生网络故障或者协调者发生了故障,导致只有一部分参与者收到消息进行提交,这时这个分布式系统就会出现不一致的问题。

     

    二.三阶段提交

    这时候又出现了三阶段提交方法,三阶段提交在二阶段提交的基础上引入了超时机制准备机制,解决同步阻塞和改进数据不一致性的问题。

     

    第一步

    协调者向参与者询问是否可以执行事务操作。

     

    第二步

    协调者在得到参与者的回复后决定是否进行预提交。

    如果进行预提交,参与者执行事务操作,记录事务日志,返回操作结果给协调者。

    如果不进行预提交,参与者收到不提交的消息或者超时未接收到协调者的消息或者协调者没有收到参与者的响应,就中断事务操作。

     

    第三步

    协调者发送命令给所有参与者,执行提交或中断操作。

    如果执行提交操作,参与者收到消息后正式提交事务,提交事务后,向协调者发送确认响应,协调者收到所有确认响应后,完成事务。

    如果执行中断操作,参与者收到消息根据在预提交阶段记录的日志进行回滚,回滚后向协调者发送确认响应,协调者收到所有确认响应后,中断和结束事务。

     

    三阶段提交的优点是解决了二阶段提交方法同步阻塞的问题,改善了二阶段提交的数据不一致性的问题。

     

    三阶段提交的缺点和二阶段一样:

    1.需要锁定资源,会降低系统性能。

    2.仍然存在数据不一致性的问题,三阶段在最后提交阶段,如果协调者发出的中断命令,由参与者没有收到,参与者在超时后会自动提交事务,造成了数据不一致性。

     

    三.既然两阶段提交和三阶段提交都是强一致性,怎么解决业务中的最终一致性问题?

    通过分布式消息来确保事务最终一致性。

    在 eBay 的分布式系统架构中,架构师解决一致性问题的核心思想就是:将需要分布式处理的事务通过消息或者日志的方式异步执行,消息或日志可以存到本地文件、数据库或消息队列中,再通过业务规则进行失败重试。

    另外,建议在开发实现分布式系统,如果不是必须,尽量不要实现事务(ACID),可以考虑采用强一致性(两阶段提交和三阶段提交)或最终一致性。

     

    参考

    1.极客时间 《分布式技术原理与算法解析》

    2.极客时间 《分布式协议与算法实战》

     

    展开全文
  • 两阶段提交

    2019-09-03 23:20:56
    两阶段提交、本地消息表、消息队列、幂等性、 两阶段提交:2PC 事务管理器:中间协调者,负责协调每个事务的提交 事务执行者 过程: 第一阶段:预提交阶段:每个数据库执行sql,但是不提交。预先锁定资源,...

    分布式事务

    1. 产生:系统的服务化,服务的拆分化,分库分表,最终产生了分布式事务的问题
    2. 两阶段提交、本地消息表、消息队列、幂等性、

    两阶段提交:2PC

    1. 事务管理器:中间协调者,负责协调每个事务的提交

    2. 事务执行者

    3. 过程:

       第一阶段:预提交阶段:每个数据库执行sql,但是不提交。预先锁定资源,预先校验,
       第二阶段:commit/rollback
       这两个阶段的间隔时间很短,而且具有重试机制。
       记录日志,以便提供人工干预的解决方案。
      
    4. 分布式事务不可能100%解决,只可以尽量提高成功概率。

    5. Atomikos

    6. XA:两阶段提交事务

       XAResource
      

    TCC两阶段补偿方案:try-confirm-cancel

    1. 过程
      微服务下的两阶段提交方案
      第一阶段:预留资源try阶段:定义一系列中间状态,比如:订单更新状态、冻结库存、创建草稿出库单状态
      第二阶段:确认资源confirm/cancel:该阶段如果出现调用错误,则先使用 重试机制,如果重试仍旧失败,则人工根据log进行人工干预,或者使用定时任务对log进行补偿操作。
      锁定资源的api
      confirm的api
      cancel的api

       	问题:每个api的幂等性、事务日志的实现
      
    2. 微服务下的两阶段提交TCC与2

    展开全文
  • 在分布式系统中,为了保证数据的高可用,通常会将数据保留多个副本...本文介绍分布式事务处理方案之一的两阶段提交协议。分布式事务分布式事务是指发生在多个数据节点之间的事务,分布式事务比单机事务要复杂的多...
  • 3PC的优点和缺点: 优点: 1.相比2PC,最大的优点就是降低了第一阶段的阻塞范围(第一阶段是不阻塞的...2.能够在单点故障后继续达成一致(2PC在提交阶段会出现此问题),而3PC会根据协调者的状态进行回滚或者提交 ...
  • 随着大型网站的各种高并发访问、海量数据处理等场景越来越多,...本文主要介绍关于分布式事务,二阶段提交和三阶段提交。  在分布式系统中,为了保证数据的高可用,通常,我们会将数据保留多个副本(replica),这些
  •  昨天改EJB程序时出现了一个bug,服务器报了一个transaction does not exist,研究了大半天,终于发现原来是因为我的两个事物同时修改一条记录,weblogic两阶段提交时产生的问题,先上代码(示例,不是真实那个啊)...
  • 关于http post两阶段提交的一些问题

    千次阅读 2012-06-14 14:36:00
    当然有很多其它原因,但是对于POST的两阶段提交引起的访问超时也发生过好几次,而且基本无解,只能修改实现方式,尽量减少传输的数据以便改用GET方式。 有不少浏览器厂商对于POST的提交采用两阶段发送数据,特别是...
  • {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":9,"count":9}]},"card":[{"des":"用于处理分布式环境下高性能事务一致性问题。可以与 DRDS、RDS、Oracle、MySQL、...
  • 分布式环境下的各种问题:通讯异常、网络分区、成功失败超时三态、节点故障 事务一致性 数据库事务包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability) 分布式事务: ...
  • (4)两阶段提交无法解决的问题 当协调者出错,同时参与者也出错时,两阶段无法保证事务执行的完整性。 考虑协调者再发出commit消息之后宕机,而唯一接收到这条消息的参与者同时也宕机了。 那么即使协调者通过选举...
  • 两阶段提交(2PC) 准备阶段: 提交阶段: 2PC存在的问题: 三阶段提交(3PC) CanCommit: PreCommit(如果CanCommit阶段中所有参与者都返回“Yes”) DoCommit 3PC存在的问题: 3PC在2PC上的改动点: ...
  • 两阶段提交协议

    2016-02-01 17:16:52
    两阶段提交协议(1) 两阶段提交协议[10](Two Phase Commit Protocol,2PC协议)可以保证数据的强一致性,许多分布式关系型数据管理系统采用此协议来完成分布式事务。它是协调所有分布式原子事务参与者,并决定...
  • 随着大型网站的各种高并发访问、海量...本文主要介绍关于分布式事务,二阶段提交和三阶段提交。  在分布式系统中,为了保证数据的高可用,通常,我们会将数据保留多个副本,这些副本会放置在不同的物理的机器上...
  • 文章目录问题协调者统一调度二阶段提交协议 ...在分布式事务中,两阶段和三阶段提交是经典的一致性算法,那么两阶段和三阶段提交的具体流程是怎样的,三阶段提交又是如何改进的呢? 协调者统一调度 在分布式事务
  • 前两天和百度的一个同学聊MySQL两阶段提交,当时自信满满的说了一堆,后来发现还是有些问题的理解还是比较模糊,可能是因为时间太久了,忘记了吧。这里再补一下:)5.3.1事务提交流程MySQL的事务提交逻辑主要在函数ha_...
  • 没有任何事情是完美的。特别是在分布式的情况下...两阶段问题可以这样分解: 1,协调者出错,参与者也出错; 2,协调者出错,参与者不出错; 3,协调者不出错,参与者出错; 4,协调者不出错,参与者也不
  • {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":9,"count":9}]},"card":[{"des":"用于处理分布式环境下高性能事务一致性问题。可以与 DRDS、RDS、Oracle、MySQL、...
  • 【MySQL】【笔记】MySQL的两个两阶段1.事务的两阶段提交​ MySQL为了兼容其他非事务引擎的复制,在server...​ MySQL通过两阶段提交解决了服务层binlog与引擎层Innodb的redo log的一致性与协同问题。第一阶段:In...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,034
精华内容 413
关键字:

两阶段提交问题