如何在几个微服务上共享通用数据

时间:2018-04-26 11:15:02

标签: domain-driven-design microservices

我正在撰写关于微服务的学士论文。

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

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

您对此问题有任何经验或建议吗?

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

3 个答案:

答案 0 :(得分:1)

一般方法是复制此数据。每个微服务都有一份工作所需的数据副本。如果您认为这会使您的解决方案变得更加复杂,那么您就可以获得独立可释放的隔离服务带来的好处。

要考虑的其他事情是,如果你有N个微服务需要的不仅仅是对相同数据位的引用,那么你可能最好将这些用例集中在一个服务中,而不是分解它。弗雷德乔治有一个很好的谈论,只是想看着你的微服务分裂成'实体服务':

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

我建议不要允许多个独立部署的服务来读取和写入相同的数据,因为最终会出现一个耦合阻止,例如这些数据的模式迁移没有潜在的风险。

答案 1 :(得分:0)

你应该熟悉Pat Helland的论文Immutability Changes Everything

您还应该查看Udi Dahan的Data Duplication and Replication,但请仔细阅读:Udi的服务语言会谨慎区分物理边界和逻辑边界。确保你在任何特定的时间都清楚他所描述的内容。

答案 2 :(得分:0)

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

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

使用此解决方案,所有微服务都彼此独立,并且无需http调用即可与数据同步,以实现最佳速度性能。