温馨提示×

温馨提示×

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

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

从双11业务看分布式事务满足Saga和异步场景的示例分析

发布时间:2021-09-18 10:14:28 来源:亿速云 阅读:150 作者:柒染 栏目:编程语言

这篇文章给大家介绍从双11业务看分布式事务满足Saga和异步场景的示例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

在双11的时候,很多电商都在搞促销,包括京东。

我们以大魏的书举例,例如双11的时候,买书除了打折好有红包,这样,买书的时候双重优惠,如下图所示:

从双11业务看分布式事务满足Saga和异步场景的示例分析

那么,在双11的场景中,买书的一次请求,就包括同步和异步的场景,如下图所示。

同步场景采用Saga、异步场景采取事务消息(Sagas+本地事务消息表)。也就是说,分布式事务的设计要能同时满足同步和异步两种场景:

从双11业务看分布式事务满足Saga和异步场景的示例分析

那么,我们看一次成功的双11购物请求。

下图的1、2、3、4是的是步骤,分别调用上图的A、B、C、D应用模块。

从双11业务看分布式事务满足Saga和异步场景的示例分析

在上图中,我们从App发起请求,请求被分配到任意一个网关层,再被分配到任意一个业余逻辑层。

1.业务逻辑层会先调用商品数据源访问层进行减库存(访问DB)

2.第1步成功后,业务逻辑层访问订单数据访问层,进行创建订单本地事务(访问

DB),在下订单的同时,业务逻辑层会向MQ发送延迟订单支付消息,即事务消息。

3.第2步执行成功后,业务逻辑层调用红包数据访问层,进行减红包操

(访问DB)。成功后,红包数据访问会返回成功信息给交易逻辑层、交易逻辑层返回成功信息给网网关层、网关层返回信息给App。

4.App页面自动跳转到支付页面,即业务逻辑层调用支付数据访问层,进行前台支付。

然后,整个操作完成。

那么,MQ中的订单支付消息呢?当延迟支付消息到了超时时间后(京东是24小时),MQ的订单延迟支付消息会被发到到业务逻辑层(因为业务逻辑层订阅了MQ的Topic),然后业务逻辑层根据事务组表,判断订单有没有支付,如果支付了,则直接删除延迟消息。如果订单未支付,则将事务组表中的state由1改成3(失败):

从双11业务看分布式事务满足Saga和异步场景的示例分析

然后TM根据事务调用表,TM触发事务补偿:将红包加回去、订单+1、删除订单。

从双11业务看分布式事务满足Saga和异步场景的示例分析


最后,Proxy将事务组表中的state由1改成4(补偿成功)

那么,我们审视一下上图的架构,在超高请求到来时,可能的瓶颈点在哪?

从技术架构来看,网关、交易业务逻辑层、数据访问层都是无状态的,可以横向扩展,不存在瓶颈。对于DB而言,可以做数据分表。对于MQ而言,可以做分片。看起来也不存在性能瓶颈。

那么,为什么双11的时候,在京东购物,还会发生购物失败的情况呢?

原因是存在热点数据,也就是特别抢手的货物,例如:

从双11业务看分布式事务满足Saga和异步场景的示例分析

如果要解决热点数据问题,就需要做热点数据预测。要做热点数据预测,要先做异步化。也就是说,对于热点紧俏商品的购买请求,直接先发到MQ中。然后再依次执行业务逻辑。

从双11业务看分布式事务满足Saga和异步场景的示例分析

在这时,热点就会被压在MQ上。这时候,我们就需要对MQ做分片,但对于一个商品的一条记录,我们如何对它做分片呢?可以加一列Type,把数据一行变多行:

从双11业务看分布式事务满足Saga和异步场景的示例分析

然后我们可以把每一行记录存在一个MQ的Topic中,就能消除热点数据。

既然技术上热点数据能够消除,为啥双11京东购物还有失败呢?因为采购服务器是要花钱的,双11电商会保证交易成功率,但这个成功率不会是100%,这是从ROI的角度去考虑的问题。

总结:在设计业务架构时,考虑到超高并发流量请求,我们需要注重架构如下三个方面:

从双11业务看分布式事务满足Saga和异步场景的示例分析

关于从双11业务看分布式事务满足Saga和异步场景的示例分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

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

AI