详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt371

两阶段提交的协议大家都比较熟悉了,解释一下每个阶段的异常处理。首先,我们需要持久化协议过程中的状态,这样如果server宕机,那么恢复的时候还能通过日志知道宕机前处于那个阶段。同时,所有对数据的修改都会先写write ahead log,保证宕机重启的之后数据也不会丢失。写日志的顺序假定为:写write ahead log-修改缓冲区-写commit/abort log。

在这个前提下,我们根据如下的时序图来讨论异常情况和处理方法。

两阶段提交协议时序

  1. 过程a没有成功,即协调者没有收到部分参与者的回应。超时后,协调者发送abort消息给参与者取消事务。参与者存在两种情况:

  • 过程1失败,网络问题导致参与者没有收到vote request消息或者此时参与者宕机。参与者重启恢复后无需做任何事。

  • 过程2失败,参与者收到了vote request,网络问题协调者没有收到回复或此时参与者宕机。参与者宕机恢复或等待超时后广播DECISION_REQUEST消息向其他参与者询问是否收到commit/abort消息。

过程b没有成功,即协调者发送commit消息之后没有收到部分参与者的回应。协调者需要重试,确认参与者的提交完毕消息,如果多次尝试不能联系上,则等待参与者上线之后解决。参与者存在两种情况:

  • 过程3失败,网络问题导致参与者没有收到commit消息或此时参与者宕机。参与者上线发现在本地日志中发现尚未提交成功,因为到达这里,可以肯定本地已做好提交准备,但是不知道协调者是决定提交,所以向协调者询问,按协调者的回复来进行提交或回滚。如果无法联系上协调者,则向其他参与者询问事务状态,如果有某一个节点已经做了提交或异常终止(说明协调者已发送了相关消息),则做同样的操作。

  • 过程4失败,参与者完成了commit/rollback,但是网络问题协调者没有收到回应或者此时参与者宕机。参与者在本地日志中发现已完成本地提交,所以可能由于网络故障导致提交完成消息没有到达协调者。所以直接忽略。这时可能协调者在等待该参与者的提交完成回应消息,所以参与者主动联系协调者告知事务状态。

过程c没有成功,即参与者发送vote回应消息之后没有等到协调者的commit/rollback消息。这个过程参与者的异常处理已经讨论过了,这里讨论协调者的异常处理。存在两种情况:

  • 过程2失败,网络问题导致协调者没有收到回复或此时协调者宕机。协调者恢复重启后,发现并未做提交操作,保险操作(因为不知道它是否发送过准备消息,或其他参与者是否做好提交准备),直接发送abort消息给所有参与者,终止事务

  • 过程3失败,网络问题导致参与者没有收到commit/rollback消息或者此时协调者宕机。协调者恢复重启后,不能保证所有参与者都已收到了提交消息,所以给所有的参与者发送commit消息,保证事务的正常提交。

两阶段提交协议的异常处理相关推荐

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

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

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

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

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

    分布式系统中的一致性协议之两阶段提交协议(2PC) 两阶段提交协议是很常见的解决分布式事务的方式,他可以保证分布式事务中,要么所有参与的进程都提交事务成功,要么都取消事务,这样做可以在分布式环境中保持 ...

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

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

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

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

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

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

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

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

  8. 【其他】2PC两阶段提交协议

    2PC两阶段提交协议 参考文章:https://blog.csdn.net/xj15010735572/article/details/86233456 背景: 在项目中开启了分布式事务,底层代码通过 ...

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

    本文转载自:https://mp.weixin.qq.com/s/87-znh7Q-SvQfF9u8O3Trg 随着大型网站的各种高并发访问.海量数据处理等场景越来越多,如何实现网站的高可用.易伸缩. ...

最新文章

  1. PHPNow升级PHP版本为5.3.5的方法
  2. AI算法 真的能算出人类的欲望吗?
  3. 使用objectdatasource结合数据绑定控件进行简单三层架构的开发
  4. hdu4920 矩阵乘法%3
  5. Normal Bayes 分类器过程详解
  6. Python遍历目录的4种方法
  7. OpenTSDB 造成 Hbase 整点压力过大问题的排查和解决
  8. 基于小样本学习的图像分类技术综述
  9. 【优化选址】基于matlab禁忌搜索算法求解基站选址优化问题【含Matlab源码 440期】
  10. linux 输入法框架xim,基于XIM协议的输入法原理与实现
  11. 全面升级 | ONES Performance 研发效能管理解决方案
  12. 全年DDoS攻击分析|知道创宇云安全2018年度网络安全态势报告
  13. [课业] 25 | 数据库基础 | 基础SQL查询语言
  14. 华为给了机会,为什么OV却没抓住?
  15. 百度地图 android 自身地点,Android使用百度地图SDK获得当前设备位置所在的省、市(系列1)...
  16. linux识别不了喇叭,Ubuntu扬声器无声的解决方法
  17. C# 得到变量的类型
  18. python爬虫---某站排名100
  19. SQL Server 日志文件查看器提示超时连接
  20. 阿里云天池python1

热门文章

  1. 不讲CRUSH的Ceph教程是不完整的
  2. MFC接收ShellExecute多个参数
  3. HIbernate——hibernate中的各种查询
  4. python下划线变量的含义
  5. bzoj 4832 抵制克苏恩
  6. HTTP层 —— Session
  7. 【Redis】Redis分布式集群几点说道
  8. 量化策略研究员 - 工具篇
  9. MatLab GUI Load .mat File 导入mat文件
  10. java中常见的异常类