我目前正在构建一个使用平均堆栈开发的基于微服务的应用程序,并且遇到了几种需要在有界上下文之间共享模型的情况。
作为示例,我有一个用户服务,用于处理注册过程以及登录(生成 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/