0

我今天的问题是关于构建微服务时的组合操作。

让我们使用虚构的场景:我想构建一个仪表板。仪表板由一群人和他们的信息(历史、评论、购买、最后搜索的产品)组成。

阅读spring-cloud和spring-reactor,我想要一个调用多个微服务的非阻塞解决方案:用户服务,评论服务,搜索引擎服务,......

我的第一个猜测是做类似的事情

  • 加载用户,
  • 然后为每个人加载其评论
  • 然后加载它的历史
  • 合并所有数据

在伪代码中类似于loadUsers().flatmap(u -> loadReviews(u))....reduce(). 正如你所看到的,这里真的很近似。

当加载 1 个用户时,我们可以估计还需要 4 个 http 调用。对于 100 个用户,400 个额外的呼叫等。Big-O 似乎不是线性的。

在最坏的情况下,微服务还委托来自 XYZ 微服务的数据加载,那么我们得到:对于 1 个用户 -> N 个调用,包括 1 个审查调用 -> 1 个 XYZ 调用。抱歉,我没有计算 Big-O(二次?)。

为了避免这种情况,我们也许可以加载所有用户,提取他们的 id,用一批 id 调用每个微服务。每个微服务可以一次加载所有数据(可能是由 id 映射的评论列表),原始调用将合并所有这些列表。(一种zip功能)

摘要:我刚刚阅读了这个关于 Observables 组合的问题。我的问题可以概括为“当您在链的开始没有唯一用户但有数百名用户时,您是否使用相同的策略?” (性能可能不是问题吗?)

4

1 回答 1

0

您可能希望使用批处理来减少下游调用的数量。您不想通过 observable 发送单个用户,而是希望发送批处理。

于 2015-12-22T17:24:32.530 回答