【微服务设计】分布式系统一致性:深入解析2PC(两阶段提交)和TCC的优势与劣势

在现代分布式系统中,事务一致性是一个重要的挑战。为了解决这一问题,业界提出了多种事务处理协议,其中两阶段提交(2PC)和TCC(Try, Confirm, Cancel)是两种常见的方法。本文将详细介绍这两种协议的原理、应用场景及其优缺点,并通过具体示例加以说明。


两阶段提交(2PC)

两阶段提交(Two-Phase Commit)是一种确保分布式系统中事务一致性的协议,主要分为两个阶段:准备阶段(Prepare)和提交阶段(Commit)。

  • 准备阶段:协调者(Coordinator)向所有参与者(Participants)发送准备请求,参与者检查本地事务是否可以提交,并将结果反馈给协调者。
  • 提交阶段:如果所有参与者都准备好了,协调者发送提交请求,所有参与者正式提交事务;如果任何一个参与者无法提交,协调者发送回滚请求,所有参与者回滚事务。

优点

  • 简单易实现,适用于小规模系统。
  • 确保了全局一致性。

缺点

  • 存在单点故障风险,协调者故障会导致事务挂起。
  • 需要锁住资源,可能导致较高的资源开销和系统延迟。

示例:银行转账

  1. 准备阶段
    • 转出银行系统:检查用户A账户余额并暂时锁定1000元。
    • 转入银行系统:准备接收1000元。
  2. 提交阶段
    • 转出银行系统:确认并正式扣除1000元。
    • 转入银行系统:确认接收1000元并增加用户B账户余额。

TCC(Try, Confirm, Cancel)

TCC(Try, Confirm, Cancel)是一种基于补偿的分布式事务协议,分为尝试阶段(Try)、确认阶段(Confirm)和取消阶段(Cancel)。

  • 尝试阶段:尝试执行事务操作,但不提交结果,如预留资源或进行初步检查。
  • 确认阶段:如果所有尝试操作成功,则正式提交事务结果。
  • 取消阶段:如果任何尝试操作失败,则执行补偿操作,撤销之前的所有操作。

优点

  • 减少了锁的使用,提高了系统的可用性和性能。
  • 能处理更复杂的分布式事务场景。

缺点

  • 实现复杂,需要为每个操作定义补偿逻辑。

示例:酒店预订

  1. 尝试阶段
    • 旅游网站:向酒店系统发送预订请求,酒店系统暂时锁定一个房间。
  2. 确认阶段
    • 用户完成支付:旅游网站发送确认请求,酒店系统正式预订房间。
  3. 取消阶段
    • 支付失败或取消预订:旅游网站发送取消请求,酒店系统解锁房间。

TCC处理银行汇款的示例

我们也可以将银行转账的例子转换为TCC协议来进行处理。

示例:银行转账使用TCC协议

步骤1:尝试阶段(Try)

  • 转出银行系统
    • 检查用户A账户中是否有足够的余额。
    • 暂时冻结用户A账户中的1000元。
  • 转入银行系统
    • 准备接收转账请求,暂时记录将要接收的1000元,但不进行实际操作。

步骤2:确认阶段(Confirm)

  • 转出银行系统
    • 确认并正式扣除用户A账户中的1000元。
  • 转入银行系统
    • 确认接收1000元,并正式增加用户B账户中的余额。

步骤3:取消阶段(Cancel)

  • 转出银行系统
    • 如果在尝试阶段中发生任何错误或异常情况,解冻用户A账户中暂时冻结的1000元,恢复初始状态。
  • 转入银行系统
    • 如果在尝试阶段中发生任何错误或异常情况,取消预备接收的1000元记录,保持原始状态。

比较与总结
  • 两阶段提交适用于简单的事务场景,确保事务的一致性和原子性,但存在较高的资源开销和单点故障风险。
  • TCC适用于复杂的事务场景,通过补偿机制提供更高的灵活性和容错能力,但实现复杂度较高。

通过上述示例,我们可以看到,选择合适的分布式事务处理协议需要根据具体应用场景的需求和系统的特性进行权衡。希望这篇文章能帮助你更好地理解和应用这两种事务处理协议。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/12649.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Kong API网关,微服务架构中,你看到就不想错过的选型

今天,很多公司都采用微服务架构来处理复杂业务,但随着服务数量增加,API管理成了一项繁重任务。Kong API网关,作为一款高性能的开源API网关,给开发者带来了极大便利。它不仅可以简化API的调用和管理,还拥有丰…

计算机毕业设计 | springboot+vue汽车修理管理系统 汽修厂系统(附源码)

1,项目背景 在如今这个信息时代,“汽车维修管理系统” 这种维修方式已经为越来越多的人所接受。在这种背景之下,一个安全稳定并且强大的网络预约平台不可或缺,在这种成熟的市场需求的推动下,在先进的信息技术的支持下…

使用京东API接口进行支付结算有哪些注意事项?

用京东API接口进行支付结算时,需要注意以下几个事项: 遵守京东开放平台规定:在使用京东API接口时,必须遵守京东开放平台的相关规定,不得滥用接口或进行非法操作。 保护用户隐私:为了保护用户隐私&#xff…

全国宪法宣传周答题活动怎么做

在12月4日全国宪法宣传周即将到来之际,越来越多的企业单位开始举办线上知识竞赛答题活动,以下是一个知识竞赛答题小程序的基本功能: 一、了解活动信息:确定答题活动的开始时间、结束时间以及是否分阶段进行等。不同的答题活动时…

