1

我开始将 node.js 项目迁移到微服务方法,并且不知道应该如何共享数据。这是一个示例,假设我有以下有界上下文:

  • 帐户(用于管理用户帐户、权限、登录/注销、配置文件等)
  • 图片(用于管理文件上传,例如与给定帐户关联的个人资料图片、图片库等)
  • 视频(用于管理视频上传和转码为与给定用户相关的各种格式)

在此示例中,图像和视频似乎对帐户有界上下文或微服务具有自然依赖性。我假设我可以将帐户表复制到图像和视频数据库并仅存储所需的帐户数据,但这在保持一致性等方面似乎是一场噩梦,因为帐户信息经常更新,更不用说是否其他微服务也需要同样的依赖。我可以让所有三个微服务都使用同一个数据库,但这违反了每个微服务都绑定到自己的数据库的建议。

处理这种情况的推荐方法是什么?我仍处于计划阶段,并希望确保我以正确的方式做到了这一点。

4

2 回答 2

1

我假设我可以将帐户表复制到图像和视频数据库并仅存储所需的帐户数据,但这在保持一致性等方面似乎是一场噩梦,因为帐户信息经常更新,更不用说是否其他微服务也需要同样的依赖

我认为那肯定是矫枉过正。实际上,这种依赖的程度似乎取决于视频和图像服务都需要知道他们应该与自己的实体关联的帐户。在这两种情况下,这都可以通过简单地针对实体存储帐户 ID 来实现。

这将任何一致性问题减少到帐户 ID 更改,这可以通过使帐户不可变来缓解。这意味着一旦创建了帐户,就永远无法删除它。这样,视频或图像就不可能与不再存在的帐户相关联。

于 2017-02-27T16:33:25.910 回答
1

您无需将帐户数据复制到视频/图像服务中。当您存储视频/图片时,只需提供 accountID 即可。

例如,当您需要获取用户及其图像时,您有不同的选项来获取数据:

如果您使用 API 网关,您可以从它对服务进行 2 次异步并行调用,并将这两个数据合并到 DTO 中并将其返回。

如果因为您首先需要来自用户的特定数据而无法做到这一点,则只需调用帐户服务,该服务将调用图像服务以检索其数据,并将整个包发回。

由您决定是否可行。

长话短说,只需将帐户 ID 与每个视频/图像实体一起存储。

于 2017-02-27T16:52:19.560 回答