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

时间:2018-04-16 04:33:50

标签: java scala pagination rx-java reactive-programming

我刚刚开始学习reactive-programming,我对Back-Pressure一词感到困惑。

根据文件:

  

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

我从中理解的是:客户会在特定时间询问他想要的记录数量,而后端只会回复所询问的记录。

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

这两者有何不同?

有人可以解释一下吗?

1 个答案:

答案 0 :(得分:1)

分页正如您所说,客户要求提供大量记录并获得该记录的数量。

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

例如:

  

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

     

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

     

一种形式的反压是指从目录(A)中获取文件的组件,以监视组件B当前正在处理的文件数量。如果组件A看到组件B过载或接近在重载时,组件A可以停止向组件B发送文件。这将阻止组件B崩溃。

     

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

这有什么好处?

您的系统可能会收到一天,一周,一个月或一年的时间,而不是通常的请求或数据。那时你不希望它崩溃,你也不想添加更多只是时不时使用的资源。您可以使用背压来调整输入数据的速度。

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