【debug】QT 相关问题error汇总 QT运行闪退 QT5升级到QT6注意要点

总结一下碰到过的所有问题error以及解决方案 如果这个文档未帮助到你,仍有bug未解决,可以在下方评论留言,有偿解决。 qt的UI更新之后构建后发现没有变化 取消项目中的Shadow build的勾选,作用是取消影子构建,此后构建目…

信捷 PLC C语言 POU 指示灯交替灭1秒亮1秒

1.在全局变量表中定义2个定时器变量timer1,timer2 名称 类型 timer1 TMR_FB False -- False False timer2 TMR_FB False -- False False ot BOOL False -- False False ot表示指示灯 2.新建pou…

【Linux进程篇3】说白了,Linux创建进程(fork父子进程)也就那样!!!

--------------------------------------------------------------------------------------------------------------------------------- 每日鸡汤:没人可以好运一生,只有努力才是一生的护身符,不放弃、不辜负。 -----------------------…

使用服务器时进行深度学习训练时,本地必须一直保持连接状态吗?

可以直接查看方法,不看背景 1.使用背景2. 方法2.1 screen命令介绍2.2 为什么要使用screen命令2.3 安装screen2.4 创建session2.5 查看session是否创建成功2.6 跳转进入session2.7 退出跑代码的session2.8 删除session 1.使用背景 我们在进行深度学习训练的时候&…

防火墙笔记地十二天

1.IPSEC协议簇 IPSEC协议簇 --- 基于网络层的,应用密码学的安全通信协议组 IPV6中,IPSEC是要求强制使用的,但是,IPV4中作为可选项使用 IPSEC可以提供的安全服务 机密性 --- 数据加密 完整性 --- 防篡改 可用性 数据源鉴别 -…

即时设计:Sketch的云端版本控制

设计师们经常面临的一个挑战是设计软件的频繁更新,尤其是Sketch这类流行工具。每次更新可能会修复一些旧bug并增加新功能,但同时也可能导致与旧版本的不兼容问题,尤其是在不同工作环境中的电脑性能差异可能导致文件兼容性问题。那么&#xff…

什么是网络安全CTF有何意义?该如何入门?

什么是网络安全CTF?有何意义 ?该如何入门 ? 什么是网络安全CTF? CTF在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。它起源于1996年DEFCON,以代替之前通过互相发起真实攻击进行技术比拼的方式。发展至今&#xff…

【Window主机访问Ubuntu从机——Xrdp配置与使用】

使用Xrdp在Window环境下远程桌面访问Ubuntu主机 文章目录 Ubuntu安装图形化界面Ubuntu安装Xrdp通过网线连接两台主机Window主机有线连接配置Ubuntu从机设置测试有线连接 Window主机打开远程桌面功能参考文章总结 Ubuntu安装图形化界面 sudo apt update sudo apt upgrade sudo …

Python-基础语法·上(2)

目录 常量和表达式 变量的语法 定义变量 使用变量 变量的类型 整型与浮点型 字符串 布尔 为什么要有这么多类型? 动态类型特性 注释 输入输出 通过控制台输出 通过控制台输入 运算符 算术运算符 关系运算符 逻辑运算符 赋值运算符 其他 python的一些小练…

【go从零单排】panic、recover、defer

🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 在 Go 语言中,panic 是一种用于处理异常情况的机制。它允许程序在遇到…

【Windows erver】配置高性能电源管理

操作场景 在 Windows Server 操作系统上,需要配置高性能电源管理,才能支持实例软关机,否则云服务器控制台只能通过硬关机的方式关闭实例。本文档以 Windows Server 2012 操作系统为例,介绍配置电源管理的方法。 操作说明 修改电…

十大内衣洗衣机排名:2024十大实力强大内衣洗衣机推荐

现在洗衣机已经是现代家庭的必备家电,它给我们带来了更加方便舒适的生活。但即使是有了洗衣机大家还是不会将所有的衣物都丢进大型洗衣机洗。尤其是内衣裤、袜子,很多人都是选择手洗的,觉得这样的清洁方式才能清洗干净,但其实事实…

esayExcel根据模板导出包含图片

1、效果 2、模板 3、工具类代码 /*** 根据模板填充* param response* param templateStream 模板文件流* param map 模板文件所需要的参数* param list list循环模板参数* throws IOException*/public static void templateFilling(HttpServletRequest servletRequest,HttpServ…

【Linux系统编程】第四十五弹---线程互斥:从问题到解决,深入探索互斥量的原理与实现

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、线程互斥 1.1、见一见多线程访问问题 1.2、解决多线程访问问题 1.2.1、互斥量的接口 1.2.2、互斥量接口的使用 1.2.3、…

【贪心算法】贪心算法三

贪心算法三 1.买卖股票的最佳时机2.买卖股票的最佳时机 II3.K 次取反后最大化的数组和4.按身高排序5.优势洗牌(田忌赛马) 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励&#…

认知战认知作战:雍正设立军机处的认知战策略分析

认知战认知作战:雍正设立军机处的认知战策略分析 认知战认知作战:雍正设立军机处的认知战策略分析 认知战认知作战:雍正设立军机处的认知战策略分析 关键词:认知作战,新质生产力,人类命运共同体,认知战,认知域,认知战研究中心,认…