mean-stack - 微服务:有界上下文之间的模型共享

标签 mean-stack microservices bounded-contexts

我目前正在构建一个使用平均堆栈开发的基于微服务的应用程序,并且遇到了几种需要在有界上下文之间共享模型的情况。

作为示例,我有一个用户服务,用于处理注册过程以及登录(生成 jwt)、注销等。我还有一个文件服务,用于处理用户碰巧上传的个人资料图片和其他图像上传。此外,我还有一个好友服务来跟踪成员之间的关联。

目前,我将用户服务使用的用户表中的用户 guid 以及名字、中间名和姓氏字段添加到文件表和 friend 表中。这样,只要我在其他服务( friend 和文件)中需要这些字段,我就可以查询这些字段,而无需在每次查询时进行任何休息调用来获取信息。

这里是警告:

缺点似乎是我必须这样做,我选择了带有rabbitmq的seneca,每当用户从用户表更新其信息时通知文件和 friend 表。

1) 我应该担心服务变得太啰嗦吗?

2)如果一个小时内发生大量更新,这是否会导致任何性能问题?

3)在尝试隔离边界时,我只是没有看到另一种方法来实现这一目标。解决此问题的推荐方法是什么?我是否走在正确的道路上?

最佳答案

这是一个权衡。我个人不会将用户详细信息与用户标识符一起存储在依赖服务中。但我也不会查询用户服务来获取此信息。您可能需要的是整个系统的某种读取模型,它可以根据您的特定需求(报告、在网页上一起显示等)优化的方式存储这些数据。

读取模型是事件驱动架构领域中流行的一种模式。有一篇非常好的文章讨论了此类问题(分两部分):

https://www.infoq.com/articles/microservices-aggregates-events-cqrs-part-1-richardson https://www.infoq.com/articles/microservices-aggregates-events-cqrs-part-2-richardson

有关微服务的许多常见问题似乎主要围绕领域模型的分解,以及如何克服查询等需求阻碍分解的情况。这篇文章清楚地说明了这些选项。绝对值得花时间阅读。

在您的具体情况下,这意味着文件和 friend 服务只需要存储用户的主键。但是,所有服务都应该发布状态更改,然后将其聚合到读取模型中。

关于mean-stack - 微服务:有界上下文之间的模型共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44313956/

相关文章:

aws-lambda - 与多个无服务器功能共享数据库是一种好习惯吗?

java - 从 Java Batch 应用程序访问 OAuth2 protected api

spring-boot - Istio 服务发现

domain-driven-design - 各种领域驱动设计系统之间的集成

domain-driven-design - 我们应该由多个有界上下文使用多少个事件存储?

c# - MVC - WCF - RabbitMQ - 通过消息队列到消费者的域事件加速或替代方案?

javascript - 将主题颜色从灰色更改为蓝色

angularjs - 将 JSON.STRINGIFY 转换为 json 数组长度不计算

java - 找不到任何可执行的 java 二进制文件

jquery - "Typeahead is not a function"错误