【问题标题】:Managing cross DB queries in microservices管理微服务中的跨数据库查询
【发布时间】:2022-06-10 18:15:50
【问题描述】:
我有users 和chats 微服务,它们有各自独立的数据库,由于维护需求高,目前我决定不使用数据复制,并为users 数据库授予chats 微服务的读取权限,但现在我有一个问题,我需要获取最近的聊天列表,其中包括用户的个人资料图片、姓名和最后一条消息的文本预览。问题是我在消息模式(mongodb)中只保存发送者和接收者 ID,我无法在用户数据库中查找它,因为单独查找每个用户会非常昂贵,我知道没有正确的方法但是我认为这种情况可能很常见,那么您将如何寻求解决方案?
【问题讨论】:
标签:
node.js
mongodb
mongoose
microservices
【解决方案1】:
我建议您查看here 并阅读有关“每个服务的数据库”方法的信息。一般来说,让微服务x直接访问微服务y的DB并不是一个好的做法。每个微服务应该只知道自己的数据库。
您可以在UserService 中公开像getUserById 这样的API,而不是让ChatService 访问用户数据库,这样ChatService(保存用户的ID)将请求用户的详细信息(名称、图片等)来自UserService。如果您想减少从ChatService 到UserService 的调用,可以考虑在ChatService 中缓存用户数据,这样就不必为每个用户进行调用。
这样,您可以保留“每个服务的数据库”模式,避免使用户数据库成为瓶颈,甚至可以获得更好的性能,因为使用正确的架构 API 调用应该比数据库调用便宜。