Domain driven design 用户注册的最终一致性

Domain driven design 用户注册的最终一致性,domain-driven-design,eventual-consistency,bounded-contexts,Domain Driven Design,Eventual Consistency,Bounded Contexts,我们的项目是使用DDD开发的。我们决定将用户身份移动到单个微服务,该微服务将用于检查用户身份、颁发和验证令牌 现在,由于帐户和用户位于不同的微服务中,该微服务解决了处理用户和帐户详细信息的问题,因此我们遇到了一个称为“最终一致性”的挑战 我们面临的问题是,我们应该首先在accounts和users microservice中创建帐户/用户,然后将事件发布到user identity microservice,或者反之亦然 在第一种情况下,我们将立即获得帐户和用户的基本信息,但由于最终的一致性延迟

我们的项目是使用DDD开发的。我们决定将用户身份移动到单个微服务,该微服务将用于检查用户身份、颁发和验证令牌

现在,由于帐户和用户位于不同的微服务中,该微服务解决了处理用户和帐户详细信息的问题,因此我们遇到了一个称为“最终一致性”的挑战

我们面临的问题是,我们应该首先在accounts和users microservice中创建帐户/用户,然后将事件发布到user identity microservice,或者反之亦然

在第一种情况下,我们将立即获得帐户和用户的基本信息,但由于最终的一致性延迟,无法提供令牌,因此没有用户能够登录

在第二种情况下,用户可以登录,但当他登录到他的帐户时,由于最终的一致性延迟,帐户信息将不可用。对于这种情况,有一种解决方法,即在满足最终一致性时发送确认邮件,以便用户可以确认注册和登录


我想听听反馈意见,哪种情况更有意义,还有什么问题我现在看不出来吗?

不需要最终的一致性延迟。regiatrationCompleted事件只应在所有零件完成后发生。您的界面将响应此事件,触发欢迎电子邮件和更多类似的操作

由于不同的微服务可以并行处理事件,因此引发此registrationCompleted事件的时间应该非常短

没有帐户信息登录是所有选项中最糟糕的,因为您可能会遇到安全问题(例如帐户具有某些权限或被锁定)


还要注意的是,微服务只是尽可能小,而不是更小。当然,如果你不能合理地处理一个分开的箱子,那么你就把它弄得太小了。

如果你有一把锤子,一切看起来都像钉子。看起来你太努力了,想把伟大的想法应用到一个不值得的问题上

在使用DDD处理问题时,考虑战略性DDD(即设计部分)至关重要。有界上下文是特定语言存在的地方,并表现为与特定业务能力关联的实现

现在,您的工作是查看每个BC,判断哪种体系结构适合该上下文。整个系统不,我应该说不应该,必须遵循相同的实现。您真的需要微服务来创建帐户\登录吗?听起来您可以使用类似CRUD的实现,消除您引入的任何最终一致性问题


简单一点,先生。

我觉得把用户和身份区分开来很奇怪<代码>用户通常是标识BC中的一个概念。无论如何,如果用户只使用他们的身份登录,他们是否能够使用核心系统功能(除了访问他们的帐户信息外)?因此,基本上你是说我应该将负载最高的微服务(即用户身份)与帐户和用户ms合并,以保持简单?我只是想能够适当地伸缩。我注意到你提到的积垢不可能是微秒。我认为这是一种错误的说法。