分布式事务——两阶段提交

  • 时间:
  • 浏览:0
  • 来源:uu快3苹果版_uu快3单双_套路

一般具体情况下,两阶段提交机制都能较好的运行,当在事务进行过程中,有参与者宕机时,重启之后,都可以 通过询问其他参与者之后协调者,从而知道你這個事务到底提交了那末。当然,你這個切的前提都有各个参与者在进行每一步操作时,前会 之后写入日志。

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

协调者协议流程如下:

在两阶段提交协议中,系统一般蕴藏两类角色:

在准备阶段,协调者将通知事务参与者准备提交或撤出 事务,写本地的redo和undo日志,但不提交,假若进入表决过程。在表决过程中,参与者将告知协调者买车人的决策:同意(事务参与者本地作业执行成功)或撤出 (本地作业执行故障)。

为了出理 你這個分布式一致性问題,前人在性能和数据一致性的反反复复权衡过程中总结了其他典型的协议和算法。其中比较著名的有二阶提交协议(Two Phase Commitment Protocol)、三阶提交协议(Three Phase Commitment Protocol)和Paxos算法。针对分布式事务,是X/Open 你這個组织定义的一套分布式事务的标准X/Open DTP(X/Open Distributed Transaction Processing ReferenceModel),定义了规范和API接口,都可以 由各个厂商进行具体的实现。

在分布式系统中,为了保证数据的高可用,通常会将数据保留多个副本(replica), 有有哪些副本会放置在不同的节点上。有有哪些数据节点之后是物理机器,也之后是虚拟机。为了对用户提供正确的CURD等语意,亲戚亲戚朋友需用保证有有哪些放置在不同节点上的副本是一致的,这就涉及分布式事务的问題。

两阶段提交非要出理 的困境如下:

下图为两阶段提交协议中的协调者及参与者的具体情况机。左侧a为协调者具体情况机;右侧b为参与者具体情况机。

若收到任何三个 多多参与者发送的“VOTE_ABORT”消息;

顾名思义,两阶段提交分为以下三个 多多阶段:

MySQL从5.5版本结速了支持,SQL Server 305结速了支持,Oracle 7结速了支持。

协调者协议流程如下:

本文介绍分布式事务出理 方案之一的两阶段提交协议。

大部分的关系型数据库通过两阶段提交(Two Phase Commit,2PC)算法来完成分布式事务,比如Oracle中通过dblink法律办法进行事务出理 。下面重点介绍下2PC算法。

若收到所有参与者发送的“VOTE_COMMIT”消息;

分布式事务是指居于在多个数据节点之间的事务,分布式事务比单机事务要错综复杂的多。在分布式系统中,各个节点之间在是相互独立的,需用通过网络进行沟通和协调。之后居于事务机制,都可以 保证每个独立节点上的数据操作都可以 满足ACID。假若,相互独立的节点之间无法准确地知道其他节点的事务执行具体情况。什么都从理论上来讲,三个 多多节点的数据是无法达到一致的具体情况。之后想让分布式部署的多个节点中的数据保持一致性,那末就要保证在所有节点数据的写操作,要么删剪都执行,要么删剪都有执行。假若,一台机器在执行本地事务的之后无法知道其他机器中的本地事务的执行结果,什么都它也就我想知道本次事务到底应该commit还是rollback。什么都,常规的出理 法律办法假若引入三个 多多"协调者"的组件来统一调度所有分布式节点的执行。

两阶段提交协议最早是分布式事务的专家Jim Gray在1978年的一篇文章Notes on Database Operating Systems中提及。两阶段提交协议都可以 保证数据的强一致性,即保证了分布式事务的原子性:所有结点要么全做要么全不做。其他分布式关系型数据管理系统采用此协议来完成分布式事务。它是协调所有分布式原子事务参与者,并决定提交或撤出 (回滚)的分布式算法。一并也是出理 一致性问題的算法。该算法也能出理 什么都的临时性系统故障(包括进程、网络节点、通信等故障),被广泛地使用。假若,它并非也能通过配置来出理 所有的故障,在其他具体情况下它还需用人为的参与也能出理 问題。