博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
俩阶段提交
阅读量:3739 次
发布时间:2019-05-22

本文共 659 字,大约阅读时间需要 2 分钟。

准备阶段

事务协调者给每个参与者发送Prepare消息,每个参与者要么直接返回失败,要么在本地执行事务,但不提交。

可以进一步将准备阶段分为以下三个步骤:

  • 1)协调者节点向所有参与者节点询问是否可以执行提交操作,并开始等待各参与者节点的响应。

  • 2)参与者节点执行询问发起为止的所有事务操作,并将Undo信息和Redo信息写入日志。

  • 3)各参与者节点响应协调者节点发起的询问。如果参与者节点的事务操作实际执行成功,则它返回一个”同意”消息;如果参与者节点的事务操作实际执行失败,则它返回一个”中止”消息。

提交阶段

如果协调者收到了参与者的失败消息或者超时,直接给每个参与者发送回滚消息;否则,发送提交消息;参与者根据协调者的指令执行提交或者回滚操作。

接下来分两种情况分别讨论提交阶段的过程。

  • 1)协调者节点向所有参与者节点发出”正式提交”的请求。

  • 2)参与者节点正式完成操作,并释放在整个事务期间内占用的资源。

  • 3)参与者节点向协调者节点发送”完成”消息。

  • 4)协调者节点受到所有参与者节点反馈的”完成”消息后,完成事务。

如果任一参与者节点在第一阶段返回的响应消息为”中止”,或者 协调者节点在第一阶段的询问超时之前无法获取所有参与者节点的响应消息时:

  • 1)协调者节点向所有参与者节点发出”回滚操作”的请求。

  • 2)参与者节点利用之前写入的Undo信息执行回滚,并释放在整个事务期间内占用的资源。

  • 3)参与者节点向协调者节点发送”回滚完成”消息。

  • 4)协调者节点受到所有参与者节点反馈的”回滚完成”消息后,取消事务。

 

转载地址:http://zltin.baihongyu.com/

你可能感兴趣的文章
基本类型包装类
查看>>
System类常用方法
查看>>
Runtime类、Math类和Random类的常用方法
查看>>
数据处理类常用方法
查看>>
Collections和Character类 常用静态方法
查看>>
HTML之Javascript——BOM浏览器对象模型
查看>>
MySQL数据库——数据库概述及SQL相关基本操作
查看>>
JAVA基础中的基础
查看>>
JDBC基础操作
查看>>
连接池
查看>>
Servlet的使用——重定向和转发
查看>>
JSP技术的使用——好像过时了唉。。。。。
查看>>
MVC模式概述
查看>>
Web之过滤器Filter
查看>>
JSON和AJAX
查看>>
web之监听器listener
查看>>
类加载器
查看>>
数据库设计
查看>>
Java虚拟机的内存分配和运行机制(粗谈)
查看>>
web开发之BaseServlet的使用
查看>>