Java 流批量组合调用

Java Streams batch combinatory call

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

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

正在阅读 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 调用 earch microservcies。每个微服务都可以一次加载所有数据(可能由 id 映射的评论列表),并且最初调用的将合并所有这些列表。 (一种压缩功能)

总结 : 我刚看完。我的问题是可以用 "Do you use the same strategy when you don't have a unique user at the start of the chain but hundreds of users ?" 来概括(性能可能是个问题不是吗?)

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