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 ?" 来概括(性能可能是个问题不是吗?)
您可能希望使用批处理来减少下游调用的数量。不是通过可观察对象发送单个用户,而是发送批处理。
我今天的问题是关于构建微服务时的组合操作。
让我们使用虚构的场景:我想构建一个仪表板。仪表板由一群人和他们的信息(历史、评论、购买、上次搜索的产品)组成。
正在阅读 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 映射的评论列表),并且最初调用的将合并所有这些列表。 (一种压缩功能)
总结 : 我刚看完
您可能希望使用批处理来减少下游调用的数量。不是通过可观察对象发送单个用户,而是发送批处理。