使用Saga管理事务:

在微服务架构中,单个服务中的事务仍然可以使用ACID事务。然而,在对更新多个服务所拥有的数据的操作实现事务时,我们面临着新的挑战。

跨服务的操作必须使用所谓的Saga(一种消息驱动的本地事务序列)来维护数据一致性,而不是ACID事务。Saga的一个挑战在于只满足ACD(原子性,一致性和持久性)特性,缺乏隔离性。因此,应用程序必须使用所谓的对称,找到办法来防止或减少由于缺乏隔离而导致的并发异常。

微服务架构下的事务管理:

微服务架构下的事务往往需要横跨多个服务,每个服务都有属于自己的私有数据库。在这种情况下,应用程序必须使用一些更为高级的事务管理机制来管理事务。微服务应用程序需要使用Saga机制管理事务。

服务的数据是私有的,外部只能通过服务暴露的API访问这些数据,因此在数据库层面实现分布式事务是不可行的。

使用Saga模式维护数据一致性:

Saga是一种微服务架构中维护数据一致性的机制,它可以避免分布式事务所带来的问题。一个Saga表示需要更新多个服务中数据的一个系统操作。Saga由一连串本地事务组成。每一个本地事务负责更新它所在服务的私有数据库,这些操作仍旧依赖于ACID事务框架和函数库。

系统操作启动了Saga的第一步。完成本地事务会触发下一个本地事务的执行。使用异步消息实现Saga步骤的协调。

使用异步消息不仅可以确保Saga参与方直接的松耦合,另一个重要好处是它确保Saga的所有步骤都被执行,即使一个或多个Saga的参与方暂时不可用。这是因为如果消息的接收方暂时不可用,则消息代理会缓存消息,直到消息可以被发送为止。

Saga使用补偿事务来回滚所作出的改变:

数据库ACID事务,可用自动地回滚事务。但是,Saga无法自动回滚,因为每个步骤都会将其更改提交到本地数据库。这意味,某个步骤执行失败了,必须对之前执行过的步骤进行回滚。我们必须编写补偿事务。

Saga按照正常事务的反向顺序来执行补偿事务:例如 执行事务的步骤是A、B、C。那么执行补偿事务回滚的顺序则是C、B、A。