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

Microservices: how to handle scenario when data is needed between bounded contexts

我开始将一个 node.js 项目转移到微服务方法,但我不明白应该如何共享数据。这是一个例子,假设我有以下限界上下文:

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

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

I assume that I could copy the accounts table over to the image and video databases and only store the accounts data that is needed but this seems like a nightmare in terms of maintaining consistency, etc. as account information is updated frequently, not to mention if other microservices need this same dependency

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

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

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

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

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

如果这不可能,因为您首先需要来自用户的特定数据,只需调用帐户服务,该服务将调用图像服务以检索其数据,然后发送整包退回。

这是否可能由您决定。

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