axonframework微服务

使用spring boot和axon实现saga模式-- 上

2021-03-12  本文已影响0人  water_lang

Saga模式是每个服务一个数据库模式的直接结果。在每一数据库对应一个服务的模式中,每个服务都有自己的数据库。换句话说,每个服务只对自己的数据负责。

这是一个棘手的问题。

一些业务场景是需要来自多个服务的数据。这样的事务可能还需要跨服务更新或处理数据。因此,需要一种机制来保证跨多个服务的数据一致性。

这种情况导致形成了Saga模式的基础。

在这个系列文章中,我们将使用Axon框架和springboot实现Saga模式。

Axon框架是一个微服务框架,它使构建分布式系统变得容易。它为Spring Boot提供了强大的支持,我们将使用它来构建一个应用程序例子。

在第1部分(本文)中,我们将讲解Saga模式到底是什么。我们还将研究不同类型的Saga实现。最后,我们还将实现一个应用程序例子。

在第2部分中,我们将开始使用Saga模式构建应用程序例子。

第3部分我们将继续实现我们的应用程序。

最后,在第4部分中,我们将测试我们的应用程序,并看看它是如何运行的。

Saga模式的定义

基本上有两种类型的传奇。换句话说,有两种方法可以实现Saga模式
Saga模式的目的是以Saga的形式实现分布式事务。

Saga只不过是一系列本地事务。这些本地事务发生在各个服务内部。每当本地事务发生时,它都会发布消息或事件。此类事件会触发这个Saga中的下一步操作。

此时,您可能会问,当Saga序列中的单个事务失败时会发生什么情况?

在这种情况下,Saga将执行一系列的补偿事务。这些事务基本上会撤销前面事务所做的变更。

Saga的类型

基本上有两种类型的Saga。换句话说,有两种方法可以实现Saga模式。

基于Choreography(协调)的 Saga

在这种Saga实现中,每个服务发布一个或多个域事件。这些域事件触发其他微服务中的本地事务。


图片.png

我们来讲解一下上面的图片内容吧:

这是一个非常简单的例子。在真实的生活中,执行这样的分布式事务将涉及许多业务规则和步骤。然而,此示例仅用于演示Saga模式的工作原理。

这里需要注意的重要一点是,每个服务都在编排中扮演自己的角色。每个服务基本上都依赖于来自其他服务的事件。

基于Orchestration(编排)的saga

在基于编排的Saga中,有一个编排者(比如乐队指挥者)。协调器也可以看作是一个管理器,它指导参与者服务执行本地事务。

下面是基于Orchestration实现的前面例子:


图片.png

我们来讲一下这种方式的逻辑:

Saga模式 -优缺点

Saga模式最大的好处是它可以让数据在多个服务中流转并且最终维护数据一致性。从微服务体系结构的角度来看,这一点非常重要,因为它允许我们在不紧耦合的情况下编写单独的服务。如果遇到分布式事务,我们可以使用Saga模式。

然而,这种方法也有缺点。反对Saga模式的主要观点是,这种模式使编程模型更加复杂。一个简单的例子是开发补偿事务,以防出现问题。此外,开发人员通常不完全适应这种编程模型。至少,现在还没有。

另外一个难点是原子操作:聚合状态更新和发布领域事件的原子性。

通常,Saga模式会与其他一些模式(如事件来源和CQRS)一起配合使用。这些模式专门尝试处理围绕原子更新聚合状态和发布事件的场景。

实现Saga模式

现在我们已经了解了什么是Saga模式,我们将探讨如何实现它。

我们将着眼于基于编排(Orchestration-Based)的实现。我们将使用与上面描述的Order服务相同的情况。

我们将使用的一些工具和框架如下:

原文:http://progressivecoder.com/saga-pattern-implementation-with-axon-and-spring-boot-part-1/

上一篇下一篇

猜你喜欢

热点阅读