2PC(Two Phase Commit)

顾名思义,二阶段提交的意思。

  1. 发起事务(Prepare)

    事务的发起者提出一个请求(比如下单购买某个商品),要求其依赖的服务响应请求(比如锁定优惠券,冻结库存等等)

    当所有的依赖方成都回复确认之后,事务的准备阶段完毕
  2. 确认/取消事务(Confirm/Cncel)

    当请求得到所有的依赖服务的确认后,事务的发起者通知所有执行者确认(confirm)事务

    如果第一步只有有一个执行者返回失败,则取消(Cancel)事务

需要考虑的问题:

  1. 执行者如果没有收到第二步事务,如何处理?此时执行者会一起锁定资源等待第二步事务

    比起一直锁定和超时confirm,更适合直接超时cancel
  2. 发起者如果第一步没有收到回复,如何处理?此时发起者无法得知是否所有执行者都锁定资源

    超时重试,多次超时当作失败
  3. 发起者如果第二步没有收到回复,如何处理?此时的发起者无法得知是否所有执行者都确认了事务

    这是一个无法回滚的异常,可能需要人工介入修复数据

3PC(Three Phase Commit)

2PC的改进版本,在Prepare阶段前加了一个阶段:是否可提交请求

询问是否可以执行事务提交操作,如果执行者都返回成功响应,则进入Prepare阶段,否则结束事务

这一步查询不会加锁,降低了反复“锁定-释放”的可能,提高了并发。

无论是2PC还是3PC,都无法彻底解决分布式的一致性问题。

TCC(Try-Confirm-Cancel)

TCC和2PC两阶段提交类似,2PC通常是跨库的DB层面,T本质上是一个应用层面的2PC。

优势在于,可以自己定义数据库操作的精度,从而降低锁冲突、提高吞吐量。

Try、Confirm、Cancel的缩写,又称补偿事务,要求每个分支事务实现这三个操作。

Try,对业务系统做检测及资源预留。和二阶段中提交协议,提交请求阶段类似,系统会将需要确认的资源预留、锁定,确保确认操作一定能执行成功

Confirm,确认执行业务操作。和二阶段提交协议中,提交执行阶段的操作类似,指系统将最终执行操作

Cancel,取消执行业务操作。比较像二阶段提交协议中的回滚操作,指系统将撤消之前预留的资源,也就是撤消已执行的预留操作对系统产生的影响

分布式事务说的的2PC、3PC、TCC是啥的更多相关文章

  1. 分布式事务解决方案汇总:2PC、3PC、消息中间件、TCC、状态机+重试+幂等(转)

    数据一致性问题非常多样,下面举一些常见例子.比如在更新数据的时候,先更新了数据库,后更新了缓存,一旦缓存更新失败,此时数据库和缓存数据会不一致.反过来,如果先更新缓存,再更新数据库,一旦缓存更新成功, ...

  2. 分布式事务(4)---最终一致性方案之TCC

    分布式事务(1)-理论基础 分布式事务(2)---强一致性分布式事务解决方案 分布式事务(3)---强一致性分布式事务Atomikos实战 强一致性分布式事务解决方案要求参与事务的各个节点的数据时刻保 ...

  3. 分布式事务之解决方案(XA和2PC)

    3. 分布式事务解决方案之2PC(两阶段提交) 针对不同的分布式场景业界常见的解决方案有2PC.TCC.可靠消息最终一致性.最大努力通知这几种. 3.1. 什么是2PC 2PC即两阶段提交协议,是将整 ...

  4. [转帖]分布式事务之解决方案(XA和2PC)

    分布式事务之解决方案(XA和2PC) https://zhuanlan.zhihu.com/p/93459200 3. 分布式事务解决方案之2PC(两阶段提交) 针对不同的分布式场景业界常见的解决方案 ...

  5. 【转帖】分布式事务之解决方案(XA和2PC)

    分布式事务之解决方案(XA和2PC) https://zhuanlan.zhihu.com/p/93459200 ​ 博彦信息技术有限公司 java工程师 3. 分布式事务解决方案之2PC(两阶段提交 ...

  6. 分布式事务专题笔记(二)分布式事务解决方案之 2PC(两阶段提交)

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 前面已经了解了分布式事务的基础理论,以理论为基础,针对不同的分布式场景业界常见的解决方案有2PC.TCC ...

  7. 终于有人把“TCC分布式事务”实现原理讲明白了!

    之前网上看到很多写分布式事务的文章,不过大多都是将分布式事务各种技术方案简单介绍一下.很多朋友看了还是不知道分布式事务到底怎么回事,在项目里到底如何使用. 所以这篇文章,就用大白话+手工绘图,并结合一 ...

  8. TCC分布式事务的实现原理(转载 石杉的架构笔记)

    拜托,面试请不要再问我TCC分布式事务的实现原理![石杉的架构笔记] 原创: 中华石杉 目录 一.写在前面 二.业务场景介绍 三.进一步思考 四.落地实现TCC分布式事务 (1)TCC实现阶段一:Tr ...

  9. 拜托,面试请不要再问我TCC分布式事务的实现原理!(转)

    一.写在前面 之前网上看到很多写分布式事务的文章,不过大多都是将分布式事务各种技术方案简单介绍一下.很多朋友看了不少文章,还是不知道分布式事务到底怎么回事,在项目里到底如何使用. 所以咱们这篇文章,就 ...

