用户和身份验证的分布式数据库设计架构用例

Distributed Database Design Architecture Use Case for Users & Authentication

我现在正在尝试以分布式方式为我的面向微服务的应用程序设计数据库。我的申请与大学管理有关。我有不同的大学,比如 A、B、C。每所大学都有不同的用户来使用他们的业务数据。现在我计划为不同的大学设计单独的数据库来存储他们的用户数据。因此每所大学都有自己的用户数据库和额外的数据库来管理他们的应用程序表。如果我有 2 所大学,那么我有 2 个用户详细信息数据库和其他 2 个用于应用程序表的数据库。

这里我的困惑是,当我在搜索数据库设计时,我只看到了保留一个公共数据库来存储所有用户的方法(这里是所有大学的所有用户的一个数据库)。所以每个用户都混合在一个数据库中。

如果我为每所大学使用单独的数据库,是否可以支持分布式数据库架构模式和面向微服务的标准?或者我需要为所有用户保留一个数据库吗?

如何找出适合微服务/分布式数据库设计模式的方法?

实际上可能有多种解决方案,没有一种是最好的,最好的解决方案是适合您产品需求的一种。

我认为最好为每个客户(大学)使用单独的数据库,以保持数据始终隔离,即使出现问题也是如此。此外,随着时间的推移,数据库可能会变得如此庞大,以至于可能会导致 configure/manage 单独备份、单个客户端清理等问题

现在有了单独的数据库,跨数据库管理分布式事务面临挑战,因为您不知道哪个部分会失败。要管理它,您可能必须在所有 micro-services 中实施 message/event 驱动机制并确保一致性。

关于message/event机制,这里是一个简单的用例场景,假设有两个服务"A"(user-registration)和"B"(email-service )

  1. "A"临时注册一个用户,发布一个发送确认邮件的事件。
  2. 消息转到消息代理
  3. "B"收到消息。
  4. 确认电子邮件已发送给用户。
  5. 用户确认电子邮件至"B"
  6. "B" 向代理发布用户确认事件
  7. "A"收到确认事件,流程完成

以上是最好的情况,即使是broker本身也可能出现问题。 如果你认为你需要这个,你必须深入研究它。

一些可能有帮助的链接。

http://how-to-implement-a-microservice-event-driven-architecture-with-spring-cloud-stre

A Guide to Transactions Across Microservices

我不认为这是一个有效的设计,每个客户端使用一个数据库是一种 Multi-tenant 架构实践,每个微服务一个数据库是一种微服务架构实践。你把事情搞混了。

如果你将使用微服务架构,你最好将其设计为限界上下文,并且每个上下文都有自己的数据库以实现微服务主要规则Autonomy