Sagas的业务实现逻辑是什么

发布时间:2021-08-06 15:16:32 作者:Leah
来源:亿速云 阅读:188

今天就跟大家聊聊有关Sagas的业务实现逻辑是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

Sagas的业务实现逻辑是什么

Sagas的业务实现逻辑是什么

在上图中,TDB会有两个表。也就是说,事务补偿能够成功实现,主要靠TDB中的这两张表!:

接下来,我们介绍上面两个表每个字段的含义:txid是主键、state表示事务状态(例如:1开始 2成功  3失败  4补偿成功 )、actionid是操作次数的id、callmethod是补偿接口、调用服务的类型(如web/RPC)、params是具体数据包的调度参数。

而事务补偿,就是当事务调用失败,事务拦截器修改事务组状态(state)。然后由TM发起,分布式事务补偿服务异步执行补偿。

上面的内容比较抽象,我们结合场景进行说明,还是以下图为例。

Sagas的业务实现逻辑是什么

大魏在京东购物,这是一个分布式事务。这个时候,proxy生成事务组表的一行数据,并且记录(t1代表分布式事务1):

Sagas的业务实现逻辑是什么

Sagas的业务实现逻辑是什么

接下来,要正式干活儿了。Proxy记录事务A的调用信息,写入事务组表:

Sagas的业务实现逻辑是什么

记录完毕后,A做本地事务:

Sagas的业务实现逻辑是什么

A执行成功后,Proxy用类似的方式管理B,以此类推C。

Proxy在事务调用表中记录B的调用内容:

Sagas的业务实现逻辑是什么

B本地事务执行:

Sagas的业务实现逻辑是什么

Proxy在事务调用表中记录C的调用内容:

Sagas的业务实现逻辑是什么

然后C执行。

Sagas的业务实现逻辑是什么

当C本地事务执行成功后,Proxy将会修改TDB中的信息:

修改前:

Sagas的业务实现逻辑是什么

修改后:

Sagas的业务实现逻辑是什么

也就是说,标记分布式事务执行成功。

但是,如果在上面的步骤中,C执行失败呢?

首先,Proxy会将TDB中的事务组表进行如下修改,将状态从1开始修改为3失败:

修改前:

Sagas的业务实现逻辑是什么

修改后:

Sagas的业务实现逻辑是什么

接下来,Schedule(即TM)会扫描到(定期扫描)t1失败(状态为3)。然后Schedule发现T1在事务调用表有2个关联的本地事务(C做失败已经自动rollback)

Sagas的业务实现逻辑是什么

接下来,根据事务调用表中的pramatype字段,RPC Client调用补偿接口,对事务进行补偿。

先补偿B:

Sagas的业务实现逻辑是什么

再补偿A:

Sagas的业务实现逻辑是什么

最后,补偿完毕后,proxy修改TBD中的事务组表,将state从3改成4,代表补偿成功。

Sagas的业务实现逻辑是什么

我们上述逻辑,结合业务逻辑组件进行结合。这次我们把业务逻辑模块换一下。京东购物,选中货物后,库存会被锁住(A)、然后支付的时候,会选择红包或者京东卡,会有减红包或减京东卡余额的操作(C)、最后成功创建订单(C)。

Sagas的业务实现逻辑是什么

具体参考下图:

Sagas的业务实现逻辑是什么

总结:在本文中,我们介绍了Saga的业务实现逻辑。关于Proxy的作用:

Proxy的实现,在Java中是通过@around实现的。

看完上述内容,你们对Sagas的业务实现逻辑是什么有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

推荐阅读:
  1. QT之界面与业务逻辑的分离(十二)
  2. PostgreSQL中函数CommitTransaction的实现逻辑是什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

上一篇:.NET Core中怎么利用SQL Server数据库实现读写分离

下一篇:如何解决某些HTML字符打不出来的问题

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》