热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

2PC有它,你就够了!

微信公众号:小林玩大数据作者:林中鸟如果你觉得此篇文章对你有帮助,欢迎点赞!一致性协议概述Two-Phase-Commit

微信公众号:小林玩大数据
作者:林中鸟
如果你觉得此篇文章对你有帮助,欢迎点赞!


一致性协议概述

Two-Phase-Commit(2PC)


一致性协议概述

在分布式系统中,每一个机器节点虽然都能明确地知道自己在进行事务过程中的结果是成功或失败,但却无法获得其它节点的操作结果。因此,为了保持事务处理的 ACID 特性,就需要引入一个称为“协调者”的组件来统一调度所有分布式节点的执行逻辑,这些被调度的分布式节点被称为“参与者”。协调者负责调度参与者的行为,并最终决定这些参与者把事务真正进行提交。

 


Two-Phase-Commit(2PC)

二阶段提交协议是将事务的提交过程分成了两个阶段来进行处理,其执行流程如下:


  • 阶段一:提交事务请求

  1. 事务询问
    协调者向所有的参与者发送事务内容,询问是否可以执行事务提交操作,并开始等待各参与者的响应
  2. 执行事务
    各参与者节点执行事务操作,并将 Undo 和 Redo 信息记入事务日志中。
  3. 各参与者向协调者反馈事务询问的响应
    如果参与者成功执行了事务操作,那么就反馈给协调者 Yes 响应,表示事务可以执行;如果参与者没有成功执行事务那么就反馈给协调者 No 响应,表示事务不可以执行。

注:二阶段提交协议阶段一被称为“投票阶段”,即各参与者投票表明是否要继续执行接下去的事务提交操作。



  • 阶段二:执行事务提交
    在阶段二中,协调者会根据参与者的反馈情况来最终决定是否可以进行事务提交操作,正常情况下,包含以下两种可能:

-执行事务提交
假如协调者从所有的参与者获得的反馈都是 Yes 响应,那么就会执行事务提交,即事务请求成功。


  1. 发送提交请求
    协调者向所有参与者节点发出 Commit 请求。
  2. 事务提交
    参与者接收到 Commit 请求后,会正式执行事务提交操作,并在完成提交之后释放在整个事务执行期间占用的事务资源。
  3. 反馈事务提交结果
    参与者在完成事务提交之后,向协调者发送 Ack 消息。
  4. 完成事务
    协调者接收到所有参与者反馈的 Ack 消息后,完成事务
                                    

-中断事务
假如任何一个参与者向协调者反馈了 No 响应,或者在等待超时之后,协调者尚无法接收到所有参与的反馈响应,那么就会中断事务。


  1. 发送回滚请求
    协调者向所有参与者节点发出 Rollback 请求。
  2. 事务回滚
    参与者接收到 Rollback 请求后,会利用其在阶段一中记录的 Undo 信息来执行事务回滚操作,并在完成回滚之后释放在整个事务执行期间占用的资源。
  3. 反馈事务回滚结果
    参与者在完成事务回滚之后,向协调者发送 Ack 消息。
  4. 中断事务
    协调者接收到所有参与者反馈的 Ack 消息后,完成事务中断。

注:总的来说,二阶段提交将一个事务的处理过程分为了投票和执行两个阶段,其核心是对每个事务都采用先尝试后提交的处理方式,因此二阶段提交看作一个强一致性的算法。


时间最擅长不辞而别,一转眼,初夏的5月打马而过!5月再见啦,6月,希望林中鸟儿们遇见阳光且温柔的自己!如果本文对你有帮助,请扫一扫关注!

小林玩大数据

               小林玩大数据


推荐阅读
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 深入解析:手把手教你构建决策树算法
    本文详细介绍了机器学习中广泛应用的决策树算法,通过天气数据集的实例演示了ID3和CART算法的手动推导过程。文章长度约2000字,建议阅读时间5分钟。 ... [详细]
  • libsodium 1.0.15 发布:引入重大不兼容更新
    最新发布的 libsodium 1.0.15 版本带来了若干不兼容的变更,其中包括默认密码散列算法的更改和其他重要调整。 ... [详细]
  • 本文探讨了MariaDB在当前数据库市场中的地位和挑战,分析其可能面临的困境,并提出了对未来发展的几点看法。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • 本文详细介绍了网络存储技术的基本概念、分类及应用场景。通过分析直连式存储(DAS)、网络附加存储(NAS)和存储区域网络(SAN)的特点,帮助读者理解不同存储方式的优势与局限性。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍如何利用动态规划算法解决经典的0-1背包问题。通过具体实例和代码实现,详细解释了在给定容量的背包中选择若干物品以最大化总价值的过程。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 该平台旨在为大型企业提供一个高效、灵活且可扩展的分布式微服务架构解决方案。它采用模块化、微服务化和热部署的设计理念,结合当前最先进且无商业限制的主流开源技术,如Spring Cloud、Spring Boot2、MyBatis、OAuth2和Element UI,实现前后端分离的系统管理平台。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 在本周的白板演练中,Apache Flink 的 PMC 成员及数据工匠首席技术官 Stephan Ewen 深入探讨了如何利用保存点功能进行流处理中的数据重新处理、错误修复、系统升级和 A/B 测试。本文将详细解释保存点的工作原理及其应用场景。 ... [详细]
  • 深入理解一致性哈希算法及其应用
    本文详细介绍了分布式系统中的一致性哈希算法,探讨其原理、优势及应用场景,帮助读者全面掌握这一关键技术。 ... [详细]
  • 2018年3月31日,CSDN、火星财经联合中关村区块链产业联盟等机构举办的2018区块链技术及应用峰会(BTA)核心分会场圆满举行。多位业内顶尖专家深入探讨了区块链的核心技术原理及其在实际业务中的应用。 ... [详细]
author-avatar
手机用户2602906131
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有