优化微服务,以便与其他域数据一起查询



考虑我有这些比较简单的服务

  1. 用户服务
  2. DiscussionGroup-Service

讨论组有用户作为成员。

所有这些服务都有自己的db。

UI现在想要列出特定DiscussionGroup的所有用户(姓名、个人资料图片等)。每个组可能有1000个用户,所以结果应该是可分页的。

在单块方法中,我将在UserDAO中使用discussiongroupmember表执行DB-join。但这不能再做了,因为DB是分开的。

以执行的方式解决这个问题的最佳策略是什么?我是否应该考虑为这个查询添加第三个服务?

阅读http://microservices.io/patterns/data/database-per-service.html后声明:

实现连接多个数据库中的数据的查询是具有挑战性的。有多种解决方案:

应用程序端连接-应用程序执行连接而不是数据库。例如,服务(或API网关)可以通过首先从客户服务中检索客户,然后查询订单服务以返回客户最近的订单来检索客户及其订单。

命令查询责任隔离(CQRS)—维护一个或多个包含来自多个服务的数据的物化视图。视图由服务保存,这些服务订阅每个服务在更新其数据时发布的事件。例如,在线商店可以通过维护连接客户和订单的视图来实现查找特定地区客户及其最近订单的查询。视图由订阅客户和订单事件的服务更新。

我认为CQRS方法在服务请求/秒方面是最有效的解决方案。这是因为User-Service可以包含需要在List查询中返回的数据的物化视图。物化视图使用来自DiscussionGroup-Service的Events的内容进行更新。

最新更新