目前我正在努力将monolith应用程序迁移到微服务中,我遇到的第一个问题是着名的分布式事务问题。
我有一个称为身份验证微服务的微服务,其任务是使用Oauth2对用户进行身份验证。
我的问题如下:
前端填写表格并发送大量数据,其中一些属于员工微服务,另一些属于认证服务
因此,当我收到这些数据时,我必须立即添加用户和员工。现在想象用户已被添加,但员工不是因为某种失败?甚至更糟糕的是,当我删除用户并且员工不会被删除时?
所以你可能会想到2PC或saga模式,我投入了2天阅读并权衡使用这些解决方案的可能性,但它使事情变得复杂,我认为我的问题不值得。
我发布了这个问题,以寻求任何新的想法,或者可能有一些我缺少的新技术。
谢谢
添加用户不需要是身份验证服务的工作。在同一服务中插入员工和用户,并通知新用户的身份验证服务。 (使用众多事件/消息系统之一)
通常有两种方法可以达到同样的目的:
在微服务中理解这一点非常重要:
有时您公开的api会说创建员工,它应该创建用户和员工两者并同时返回员工ID和用户ID,这样就无法在任何异步事务中处理这些事情。
对于这些类型的东西,我们需要使系统自动纠正这种不一致。例如:
让我们说在CreateEmployee中,创建了第一个用户id,因为某些错误而没有创建该员工,然后再次创建一个具有相同用户名的员工应该id做什么。在这种情况下,如果创建员工处理这种情况,如果已存在该用户的用户,那么如果不创建员工并返回,员工是否也存在。
会有更多这样的情况,因此在微服务系统中应该是可自动校正的并且最终是一致的。每次都尝试完全一致并不是正确的目标。