C# 微服务体系结构数据库回滚

C# 微服务体系结构数据库回滚,c#,asp.net,asp.net-core,microservices,C#,Asp.net,Asp.net Core,Microservices,我有一个microseric架构,有多个服务,每个服务都包含自己的数据库,还有一个网关,它被认为是业务逻辑 网关: 处理逻辑 呼叫服务 服务1: 存储与服务相关的数据 它有自己的数据库 服务2: 存储与服务相关的数据 它有自己的数据库 例如,网关调用服务1来插入一些数据。然后它调用服务2来插入一些数据 现在的问题是:如果对服务2的调用失败,如何撤消对服务1的插入?我知道我可以调用一个方法,但这不是最好的解决方案。 那么撤销更改的最佳方法是什么呢?考虑到您的体系结构的非常具体的细节,一

我有一个microseric架构,有多个服务,每个服务都包含自己的数据库,还有一个网关,它被认为是业务逻辑

网关:

  • 处理逻辑
  • 呼叫服务
服务1:

  • 存储与服务相关的数据
  • 它有自己的数据库
服务2:

  • 存储与服务相关的数据
  • 它有自己的数据库
例如,网关调用服务1来插入一些数据。然后它调用服务2来插入一些数据

现在的问题是:如果对服务2的调用失败,如何撤消对服务1的插入?我知道我可以调用一个方法,但这不是最好的解决方案。
那么撤销更改的最佳方法是什么呢?

考虑到您的体系结构的非常具体的细节,一个直截了当的答案是分布式事务管理。但这将有点困难,不是在实现方面,而是在以后的维护、性能等方面


但我的问题是,我觉得体系结构中存在一些缺陷,因为如果由于服务2中的某些故障而必须回滚服务1中的数据,那么这两个服务之间存在紧密耦合,而这并不是微服务应该独立的表现。 因此,您可能需要稍微更改一个体系结构

  • 您可以在微服务之间共享数据库,这将使事务处理更容易
  • 您可以在ApacheKafka等微服务之间引入通信机制(RabbitMQ或Hazelcast是经济高效的)

分布式事务很难处理。“两阶段提交”是一个可能的搜索词……处理这些类型事务的一种方法是