具有微服务和Spring Boot的分布式事务

问题描述 投票:0回答:2

目前我正在努力将monolith应用程序迁移到微服务中,我遇到的第一个问题是着名的分布式事务问题。

我有一个称为身份验证微服务的微服务,其任务是使用Oauth2对用户进行身份验证。

我的问题如下:

前端填写表格并发送大量数据,其中一些属于员工微服务,另一些属于认证服务

因此,当我收到这些数据时,我必须立即添加用户和员工。现在想象用户已被添加,但员工不是因为某种失败?甚至更糟糕的是,当我删除用户并且员工不会被删除时?

所以你可能会想到2PC或saga模式,我投入了2天阅读并权衡使用这些解决方案的可能性,但它使事情变得复杂,我认为我的问题不值得。

我发布了这个问题,以寻求任何新的想法,或者可能有一些我缺少的新技术。

谢谢

spring-boot distributed-transactions
2个回答
0
投票

添加用户不需要是身份验证服务的工作。在同一服务中插入员工和用户,并通知新用户的身份验证服务。 (使用众多事件/消息系统之一)


0
投票

通常有两种方法可以达到同样的目的:

  1. SAGA模式 - 你读它
  2. 您在一个服务中进行事务,然后另一个服务侦听事件并执行更新。就像删除用户一样,生成事件UserRemoved和Employee服务听取它并删除员工。

在微服务中理解这一点非常重要:

有时您公开的api会说创建员工,它应该创建用户和员工两者并同时返回员工ID和用户ID,这样就无法在任何异步事务中处理这些事情。

对于这些类型的东西,我们需要使系统自动纠正这种不一致。例如:

让我们说在CreateEmployee中,创建了第一个用户id,因为某些错误而没有创建该员工,然后再次创建一个具有相同用户名的员工应该id做什么。在这种情况下,如果创建员工处理这种情况,如果已存在该用户的用户,那么如果不创建员工并返回,员工是否也存在。

会有更多这样的情况,因此在微服务​​系统中应该是可自动校正的并且最终是一致的。每次都尝试完全一致并不是正确的目标。

© www.soinside.com 2019 - 2024. All rights reserved.