分布式事务笔记-几种分布式事务的实现思路

旧文。整理出来发布。

本文记录了学习分布式事务相关的理论知识的笔记和自己的一些思考

什么是事务

在之前我们讲事务,很多情况下是将单体事务。

  • 事务是用来保证一组数据操作的完整性和一直性
  • 四大特性ACID
  • 四种隔离级别
  • 七种传播级别

什么是分布式事务

概念

  • 分布式事务就是将多个节点的事务看成一个整体来处理
  • 分布式事务由事务的参与者、资源服务器、事务管理器组成
  • 常见的分布式事务的例子:支付、下订单等

实现思路

  • 2PC、3PC
  • 基于XA的分布式事务
  • 基于消息的最终一致性
  • TCC编程式补偿性事务

2PC(Two-Phase Commit)

参考《从Paxos到Zookeeper 分布式一致性原理与实践》

二阶段提交,将事务的提交过程分成了两个阶段尽处理,其指定流程分为如下几个步骤

  • 提交事务请求(投票阶段)

    • 事务询问
    • 执行事务
    • 各参与者想协调组反馈事务询问的响应
  • 执行事务阶段

    • 发起提交请求
    • 事务提交
    • 反馈事务提交过程
    • 完成事务
  • 中断事务

    • 发送回滚请求
    • 事务回滚
    • 反馈事务回滚结果
    • 中断事务
2PC
优点

原理简单、实现方便

缺点

同步阻塞、单点问题、脑裂、太过保守

3PC

3PC主要是对2PC存在的缺点进行改进

将二阶段提交协议的“提交事务请求”一分为二,行成了由CanCommit、PerCommit、和do Commit 三个阶段组成的事务处理协议。

来自维基百科

图片来自维基百科

优点

降低了参与者的阻塞范围,并且能够在出现单签故障后继续达成一致。

缺点

参与者接收到perCommit消息后,如果网络出现分区,此时协调者所在的节点和参与者无法进行正常的网络通信,这种情况下,参与者依然会信息事务提交,必然会出现数据不一致。

基于XA的分布式事务

基于XA的分布式事务

基于XA的分布式事务,在实际业务开发中我们应用的不多,编写的也不多,但是其是对2PC的一种演进。它更多的是应用在数据库中。

两个概念:

  • 资源管理器(resource manager):用来管理系统资源,是通向事务资源的途径。数据库就是一种资源管理器。资源管理还应该具有管理事务提交或回滚的能力。
  • 事务管理器(transaction manager):事务管理器是分布式事务的核心管理者。事务管理器与每个资源管理器(resource manager)进行通信,协调并完成事务的处理。事务的各个分支由唯一命名进行标识。

例如在mysql中:mysql在执行分布式事务(外部XA)的时候,mysql服务器相当于xa事务资源管理器(RM),此时作为mysql的服务器起码有两个。与mysql链接的客户端相当于事务管理器,需要注意的是MySQL中只有当隔离级别为Serializable时候才能使用分布式事务。

基于分布式消息的最终一致性

参考https://www.jianshu.com/p/04bad986a4a22

基于消息的最终一致性.png

使用场景:A系统为支付模块,B系统为订单模块。A模块支付成功,提交支付成功消息。B系统进行修改订单状态,如果订单修改失败,会导致钱已经支付出去了。借鉴消息的最终一致性思想,在支付系统最后完成支付的时候进行“挂起”等待操作,之后提交消息,等B系统提交成功还是失败的消息,使用回调通知A系统是否可以进行最后的支付操作。

优点:强一致性

缺点:A系统需要等待B系统,造成时间内存的浪费

TCC补偿性事务实现

参考https://mp.weixin.qq.com/s/mIW1_K5fAoa2OlSLdXSHpQ

TCC补偿性事务实现

T:Try 尝试

C:Confirm 确认

C:Cancel 取消

TCC:尝试执行、确认操作、取消操作

基于消息的分布式事务和TCC补偿性事务比较

  • 基于消息事务是强一致性事务,会存在资源浪费(好处和坏处的双刃剑),一直等待会造成服务停滞。
  • TCC事务是柔性事务,强调在try阶段要对资源做预留
  • TCC事务在确认或者取消阶段释放资源
  • 与基于消息事务对比,TCC时效性更好

在实际的应用的,两种都有进行用到,但是大多数的情况下是使用TCC事务,因为在分布式系统中系统对并发量、吞吐量的要求较高。对强一致性要求就不那么高,这个就可以参考CAP、BASE的分布式的基础理论了。

分布式事务框架


参考文章:
[1]: https://www.cnblogs.com/luoyunfei99/articles/6803682.html
[2]: https://www.jianshu.com/p/04bad986a4a2
[3]: https://mp.weixin.qq.com/s/mIW1_K5fAoa2OlSLdXSHpQ "拜托,面试请不要再问我TCC分布式事务的实现原理!"
[4]: 《从Paxos到Zookeeper分布式一致性原理与实践》

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