分布式事务种类及介绍

分布式事务种类介绍

如果觉得还可以 记得关注一下公众号哦!一起交流学习!


image

一、2PC 二阶段提交

1.算法思路

参与者将本身事务的执行情况发送给事务协调者,由事务协调者判断事务调用链是否执行提交操作还是回滚操作

2.提交步骤

1.准备阶段

1.1 事务协调者向所有的事务参与者询问是否可以执行提交操作,并开始等待各事务参与者的执行回应!

1.2 事务参与者回应事务协调者的请求,并执行本地的事务日志操作,等待事务协调者的通知!

2.提交阶段

2.1 事务协调者收到参与者的失败消息或者超时消息,则通知所有事务参与者执行回滚操作!若全部成功则通知所有的事务参与者执行提交操作!

2.2 释放事务操作所占用的所有锁资源!

3.缺陷

  1. 阻塞问题

1.1 所有的事务操作都处于同步阻塞状态,即所有的是事务参与者都必须等待事务协调者的消息,收不到消息则处于持续阻塞状态!

  1. 单点故障

2.1 当事务协调者服务宕机活出现其他故障后,所有的事务都处于挂起阻塞状态!(虽然在协调者挂掉之后能够选举出新的协调者,但是他仍不能解决各参与者的锁定状态!)

3.数据不一致性

3.1 网络是不可靠的,当二阶段进行中,由事务协调者发送给参与者的事务操作信息,因为网络原因,部分事务参与者没有收到,则会出现,部分事务无法进行事务操作,从而造成事务的不一致性!

3.2 当事务协调者挂了,唯一接收这条消息的参与者也挂了!那么当新的协调者被选举出来之后,也无法知道事务是否已经进行操作!

二、3PC 三阶段提交

相对于二阶段提交,三阶段提交在一阶段和二阶段中增加了一步准备阶段,以确保事务在提交时,所有节点的状态是一致的!

1. canCommit阶段 询问阶段

这一阶段对比二阶段提交的第一阶段,即事务协调者去询问各事务参与者:“你们是否可以执行本次事务,即参与者对自身状态的检查”,若参与者能够执行则回应 YES反之NO。

2.preCommit阶段 预提交阶段

根据一阶段返回的状态信息 YES AND NO 此时事务协调者会想参与者发送预提交或预回滚请求。参与者收到后开始执行事务操作,想本地写入事务日志,但是不执行提交或回滚命令!操作完成后向协调者发送ACK命令,等待下一步指令!

3. DoCommit 提交阶段

当收到所有参与者都发送的ACK命令后,向参与者发送提交或回滚请求!

4. 相对二阶段提交所做的优化

相比较2PC而言,3PC对于协调者和参与者都设置了超时时间,而2PC只有协调者才拥有超时机制。

主要是避免了参与者在长时间无法与协调者节点通讯(协调者挂掉了)的情况下,无法释放资源的问题,因为参与者自身拥有超时机制会在超时后,自动进行本地commit从而进行释放资源。而这种机制也侧面降低了整个事务的阻塞时间和范围。

另外,通过CanCommit、PreCommit、DoCommit三个阶段的设计,相较于2PC而言,多设置了一个缓冲阶段保证了在最后提交阶段之前各参与节点的状态是一致的。但是3PC依然没有完全解决数据不一致的问题。

三、补偿事务(TCC)

TCC(Try-Confirm-Cancel)又称补偿事务。其核心思想是:"针对每个操作都要注册一个与其对应的确认和补偿(撤销操作)"。它分为三个操作:

  • Try阶段:主要是对业务系统做检测及资源预留。
  • Confirm阶段:确认执行业务操作。
  • Cancel阶段:取消执行业务操作。

1.Try: 尝试执行业务

• 完成所有业务检查(一致性)
• 预留必须业务资源(准隔离性)

2.Confirm:确认执行业务

• 真正执行业务
• 不作任何业务检查
• 只使用Try阶段预留的业务资源
• Confirm操作要满足幂等性

3.Cancel: 取消执行业务

• 释放Try阶段预留的业务资源
• Cancel操作要满足幂等性

4.TCC与2PC协议比较

• 位于业务服务层而非资源层
• 没有单独的准备(Prepare)阶段, Try操作兼备资源操作与准备能力
• Try操作可以灵活选择业务资源的锁定粒度(以业务定粒度)
• 较高开发成本

5. 缺陷

tcc事务补偿性对业务代码的侵入性过高,开发成本大!需要开发人员在业务层手动提供提交操作以及混滚操作!所以对开发人员要求也比较高!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,743评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,296评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,285评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,485评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,581评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,821评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,960评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,719评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,186评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,516评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,650评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,936评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,757评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,991评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,370评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,527评论 2 349

推荐阅读更多精彩内容