06、分布式事务-初探Seata中多事务模式的差异-上

章节归属

分布式事务系列

概述

Seata的核心价值在于 构建一个全面解决分布式事务问题的标准化平台

当前技术背景下,不存在一个分布式事务处理机制可以完美满足所有场景的需求,系统存在一致性、可靠性、易用性、性能等诸多方面的约束,需要不同的事务处理机制去满足。
基于Seata,上层应用架构可以根据实际场景的需求,灵活选择合适的分布式事务解决方案。

1.TCC模式(2PC、补偿型)

据说蚂蚁早期大量采用的分布式事务方案就是TCC模式,属于万金油了。

1.1 优点
资源锁定时间短

使用TCC模式时,在try阶段就提交了本地事务,并不会锁定资源,所以没有其他额外的性能开销

并发度高

可由其他方式锁定资源,而不必对数据加全局锁,允许多个事务同时操作数据。

应对场景多
  • 可在非JDBC方式通信的DB(如Elasticsearch 、Redis)场景使用。
  • 可在非DB场景(如三方rest接口)场景使用。
1.2 缺点
业务侵入严重

服务提供方必须已手动方式 将业务逻辑拆分成2阶段,实现try、confirm和cancel 3个方法,遵守分布式事务所约束的额外的规则。

开发维护成本高

try、confirm和cancel 3个固定逻辑,无法通过事务框架自动生成,设计、开发成本高,后续维护改造的成本也高。

2.AT模式(2PC、补偿型)

Seata中默认推荐的模式,官宣能应对当下80%的分布式场景。

2.1.优点:

业务无侵入

对业务无入侵,开发者只需正向关注自己的业务逻辑sql(与TCC模式比较,不需要将业务拆分并提供try、confirm、cancel方法),快速集成后即使用。

性能尚可

AT解析,一阶段提前释放本地锁,二阶段决议提交时释放全局锁,无需将数据锁定持续到二阶段结束,这里就已经相对传统二阶段事务尤其是XA提升了,TCC 、XA 都需要二阶段驱动,而AT模式在二阶段决议提交时分布式事务就已经完成了,无需再次驱动rm进行二阶段动作。

一阶段多了几次DB读写操作,有一定的性能损耗。

2.2.缺点:

存在中间状态

补偿型事务处理机制构建在事务资源之上(在中间件或者应用层,而不是DB层),事务资源本身对分布式事务无感知,这就导致无法做到全方位隔离,即中间状态可见。在Seata中,要通过应用层的锁机制来达到读已提交的隔离效果。

依赖全局行锁

AT需要全局行锁来保证隔离性,所以无论是单库的操作还是1-n个服务都需要开启全局事务来保证隔离性。

有一定的适配成本

支持mysql,pgsql,oracle等数据库,需要应用层做适配,对复杂sql的解析成本更大,开发效率低,支持的sql数量少;跨语言的需要在应用层额外的开发支持。但一旦是社区已经提供好的则无需考虑这些问题。

3.Seata XA模式(2PC、强一致)

DTP定义TM和RM之间采用XA接口通讯协议,XA模式就是基于数据库的XA协议来实现的两阶段提交方案。

3.1.优点:

全局一致性

AT模式下数据的读已提交需由额外的应用层的全局行锁机制来保障;而 XA模式下,隔离性由数据库自身保障,资源和全局事务浑然一体,做到全局一致性

侵入性略低

少于2个服务的操作,XA仅使用本地事务即可满足一致性,不再需要TC的参与。

兼容性好
  • XA协议被主流的db(mysql,pgsql,oracle)支持,没有sql语法的限制,而AT需要由应用层额外的代码来解析并适配sql.
  • XA是协议层的,多语言支持度高。

3.2.缺点:

锁粒度大

XA本地数据库可能持有间隙锁,造成锁的粒度更大,锁定更多无辜数据

死锁(协议阻塞)

准备阶段后,各分支事务进入阻塞阶段,收到 提交\回滚的指令之前必须阻塞等待。而这期间如果有什么异常导致TM无法下达提交\回滚的指令,那么这个没有提交的xa事务将会一直 持有锁,造成死锁的局面。

性能较差

据说使用XA分布式事务跟没有事务的情况下有10倍的性能差异,主要原因就是上面的阻塞跟数据锁定造成,因为xa的一阶段并非提交,带来以下2个问题:

  • 事务协调过程,增加单个事务的 RT;
  • 并发事务数据的锁冲突,降低吞吐。
应用场景受限
  • 适用于单体应用多数据源的情况(早期大型机上的金融类单体应用用的多)
  • 不适用于分布式场景

At模式的一阶段提交,AT的性能是优于XA,因为它锁在TC一侧集中释放,无需多个库进行本地的锁释放

运维成本

在mysql数据库中对XA支持的不太理想,mysql的XA实现,没有记录prepare阶段日志,主备切换回导致主库与备库数据不一致(这些是不是MySQL 5.7之前的缺陷,mysql8之后的情况怎样呢?)运维复杂,DBA缺少这方面经验;

这段信息有待确认

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

推荐阅读更多精彩内容