微服务共享数据库

时间:2017-11-17 18:27:35

标签: mysql node.js database microservices

我知道这个问题已经讨论了很多,但我想描述一下我的情况。

据我所知,有一些技术和最佳实践可以解决微服务架构中的共享数据库(事件源代码,CQRS ......)但是对于我的案例来说,所有这些似乎都很复杂,让我解释一下。

我使用nodejs构建了一个rest API。此API允许您使用GET请求获取存储在mysql数据库中的数据。 现在我需要在同一个数据库中导入大量数据(每次创建一个新表时)。第一个解决方案是将新端点(POST请求)添加到现有微服务以创建新表并添加新数据。

但我正在考虑创建一个不同的nodejs微服务(导入服务),因为导入功能可能非常耗费CPU并且nodejs是单线程;我不希望用户必须等待获取数据,因为另一个用户正在导入新数据。

该解决方案的问题在于我必须在2个微服务之间共享相同的数据库。使用典型方法(事件源,CQRS)可能是最佳解决方案,但它使架构过于复杂(对于此项目,我不需要解决数据一致性问题)。

我可以使用其他2种解决方案:

  1. 创建一个公共Lib来访问数据库并使用微服务中的lib
  2. “导入微服务”而不是直接访问数据库,可以使用其他服务的API其余部分在准备好导入后立即发布新数据。
  3. 什么是最佳解决方案?你知道其他可能解决这个问题的方法吗?

    非常感谢

1 个答案:

答案 0 :(得分:1)

在微服务领域,服务应根据每个服务所代表的业务领域进行划分,而不是按照您提议的具体技术功能进行划分。这是一个建筑设计,我不建议绕过一些特定的技术功能。

解决问题的方法不是将微服务拆分为同一业务域中的两个服务。

您的问题是性能问题。性能问题通常通过扩展来解决。通过部署多个容器来复制您的服务是完全正常的。 Docker默认为您提供此选项,在部署服务时,您可以指定要部署的副本数。