我现在正在尝试以分布式方式为我的微服务应用程序设计数据库。我的应用与大学管理有关。我有不同的大学说A,B,C。每所大学都有单独的用户使用其业务数据。现在,我计划为单独的大学设计单独的数据库,以存储其用户数据。因此,每所大学都有自己的用户数据库,还有一个用于管理其应用程序表的数据库。如果我有2所大学,那么我有2个用户详细信息DB和其他2 dB用于应用程序表。
在这里,我的困惑是,当我搜索数据库设计时,我只看到保留一个通用数据库以存储所有用户的方法(在这里为所有大学的所有用户提供一个DB(。因此,每个用户都在一个数据库中混合。
如果我遵循每所大学的单独数据库,可以支持分布式数据库架构模式和面向微服务的标准?还是我需要为所有用户保留一个DB?
我如何找出适用于微服务/分布式数据库设计模式的方法?
实际上可能有多种解决方案,而不是最好的解决方案,最好的解决方案是适合您产品要求的解决方案。
我认为,对于您的每个客户(大学(,即使发生错误的情况,使用单独的数据库(大学(始终隔离,这是一个更好的主意。此外,随着时间的推移,数据库可能会变得如此巨大,以至于可能导致问题以配置/管理单独的备份,为单个客户端清理等。
现在,使用单独的数据库,由于您不知道哪个部分会在许多部分中失败,因此在管理跨数据库的分布式交易方面面临挑战。为了管理这一点,您可能必须在所有微服务中实现消息/事件驱动的机制并确保一致性。
关于消息/事件机制,这是一个简单的用例场景,假设有两个服务" A"(用户注册(和" B"(电子邮件 - 服务(
- " a"临时注册用户,并发布发送确认电子邮件的事件。
- 消息转到消息经纪
- 该消息是由" B"收到的。
- 确认电子邮件发送给用户。
- 用户将电子邮件确认给" B"
- " B"将用户确认事件发布给经纪人
- " a"接收确认事件,该过程已完成。
上面的情况是最好的情况,即使在经纪人本身之间,问题仍然可能发生。如果您认为需要这个,则必须深入研究。
一些可能会有所帮助的链接。
http://如何to-implement-a-microservice-event-driven-driven-architecture with-spring-cloud-stre
跨微服务的交易指南
我不认为这是一个有效的设计,每个客户端使用数据库是多租户架构实践,而每个微服务数据库是微服务架构实践。您正在混合事物。
如果您将使用微服务体系结构,则更好地将其设计为有限的上下文,并且每个上下文都有自己的数据库来实现MicroServices MicroServices MAIRSERVICES 自治