我有
users
和 chats
微服务,它们具有独立的数据库,目前我决定不使用数据重复,因为其维护需求很高,并尝试为 chats
数据库提供对 users
微服务的读取访问权限,但是现在我有一个问题,我需要获取最近的聊天列表,其中包括用户的个人资料图片、姓名和最后一条消息的文本预览。问题是我只在消息模式(mongodb)中保存发送者和接收者ID,并且无法在用户数据库中查找它,因为单独查找每个用户会非常昂贵,我知道没有正确的方法,但是我认为这种情况很常见,那么您将如何寻求解决方案?
我建议查看这里并阅读“每个服务数据库”方法。一般来说,让微服务
x
直接访问微服务y
的数据库并不是一个好的做法。每个微服务应该只知道自己的数据库。
您可以在 ChatService
中公开类似 getUserById
的 API,而不是授予 UserService
对用户数据库的访问权限,这样 ChatService
(保存用户的 ID)将请求用户的详细信息(名称、图片等)来自UserService
。如果您想将调用从ChatService
减少到UserService
,您可以考虑将用户的数据缓存在ChatService
中,这样您就不必为每个用户进行调用。
这样,您可以保留“每个服务数据库”模式,避免使用户数据库成为瓶颈,甚至可能获得更好的性能,因为使用正确的架构 API 调用应该比数据库调用更快。
一个老话题 - 但也许对某人有用。试着问问自己 - 你真的需要获取所有用户和头像吗?您可以匿名化名称并使用后者的头像。然后,如果您确实需要知道这个用户到底是谁 - 您可以在点击用户头像时进行去匿名化。你也可以缓存用户:)