如何在多个微服务之间共享公共数据

3
我正在撰写一篇关于微服务的学士论文。
我正在尝试将单体应用程序拆分为微服务,但现在遇到一个问题:数据库中有一些表对于不止一个微服务是相关的。无法将这些数据拆分为特定领域的视图。
我的解决方法是创建一个新的数据库架构,并让所有微服务从中读取。这是一种共享内核方法,但并不被微服务专家推荐。
您是否有任何经验或建议来解决这个问题?
您是否有类似问题的书籍推荐?

我建议你在技术、数据为先的角度之外,还要从语言学和商业角度来看待这个问题。为什么你需要在两个微服务中使用相同的概念?你是否需要所有的数据,还是只需要其中的一部分?它在两个微服务中的命名方式是否相同?它真的是同一个概念吗?即子域和有界上下文建模。 - undefined
@guillaume31 我已经完成了DDD的战略设计部分,并与开发人员和领域专家进行了大量交流。我正在处理的系统的目的是分析一些数据并检查是否一切正常。因此,存在不同的使用案例。每个使用案例都在分析几个表格。 - undefined
你的上下文地图是什么样子的? - undefined
有4个有界上下文,它们通过一个共享内核依赖于公共数据。我的方法是让有界上下文只能从一个共享数据库中读取,而没有写入权限。 - undefined
如果不是BC的话,谁有写权限?这是什么类型的共享数据? - undefined
3个回答

2
一般的方法是复制这些数据。每个微服务都有它需要完成任务的数据副本。如果您认为这会使您的解决方案更加复杂,那么您是正确的,这是获得可独立发布、隔离服务的好处所需的权衡。
另一个要考虑的问题是,如果您有 N 个微服务需要访问相同的数据,那么最好将这些用例放在单个服务中而不是分开。Fred George有一个很好的演讲,关于注意不要仅仅尝试将您的微服务拆分成“实体服务”。

https://www.youtube.com/watch?v=vs_XiP5Lkgg

我建议不要允许超过一个独立部署的服务读写相同的数据,因为这会导致耦合,可能会阻止对该数据进行模式迁移而带来潜在风险。

0
你可以创建一个单独的微服务来管理这些共享数据(例如:国家或地区数据等),并在所有微服务之间复制表格。
这个微服务是管理这些数据的唯一入口点(具有CRUD功能)。在创建、更新或删除操作中,你可以通过异步通信(kafka、rabbitMQ)将所有微服务进行同步。
通过这种解决方案,所有微服务彼此独立,并且通过数据同步而无需进行HTTP调用,以获得最佳的速度性能。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接