大厂分布式事务最佳实践:从问题产生到解决方案
创作时间:
作者:
@小白创作中心
大厂分布式事务最佳实践:从问题产生到解决方案
引用
CSDN
1.
https://blog.csdn.net/Architect_chaser/article/details/137815319
在微服务架构中,分布式事务是一个常见的技术挑战。本文将从分布式事务的产生背景、难点与权衡,到具体的解决方案和实际应用案例,全面解析大厂中分布式事务的最佳实践。
问题的产生
83.7%分布式事务的产生都是因为拆分微服务导致的:
过去:
曾经在单体服务的时代,所有的数据库操作都是单体服务和mysql集群直接交互
比如电商中的下单操作,先更新订单,再扣减库存
订单和库存都在同一个数据库中,可以使用本地事务保证ACID特性
现状:
现在该服务拆分成了一大堆微服务,其中订单服务和库存服务成了两个服务
那么更新订单和扣减库存就成了两个RPC,数据也属于不同的数据库
这时候,如果更新订单成功了,扣减库存失败了(网络问题或者库存不足)
就会出现一致性问题
目标
分布式事务的目标就是让保证订单和库存数据的一致性
至于是
(回滚/补偿 还是重试)
(TCC型(又分为本地和远端,一般说的SEATA那种都是远端实现)
SAGA型
最大努力通知型
可靠消息型)
我们一会儿再说
一句话概括,分布式事务就是RPC和MQ没法像本地事务那样保证ACID的特性,为了(尽可能,最多保证几个9不可能完全)保证数据库操作,RPC,MQ三者混合使用时的原子性与一致性,而引入的解决方案.
难点与权衡 && 为什么大厂更偏爱Saga分布式事务?
分布式事务的权衡本质上是对性能和一致性的权衡.
熟悉CAP理论的小伙伴都知道,P(分区容错性)是一定要保证的,而C(一致性)和A(高可用)就要做一个权衡了. 而在互联网的业务中,对性能的要求是很高的,不可能为了保证强一致性而导致系统性能出问题.
所以分布式事务中强一致性的方案实际应用的很少.我们常常在保证高性能的同时,保证最终一致性.
我待过的团队都更倾向于使用SAGA模式来解决分布式事务问题.原因如下:
强一致性方案,对性能损耗严重 直接pass(比如2PC,3PC等)
最大努力通知型,一致性太差,连最终一致性都无法保证 直接pass
最终一致性方案 主流的有SAGA和TCC模式
TCC模式,对代码侵入性太大了,需要把流程改造成try->confirm->cancel
的形式,try锁定的资源只有事务完成或者超时才会释放.
而且部分框架TCC的实现需要依赖TM(事务管理)集群,TM集群也是潜在的性能瓶颈的风险.
所以我们更倾向于使用Saga模式来实现分布式事务
Saga模式引入了全局事务和分支事务的概念,每个分支事务除了业务逻辑还有补偿逻辑
如果调用链路 A->B->C->D ,比如执行到C的时候抛了异常,则从C开始逆向执行补偿逻辑
补偿例子: A->B->C(执行抛出异常)->C补偿->B补偿->A补偿
重试例子: A->B->C(执行抛出异常)->D 执行完了,C会一直重试,直到C执行成功或者大于配置的阈值时停止
当然除了补偿,还可以用配置重试保障一致性
一般来说,我们像更新单据这种操作更倾向于重试
而像扣减库存这种操作更倾向于补偿 (因为扣减库存失败绝大多数是因为库存不足,重试没有意义)
这里多提一嘴,很多分布式事务解决方案比如TCC或者SAGA都有两种实现方式 :1.引入TM事务协调器来管理协调事务 2.本地建表分布式方式来管理协调事务个人建议接入的时候最好选择方式2分布式的方式,最好不要依赖TM(事务管理)集群,TM集群也是潜在的性能瓶颈的风险
解决方案
本地事务信息表+定时任务 实现
核心思想: 用本地事务表 驱动 MQ(本地事务能保证一致性与原子性)
我们知道,之所以会有不一致问题,说白了就是因为MQ和RPC
也就是说如果全部操作都是本地事务,那就能保证ACID,当然也包括一致性与原子性
那把MQ/RPC转成本地事务不就行了?
或者说: 用本地事务表 驱动 MQ/RPC
当然,这种思想好,但实际实现会有严重的性能问题(反射)
那么,我们退而求其次,使用消息队列中间件来让各个分支事务通信(具体见上图),
当各个本地事务之间要通信感知彼此执行成功还是失败时,
这个通信的消息,可以用本地事务表来驱动,

来保证了消息和业务逻辑的一致性.
热门推荐
电池没电、刀头不锋利?理发推子故障排除这样做
电推剪维护保养指南:日常清洁、故障排查与使用技巧
邛海冬日穿搭指南:洋葱式穿衣法让你既暖又美
掌握三层穿搭法,邛海冬游实现保暖与时尚兼顾
关于孕期的B超检查
哈尔滨机场巴士运营时间及站点最新发布,6条线路覆盖市区
重庆西站周边五大景点:动物园、华岩寺等各具特色
400米跑道:校园体育的科学之选
从松解到稳固:三步训练缓解肩胛骨疼痛
“我爱我村 我爱我岗 我爱我家”:吕梁摄影展展现新时代风貌
阿森纳青训:足球天才的摇篮
揭秘巴萨青训营成功秘诀:中国足球青训的启示
中国青少年足球联赛:从校园到职业的逐梦之旅
教师评语如何助力学生心理健康?
如何写出有温度的期末评语:既要客观评价,又要温暖人心
如何写出走心期末评语?
从三江师范到双一流:南京大学的四校区布局与发展历程
智能改造+新兴产业双轮驱动,常熟打造“江南福地”新优势
每天一根香蕉,有效改善胃胀不适
陈皮泡茶:消化系统的救星?这些人要慎喝!
冬季润肺止咳首选金桔,4种养生食谱及食用禁忌
红宝石:东西方文化中的爱情与权力象征
玉石珠宝设计新风潮:传统工艺与现代创新的完美融合
及时且具体的赞美,才是提升团队士气的关键
领导点赞员工加班朋友圈,公司被判赔偿1.8万元
别让赞美变“拍马屁”:职场人该如何正确赞美领导
手机信号放大器:提升手机信号,让通讯更畅快?
典韦 vs 韩信:谁是《王者荣耀》最强打野?
期末评语怎么写?看这里!
刘家喜老师的期末评语秘诀:用“长宽高”模式点亮学生心灵