seata的形象化比喻

本文通过一个生动的例子解释了阿里巴巴开源项目SEATA的工作原理。SEATA是一种高性能微服务框架,用于解决分布式事务的问题。文章详细介绍了SEATA中的关键角色如TM、TC、RM以及XID的概念,并通过组织春游活动的类比,形象地展示了SEATA如何协调各参与方确保事务一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

新的技术一般不大容易理解。

不容易理解的主要原因是它不能跟我们的原本的知识体系挂钩。

解决这个问题的最好方式是,给予新的技术建立一个模型,这个模型是基于日常生活的,那就都能理解了。

阿里巴巴开源的SEATA,我想了一个比喻,分享一下。

先抄一段描述,关于几个角色的分工的:

1TM 向 TC 申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的 XID。
2XID 在微服务调用链路的上下文中传播。
3RM 向 TC 注册分支事务,接着执行这个分支事务并提交(重点:RM在第一阶段就已经执行了本地事务的提交/回滚),最后将执行结果汇报给TC。
4TM 根据 TC 中所有的分支事务的执行情况,发起全局提交或回滚决议。
5TC 调度 XID 下管辖的全部分支事务完成提交或回滚请求。

专业术语太多,极大不容易懂。

我们做一个生活的例子的匹配就会好理解的多了。

假设你是一个公司的员工,你想组织比较好的几个同事出去春游。

你们公司的规矩是,谁出来组织都可以,但是需要向行政部门经理报备并且经过批准。

你分别找了张龙,赵虎,王朝,马汉,展昭,想要邀请一块出去。

其中展昭本来答应了,但是后来遇到五鼠闹东京,去不了啦。

你组织这个活动,作为发起人,你要向行政部门报备。

同时张龙赵虎等人,也需要向行政部门说明。

 

这个例子我们来逐一匹配下对应的SEATA的角色。

你本人对应TM,你是活动发起人,TM是全局事务发起人。

行政部门经理对应TC,他不负责发起,但是他是拍板的人。

张龙赵虎王朝马汉是RM,本地事务,他们只是负责自己是去还是不去,不管别人。

当然他们也得听行政部门经理的,也就是听TC的,至于你本人只能是提建议,不能拍板。

这件事里的几个角色缺一不可,

没有你(TM)就没有人发起,

没有张龙赵虎(RM)等就没有参与者,

没有行政部门经理(TC)给你们批钱,

那你们也玩不了。

 

更为要命的是,你们公司的规矩是,

一旦有一个人拒绝,

那么本次活动不能成行。(要么都成功,要么都失败,事务的约束)

因为展昭拒绝了你,他让你滚蛋。

所以你也只好回滚,Rollback啦。

你们都玩不成啦。

 

有可能你组织的这次活动失败了。

但是另外一个同事,人家邀请了10个人,都同意了,人家反而成功。

那是你这个TM的失职,人家TC是没问题的。

 

XID对应什么呢?

比如你发起的这个活动叫 回龙观0527公园游。

这个活动是确定的毫无疑义的唯一的。

不是龙泽,也不是0528,就是回龙观0527.

张龙赵虎等人说起来这件事的时候,也说的都是回龙观0527公园游。

行政部也是,而且这个名字是行政部命名的,这个就是XID。

同样的XID下是一组的相关的本地事务。

回龙观0527公园游下就包含了张龙赵虎等5个人。

 

展昭去不了,因此行动要取消。

需要你这个负责人(TM)来发起决议,告诉行政部负责人TC,搞不了啦,散了吧。

然后行政负责人TC挨个通知张龙赵虎,定下来了,不去了,散伙。

那么你能不能通知张龙赵虎呢?

不能。

你要搞清楚自己的身份。

你只是一个小人物,是个TM。

只能提提倡议。

决定必须是TC 行政负责人来做。

 

上面只是描述了一次活动发生的场景。

实际生活中,肯定不会只有一个活动,往往是抢来抢去。举例来说,你可以发起一个公园游玩,你的好朋友魏无忌也可以发起,另外一个好朋友王铁锤也可以发起,你们同为TM,都想组织活动,这个时候很可能要产生资源冲突,你想邀请赵虎,魏无忌也要邀请赵虎,王铁锤想要邀请马汉,你们几个TM产生了资源冲突,怎么办呢?

不止如此,作为RM自身,也有自己的冲突,比如王朝的媳妇儿卢晓梅不想让王朝出去玩,想让他陪着自己在家里过生活,王朝就必须平衡是听你的还是听老婆的,RM自己也冲突了。

最头疼的情形是有的人既答应了这个,又答应了那个,脚踩两只船。

作为Seata来说,就得来解决这个问题,TM之间的争夺,RM自身的争夺,你作为一个框架,你得管啊。

怎么管呢?

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值