微服务设计模式 - Saga



问题陈述

微服务架构将应用程序构建为一组松耦合的微服务,每个服务都可以以敏捷的方式独立开发,以实现持续交付/部署。如果我们使用了每个服务一个数据库的设计模式,那么如何实现跨越多个服务的交易?

解决方案

我们可以使用 Saga 模式。Saga 是一系列本地事务。在此模式中,每个事务更新数据库并触发事件或发布消息以进行 Saga 中的下一个事务。如果任何本地事务失败,Saga 将触发一系列事务以撤消迄今为止本地事务所做的更改。

考虑订单服务和客户服务的示例。订单服务可以创建订单,然后询问客户服务信用额度是否已超过。如果信用额度已超过,则客户服务将向订单服务引发事件以取消订单,否则成功下单。

Saga Pattern

为了实现此模式,我们通常需要基于编排的 Saga 或基于协调器的 Saga。

在基于编排的 Saga 中,服务在本地事务期间处理域事件,并完成事务或撤消事务,而在基于协调器的 Saga 中,协调器对象在本地事务期间处理事件,然后协调要执行哪个本地事务。

广告