Domain driven design 如何通过多个微服务共享公共数据

Domain driven design 如何通过多个微服务共享公共数据,domain-driven-design,microservices,Domain Driven Design,Microservices,我正在写一篇关于微服务的学士论文 我试图将一个整体拆分为多个微服务,但现在遇到了一个问题,即数据库中有一些表与多个微服务相关。 没有机会将此数据拆分为特定于域的视图 我的方法是使用特定的表创建一个新的数据库模式,并让所有的微服务从中读取。 这将是一种共享内核的方法,微服务专家不推荐这种方法 你对这个问题有什么经验或建议吗 关于类似问题的书籍,你有什么建议吗?你应该熟悉帕特·海兰德的论文 您还应该回顾Udi Dahan的,但请仔细阅读:Udi的服务语言非常小心地区分物理边界和逻辑边界。确保你清楚他

我正在写一篇关于微服务的学士论文

我试图将一个整体拆分为多个微服务,但现在遇到了一个问题,即数据库中有一些表与多个微服务相关。 没有机会将此数据拆分为特定于域的视图

我的方法是使用特定的表创建一个新的数据库模式,并让所有的微服务从中读取。 这将是一种共享内核的方法,微服务专家不推荐这种方法

你对这个问题有什么经验或建议吗


关于类似问题的书籍,你有什么建议吗?

你应该熟悉帕特·海兰德的论文


您还应该回顾Udi Dahan的,但请仔细阅读:Udi的服务语言非常小心地区分物理边界和逻辑边界。确保你清楚他在任何给定时间描述的内容。

通常的方法是复制这些数据。每个微服务都有一份其工作所需的数据副本。如果您认为这会使您的解决方案更加复杂,那么您是对的,这是一种权衡,以获得独立可发布、独立服务的好处

另一个要考虑的是,如果你有N个微服务需要更多的引用相同的数据,你最好把这些用例保持在一个单一的服务中,而不是打破它。弗雷德·乔治(Fred George)谈到要注意将微服务拆分为“实体服务”:


我建议不要允许多个独立部署的服务读取和写入相同的数据,因为这样会导致耦合,例如,阻止该数据的架构迁移,而不会带来潜在风险。

您可以创建一个微服务来管理此公共数据(例如:国家或地区数据等)并在所有微服务之间复制表

该微服务是管理该数据的单点(使用CRUD)。在创建、更新或删除操作时,使用异步通信(kafka、rabbitMQ)同步所有微服务


使用此解决方案,所有微服务彼此独立,并且与数据同步,而无需http调用,以获得最佳速度性能

我建议你除了从技术、数据优先的角度之外,还从语言和商业的角度来探讨这个问题。为什么在两个微服务中需要相同的概念?您需要所有数据还是只需要数据的各个方面?在两种微服务中,它的命名方式是否相同?这真的是同一个概念吗?例如子域和有界上下文建模。@guillaume31我已经完成了DDD的战略设计部分,并与开发人员和领域专家进行了大量交谈。我正在使用的这个系统旨在分析一些数据并检查是否一切正常。因此有不同的用例。每个用例都在分析几个表。您的上下文映射是什么样子的?有4个有界上下文,它们通过共享中心依赖于公共数据。我的方法是让有界上下文在没有写权限的情况下从共享数据库中读取,如果没有BC,谁有写权限?这是什么样的公共数据?