【发布时间】:2022-01-10 21:50:42
【问题描述】:
我目前正在开展一个使用微服务架构的项目。我对这种架构也有些陌生,并且有一些顾虑。我大致了解微服务的概念,以及我们如何为每个服务拥有一个数据库。这使我对如何从不同数据库中为特定用户提取数据感到困惑。
场景
假设我有一个 Users 和一个 Posts 服务,它们的架构是这样的
用户
const schema = {
name: String
id: String
...
}
发帖
const schema = {
text: String
user: Id // reference of the user who made this post.
}
现在在 UI 上,我想加载一组帖子和发布帖子的相关用户,我如何在发布相应帖子的 User 旁边获得 Post。我正在使用 MongoDB,如何填充存储在其他数据库中的数据?我也在使用 Kafka 处理异步操作,如何将 Kafka 用于此用例?还是有更好的方法来做到这一点? Post 的最终响应可能是这样的。
{
text: 'Some random message',
user: {
name: 'John Doe',
id: 1234
}
}
另外,我知道我可以调用 User 服务来获取用户,然后调用 Post 服务来获取 Post 并将两个对象合并在一起,但是还有比这更好的选择吗基本上?我正在考虑在我想为用户进行多次查找的情况下,例如获取用户及其相关的帖子、消息等,我该如何处理这样的场景,我可以利用它们的任何技术来处理这样的情况吗?
提前谢谢你!
【问题讨论】:
-
根据我的经验,对于不同的服务每次都使用两个不同的数据库并不是强制性的。您可以拥有使用相同数据库的服务,但可以使用不同的集合。您应该以两种服务可以独立工作或具有最少依赖性的方式拆分您的服务。在您的两个服务中,彼此高度依赖
-
@HandsomeCoder 我很清楚这一点,但我只是好奇这基本上是如何工作的。从昨天开始,我一直在做一些研究,并将 API 组合和 CQRS 作为查询数据库的模式,但是如果您对此有更多的线索,我会很高兴听到您的意见。谢谢
标签: javascript node.js mongodb microservices