反应式编程背压与传统分页有何不同?

Meh*_*lik 5 java pagination scala reactive-programming rx-java

我刚刚开始学习 反应式编程,我对Back-Pressure一词感到困惑。

根据文档:

这种背压是一种重要的反馈机制,它允许系统优雅地响应负载而不是在负载下崩溃。

我从中了解到的是:客户端将询问他在特定时间想要的记录数量,后端将仅响应所询问的记录。

但和分页不一样吗?我们还可以使用分页来查询后端我们感兴趣的记录。

这两者有何不同?

有人可以解释一下吗?

tim*_*ima 1

分页正如您所说,客户端请求许多记录并获取该数量的记录作为返回。

背压用于监控系统以确保系统的负载是可接受的。

例如:

假设您有一个应该拾取和处理文件的应用程序。用户将文件上传到目录,您的应用程序有两个组件,一个组件从目录中获取文件(组件 A),另一个组件处理这些文件(组件 B)。

假设处理组件 (B) 一次只能处理 100 个文件,否则它将因内存问题或任何其他可能发生的资源问题而崩溃。

背压的一种形式是让从目录 (A) 获取文件的组件也监视组件 B 当前正在处理多少文件。如果组件 A 发现组件 B 过载或接近过载,组件A可以停止向组件B发送文件。这将防止组件B崩溃。

当组件 B 可用时,组件 A 将继续监视加载并发送文件。

这样做有什么好处呢?

一天、一周、一个月或一年中的某个时间,您的系统可能会收到比平时更多的请求或数据。您不希望它当时崩溃,也不希望添加更多只是偶尔使用的资源。您可以使用反压来调整传入数据的速度。

背压还可以防止数据丢失。在上面的示例中,在用户上传文件并且文件被读取并发送到处理后,它们可能会被删除以释放空间。如果系统在处理过程中崩溃,您必须找出哪些文件已处理以及哪些文件正在处理但失败并恢复它们或从用户那里获取新副本。