繁体   English   中英

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

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

我开始将node.js项目移至微服务方法,但没有得到应该如何共享数据的方法。 这是一个示例,假设我具有以下有限上下文:

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

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

建议使用什么方法来处理这种情况? 我仍处于计划阶段,并希望确保以正确的方式执行此操作。

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

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

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

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

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

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

如果由于首先需要用户的特定数据而无法实现,则只需致电帐户服务,该帐户服务转而致电图像服务以检索其数据,然后将整个数据包发回。

由您决定是否可行。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM