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

根据文档:


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


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

但是与分页不同吗?我们也可以使用分页查询后端记录。

这两个有何不同?

有人可以解释一下吗?

最佳答案

就像您所说的,分页是指客户请求许多记录并获得该数目的记录作为回报。

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

例如:


  假设您有一个应该用来拾取和处理文件的应用程序。用户将文件上载到目录,并且您的应用程序包含两个组件,一个组件从目录中拾取文件(组件A),另一个组件处理这些文件(组件B)。
  
  假设处理组件(B)一次只能处理100个文件,否则它将由于内存问题或可能发生的任何其他资源问题而崩溃。
  
  组件的一种反压形式是它从目录(A)中拾取文件,以监视组件B当前正在处理多少个文件。如果组件A看到组件B过载或接近过载,组件A可以停止将文件发送到组件B。这将防止组件B崩溃。
  
  组件B可用时,组件A将继续监视负载并发送文件。


这有什么好处?

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

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

09-13 05:11