管理微服务中的跨数据库查询

问题描述 投票:0回答:2

我有

users
chats
微服务,它们具有独立的数据库,目前我决定不使用数据重复,因为其维护需求很高,并尝试为
chats
数据库提供对
users
微服务的读取访问权限,但是现在我有一个问题,我需要获取最近的聊天列表,其中包括用户的个人资料图片、姓名和最后一条消息的文本预览。问题是我只在消息模式(mongodb)中保存发送者和接收者ID,并且无法在用户数据库中查找它,因为单独查找每个用户会非常昂贵,我知道没有正确的方法,但是我认为这种情况很常见,那么您将如何寻求解决方案?

mongodb mongoose microservices
2个回答
3
投票

我建议查看这里并阅读“每个服务数据库”方法。一般来说,让微服务

x
直接访问微服务
y
的数据库并不是一个好的做法。每个微服务应该只知道自己的数据库。 您可以在
ChatService
中公开类似
getUserById
的 API,而不是授予
UserService
对用户数据库的访问权限,这样
ChatService
(保存用户的 ID)将请求用户的详细信息(名称、图片等)来自
UserService
。如果您想将调用从
ChatService
减少到
UserService
,您可以考虑将用户的数据缓存在
ChatService
中,这样您就不必为每个用户进行调用。

这样,您可以保留“每个服务数据库”模式,避免使用户数据库成为瓶颈,甚至可能获得更好的性能,因为使用正确的架构 API 调用应该比数据库调用更快。


0
投票

一个老话题 - 但也许对某人有用。试着问问自己 - 你真的需要获取所有用户和头像吗?您可以匿名化名称并使用后者的头像。然后,如果您确实需要知道这个用户到底是谁 - 您可以在点击用户头像时进行去匿名化。你也可以缓存用户:)

© www.soinside.com 2019 - 2024. All rights reserved.