微服务下跨服务的数据查询如何处理?

2021-06-23 17:55:26 +08:00
 Canon1014

公司最近在搞新项目( Java ),能力有限只能来请教 V 友了。

知道微服务下服务间的数据库是隔离的,所以不能使用 join 、in 等操作,那么遇到跨服务的联查时应该怎么办?

就例如我们的用户表只有用户服务可以查询,在一些排行榜或者记录表都会有 user_id ,前台显示需要用户的昵称,传统项目直接联查就可以了,但是微服务有点不知所措。

原本计划是:插入数据库的同时异步的将处理好的数据写入 ES 或者 MongoDB,查询时直接就可以得到想要的数据,但是考虑到工作量暴增还可能遇到数据不一致的问题,相关资料看得少生怕走错方向。

实在能力有限所以求各位分享一下可以落地的方案。

3122 次点击
所在节点    程序员
26 条回复
Canon1014
2021-06-24 12:01:40 +08:00
@Kyle18Tang #20 我这边想的是:假设按照用户名搜索,先带着用户名的条件去用户服务查找符合的数据(叫他 A 好了),然后再查询排行榜服务( B ),排行榜服务里有 `user_id` 然后在 B 数据中查找 `user_id` 在 A 中的数据。就是感觉性能很差,必须搭配缓存
stanjia
2021-06-24 13:18:25 +08:00
您好, Graphql
Canon1014
2021-06-24 13:34:48 +08:00
@stanjia #22 感谢回复,有看到类似的文章正在研究
xuanbg
2021-06-24 18:57:03 +08:00
跨服务不联查,只能正常批量查。需要联查不要拆数据库。
keppelfei
2021-06-25 09:57:35 +08:00
按用户名搜索一般会走两步,第一步放在客户端,比方说搜索张三。要支持模糊搜索,输入个三,此时调用用户模块服务,通过模糊查询返回给客户端用户信息,包括用户名字、id 。此时通过 id 精准查询排行榜服务。

当然如果能做用户信息缓存到 redis 那就没必要这么麻烦了。
mghio
2021-06-26 13:01:53 +08:00
上层应该有个聚合服务的包一下数据给到前端

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/785370

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX