微服务:如何处理有限上下文之间需要数据的场景

我开始将一个node.js项目移动到一个微服务的方法,并没有得到如何共享数据。 这里是一个例子,假设我有以下有界的上下文:

  • 帐户(用于pipe理用户帐户,权限,login/注销,configuration文件等)
  • 图像(用于pipe理file upload,如与给定帐户关联的个人资料照片,图像库等)
  • video(用于pipe理video上传和转码为与给定用户相关的各种格式)

在这个例子中,图像和video似乎有自然依赖的帐户有限上下文或微服务。 我假设我可以将帐户表复制到图像和video数据库,并只存储所需的帐户数据,但这在保持一致性等方面看起来像一场噩梦,因为帐户信息经常更新,更不用说如果其他微服务需要这种相同的依赖。 我可以让所有三个微服务使用相同的数据库,但是这违反了每个微服务与自己的数据库绑定的build议。

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

您不需要将帐户数据复制到video/图像服务。 当你存储一个video/图片,只需要给它的accountID。

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

如果您使用API​​网关,则可以从它进行2个asynchronous并行调用,然后将这两个数据合并到一个DTO中,并将其返回。

如果因为您首先需要用户的特定数据而无法实现这一点,则只需拨打账户服务电话,该服务就会调用图像服务来检索数据,并将整个数据包发送回去。

这取决于你是否有可能。

长话短说,只是存储每个video/图像实体的帐户ID。

我假设我可以将帐户表复制到图像和video数据库,并只存储所需的帐户数据,但这在保持一致性等方面看起来像一场噩梦,因为帐户信息经常更新,更不用说如果其他微服务需要这种相同的依赖

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

这减less了任何一致性问题,降低到帐户ID变化,这可以通过使账户不可改变来缓解。 这意味着一旦创build一个帐户,永远不会被删除。 这样,video或图像就不可能与不再存在的帐户相关联。