考虑一下我有这些有点过分简化的服务
DiscussionGroup将用户作为成员。
所有这些服务都有自己的数据库。
UI现在想要列出特定DiscussionGroup的所有用户(名称,个人资料图片等)。 每组可能有1000个用户,因此结果应该是可分页的。
在单片方法中,我会在UserDAO中使用DiscussionGroupMember表进行数据库连接。但由于数据库是分开的,所以不能再这样做了。
以表演的方式解决这个问题的最佳策略是什么?我应该考虑为此查询添加第三项服务吗?
答案 0 :(得分:0)
阅读http://microservices.io/patterns/data/database-per-service.html后说明:
实现连接现在位于多个数据库中的数据的查询具有挑战性。有各种解决方案:
应用程序端连接 - 应用程序执行连接而不是数据库。例如,服务(或API网关)可以通过首先从客户服务检索客户,然后查询订单服务以返回客户的最新订单来检索客户及其订单。
命令查询责任隔离(CQRS) - 维护一个或多个包含来自多个服务的数据的物化视图。这些视图由订阅每个服务在更新其数据时发布的事件的服务保留。例如,在线商店可以通过维护加入客户和订单的视图来实现查询特定区域中的客户及其最近订单的查询。该视图由订阅客户和订单事件的服务更新。
我认为CQRS方法在服务请求/秒方面是性能最佳的解决方案。这是因为User-Service可以包含需要在List查询中返回的确切数据的物化视图。物化视图使用来自DiscussionGroup-Service的事件内容进行更新。