我现在正试图以分布式方式为面向微服务的应用程序设计数据库。我的申请与大学管理有关。我有不同的大学说A,B,C。每所大学都有单独的用户使用他们的商业数据。现在我计划为不同的大学设计单独的数据库来存储他们的用户数据。因此,每所大学都有自己的用户数据库和额外的一个数据库来管理他们的应用程序表。如果我有2所大学,那么我有2个用户详细信息DB和其他2个DB用于应用程序表。
我的困惑在于,当我在搜索数据库设计时,我只看到保留一个公共数据库来存储所有用户的方法(这里为所有大学的所有用户提供一个DB)。因此,每个用户都在一个数据库中混合。
如果我为每所大学分别关注数据库,是否可以支持分布式数据库架构模式和面向微服务的标准?或者我是否需要为所有用户保留一个数据库?
如何找出适合微服务/分布式数据库设计模式的方法?
答案 0 :(得分:1)
实际上可能有多种解决方案,而不是最好的解决方案,最好的解决方案是适合您产品要求的解决方案。
我认为最好为每个客户(大学)配备单独的数据库,以便即使出现错误,也始终保持数据隔离。此外,随着时间的推移,数据库可能会变得非常庞大,以至于可能会导致配置/管理单独备份,清理个别客户端等问题。
现在有了单独的数据库,在数据库中管理分布式事务会带来挑战,因为您不知道哪个部分会在许多部分中失败。要对此进行管理,您可能必须在所有微服务中实现消息/事件驱动机制并确保一致性。
关于消息/事件机制,这是一个简单的用例场景,假设有两个服务" A" (用户注册)和" B" (电子邮件服务)
以上是最好的情况,即使是经纪人本身,问题仍然可能发生。 如果你认为你需要这个,你必须深入研究它。
一些可能有帮助的链接。
http://how-to-implement-a-microservice-event-driven-architecture-with-spring-cloud-stre
答案 1 :(得分:0)
我不认为这是一个有效的设计,每个客户端使用一个数据库,这是一个多租户架构实践,每个微服务的数据库是一个微服务架构实践。你搞混了。
如果您将使用微服务架构,您最好将其设计为有界上下文,并且每个Context都有自己的数据库来实现微服务主要规则自治