随机推荐

  1. [深入理解JVM虚拟机]第2章-Java内存区域与内存溢出异常

    2.0引-Java内存区域中,栈内存和堆内存分别装什么,为什么? 栈:解决程序的运行问题,即程序如何执行,或者说如何处理数据. 堆:解决的是数据存储的问题,即数据怎么放,放在哪儿. 参考链接https ...

  2. Shell编程(5)

    文本处理三剑客 在 Shell 下使用这些正则表达式处理文本最多的命令有下面几个工具:                 命令                描述 grep 默认不支持扩展表达式,加-E ...

  3. Skywalking Php注册不上问题排查

    Skywalking是一款分布式追踪应用,具体介绍可以参考 skywalking. 最近公司的一个Php应用在Skywalking后台查不到数据了: 登录到某台服务器上发现注册不上,启动时就报错了: ...

  4. 疑难杂症 | Excel VBA锁定指定单元格区域

    背景:锁定EXCEL表头 一.手动操作流程 其基本逻辑并不赋值,手动操作流程是: 1.取消所有单元格的"锁定"格式 CTRL+A,选中全部的单元格→单击右键→设置单元格格式→保护→ ...

  5. Qt 展示pdf内容(新窗口或嵌入,pdfjs,linux)

    前言:初学Qt,在网上查找了诸多资料,有什么poppler.mupdf啊巴拉巴拉的,结果一个比一个费劲,最后还是采用pdfjs较为方便高效,为方便相关问题搜索,写了一下内容. 需求描述:Qt应用中不支 ...

  6. android开发之意图

    intent 全局变量传值(程序关闭时存储值消失) intent普通传值 intent传值 intent不能序列化传值 intent回传

  7. Centos-zip压缩-文件或目录-zip unzip

    zip uzip 将一般文件或者目录进行压缩或者解压,默认以 .zip为后缀名 zip 相关选项 -r 递归压缩目录 -d 从压缩包中删除指定文件 -i  压缩指定文件列表文件 -x 压缩排除指定文件 ...

  8. unity inspector 自动装载Commont和Prefab属性

    在使用unity的过程中,经常遇到这样的问题:每次都需要手动为序列化属性拖拽赋值.像这样: 试着找了找,真的找到了一份代码,但是缺少自动装载Prefab的功能.之后我花了点时间添加这个功能. 使用方法 ...

  9. 晚间测试3 B. 单(single)

    题目描述 单车联通大街小巷.这就是出题人没有写题目背景的原因. 对于一棵树,认为每条边长度为 \(1\),每个点有一个权值\(a[i]\).\(dis(u,v)\)为点\(u\)到\(v\)的最短路径 ...

  10. c中_tmain()和main()区别

    来源参考:https://www.cnblogs.com/lucyjiayou/archive/2011/05/07/2039621.html tchar.h>可以找到,如#define _tm ...