分布式系统中的一致性协议之两阶段提交协议(2PC)

两阶段提交协议是很常见的解决分布式事务的方式,他可以保证分布式事务中,要么所有参与的进程都提交事务成功,要么都取消事务,这样做可以在分布式环境中保持ACID中A(原子性)。
     在两阶段提交协议中,包含了两种角色:协调者与参与者。参与者就是实际处理事务的机器,而协调者就是其中一台单独的处理分布式事务的机器。
     该算法分为两个阶段:
     1.投票阶段
     2.提交阶段

阶段1:请求阶段(commit-requestphase,或称表决阶段,votingphase)

在请求阶段,协调者将通知事务参与者准备提交或取消事务,然后进入表决过程。在表决过程中,参与者将告知协调者自己的决策:同意(事务参与者本地作业执行成功)或取消(本地作业执行故障)。这里的取消是指该参与者所在的机器没有准备好,或者出现了故障。因此无法执行该事务。

阶段2:提交阶段(commitphase)

在该阶段,协调者将基于第一个阶段的投票结果进行决策:提交或取消。当且仅当所有的参与者同意提交事务协调者才通知所有的参与者提交事务,否则协调者将通知所有的参与者取消事务。参与者在接收到协调者发来的消息后将执行响应的操作。协调者如果发现有一个投票是VOTE_ABORT,那么将创建一个GLOBAL_ABORT通知所有的参与者终止该事务。如果都是VOTE_COMMIT,那么协调者将发送一个GLOBAL_COMMIT,告知所有的参与者执行该事务。
     图1,图2 是协调者与参与者的运行时的状态机。

算法本身并不难。

                 图1 协调者的状态机
图2  参与者的状态机

实现中的问题:
      当然如果协调者发送一个GLOBAL_COMMIT信息,A收到了,B没收到,B可以根据A的状态,自动将自己设置成COMMIT状态。同理可以根据其他的参与者的状态设置自己的状态为GLOBAL_ABORT状态。
        但是如果Q发现其他的节点都是处于READY状态,并很长时间都没有变化,说明协调者服务器down机了,这也就是该算法可能会出现的问题,协调者的长时阻塞问题。解决该问题的方法就是设置超时机制,当时间超过了最长等待时间,设置该事务为ABORT状态。

分布式系统中的一致性协议之两阶段提交协议(2PC)相关推荐

  1. 分布式系统中的一致性协议

    本文详细介绍目前分布式系统中常见的一些一致性协议:两阶段提交协议,三阶段提交协议,向量时钟,RWN协议,paxos协议,Raft协议.下面就一个个详细讲解下. 一. 两阶段提交协议(2PC) 两阶段提 ...

  2. 什么是两阶段提交协议2PC CAP

    https://www.cnblogs.com/balfish/p/8658691.html

  3. 关于分布式事务、两阶段提交协议、三阶提交协议

    随着大型网站的各种高并发访问.海量数据处理等场景越来越多,如何实现网站的高可用.易伸缩.可扩展.安全等目标就显得越来越重要.为了解决这样一系列问题,大型网站的架构也在不断发展.提高大型网站的高可用架构 ...

  4. 分布式系统原理 之6 两阶段提交协议

    分布式系统原理 两阶段提交协议 两阶段提交协议是一种经典的强一致性中心化副本控制协议[2][3].虽然在工程中该协议有较多的问题,但研究该协议能很好的理解分布式系统的几个典型问题. 1. 问题背景 两 ...

  5. redis实现轮询算法_白话分布式系统中的一致性哈希算法

    本文首发于:白话分布式系统中的一致性哈希算法 微信公众号:后端技术指南针 持续输出干货 欢迎关注! 通过本文将了解到以下内容:分布式系统的概念和作用 分布式系统常用负责均衡策略 普通哈希取模策略优缺点 ...

  6. 两阶段提交协议(two phase commit protocol,2PC)详解

    一.协议概述 两阶段提交协议(two phase commit protocol,2PC)可以保证数据的强一致性,许多分布式关系型数据管理系统采用此协议来完成分布式事务.它是协调所有分布式原子事务参与 ...

  7. 分布式系统中的两阶段提交协议

    分布式系统中的两阶段提交协议 在分布式系统中,每个节点虽然可以知晓自己的操作时成功或者失败,却无法知道其他节点的操作的成功或失败.当一个事务跨越多个节点时,为了保持事务的ACID特性,需要引入一个作为 ...

  8. 分布式系统理论之两阶段提交协议

    一,两阶段提交协议介绍 两阶段提交协议是用来保证分布式系统事务的协议.在分布式系统中,一个事务需要由多台机器协调完成,机器之间通过网络来通信,如何保证一组操作在多台机器上要么都做,要么都不做呢?(事务 ...

  9. Flink——Flink CheckPoint之两阶段提交协议(Two-Phase Commit Protocol)

    文章目录 两阶段提交协议 1. 两阶段提交的前提条件 2. 两阶段提交的基本算法 a. 第一阶段(提交请求阶段) b. 第二阶段(提交执行阶段) 3. 两阶段提交的缺点 Flink-两阶段提交协议 1 ...

最新文章

  1. ​GPT-3好“搭档”:这种方法缓解模型退化,让输出更自然
  2. Hibernate关系映射 一对一双向外键关联@OneToOne Annotation方式
  3. mule_Mule ESB,ActiveMQ和DLQ
  4. 139. Word Break
  5. WPF 中如何使用第三方控件 ,可以使用WindowsFormsHost 类
  6. ARM LCD简单绘图API
  7. ZooKeeper学习第一期---Zookeeper简单介绍(转)
  8. 网络原理题+复习资料
  9. java单链表 提供增删改查_java实现单链表增删改查的实例代码详解
  10. vb教材笔记_VB课堂笔记-----第五章 数据的输入与输出
  11. 收获,不止SQL优化——抓住SQL的本质--第七章
  12. linux查询cpu核心数
  13. 连接oracle数据库代码,oracle数据库的连接代码
  14. Python 爬虫 —— 网页内容解析(lxml)
  15. 使用Python PyQt5实现一个简单的图像识别软件
  16. html表白代码大全可复制,浪漫的html表白特效网页制作源代码
  17. “校内网”将不存在,“校内网”更名为“人人网”
  18. 关于Excel表格快捷键
  19. 怎样帮宝宝起个好名字?起名必备的五大招在这里了
  20. Java证书keystore生成过程

热门文章

  1. 绝了!这个开源验证码项目,差点晚上瘾...
  2. 皮一皮:论智能酒店的高等级提示...
  3. 新年不宕机就等它了!戴尔官网高效编程电脑OptiPlex 直降2500,低至3099!
  4. Grafana 6.4 正式发布!
  5. 主流Java数据库连接池比较及前瞻
  6. IT从业者进阶指南:如何提升自身的不可替代性
  7. 电脑版java运行条件,Java Runtime Environment电脑版-Java Runtime Environment(Java运行环境)8.0.221 x64正式版-蜻蜓手游网...
  8. c 服务器通信和文件传输,服务器、终端和文件传输方法
  9. linux debian系统卸载jdk,Debian/Ubuntu系统 JDK卸载、安装、环境配置
  10. 人脸识别开源网络笔记