【问题标题】:Microservice shared database [closed]微服务共享数据库[关闭]
【发布时间】:2018-05-01 14:35:02
【问题描述】:

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

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

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

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

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

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

  1. 创建一个通用库来访问数据库并在微服务中使用该库
  2. “导入微服务”无需直接访问数据库,而是可以使用其他服务的 API 其余部分在新数据准备好导入后立即发布。

什么是最好的解决方案?您知道解决此问题的其他可能方法吗?

非常感谢

【问题讨论】:

  • 您可能会因为这太笼统或意见问题而被关闭,但我看不出事件溯源或 CQRS 与此用例有什么关系。您的其他解决方案中的 1 和 2 都可以工作,我会说这一切都取决于。我会就这两种选择提出我的问题,并列出一些优点和缺点。

标签: mysql node.js database microservices


【解决方案1】:

在微服务世界中,服务应该根据每个服务所代表的业务领域进行划分,而不是像您提议的那样根据特定的技术功能进行划分。这是一种架构设计,我不建议仅仅为了解决某些特定的技术功能而绕过它。

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

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

【讨论】:

    猜你喜欢
    • 2019-12-06
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 2019-01-31
    • 2015-06-10
    • 2019-02-27
    • 1970-01-01
    相关资源
    最近更新 更多