NodeJS应用程序制作速率限制并行异步API调用

时间:2018-02-19 16:23:56

标签: node.js rest asynchronous

我是NodeJS的新手,想了解用于实现以下目标的最佳模式。

传入的REST API调用请求执行批处理操作(比如100项)。

  1. 然后,Express处理程序必须进行100次外部异步API调用,这可能需要120秒才能返回,但需要很长时间才能完成。

  2. 处理程序只返回ACK,然后将处理请求排队。 (在数据库或内存中说)

  3. 然后,我需要通过在parallell中进行外部API调用来处理每个请求: -

    (A)每个API调用将返回可用的“空闲资源”数(在当前API调用服务之后)以进行其他并行调用。

    (B)但是,这些API调用需要并行进行,如果后端的“空闲资源”数量少于定义的阈值,则不应尝试。

    这个想法很简单: - 应用程序不应该进行太多的并行API调用。它应该尝试至少留出五个后端资源。

    但是,由于可用资源的数量仅在第一次API调用之后可用,因此可以最初超过限制,然后稍后缩小。

    在Java中我会这样做:

    1. 对于包含100个请求对象的传入批处理填充队列。 (在DB中存储状态后)

    2. 为队列提供固定数量的工作线程。

    3. 每个工作线程都会检查一个全局对象,该对象将维护可用资源的数量。

    4. 如果可用资源大于阈值,则进行API调用,并更新全局计数器。 (还更新DB以指示对请求批处理项进行的API调用。如果API调用因任何原因失败,则该项将重新提交到队列中)

    5. 我并不太关心优化运行的线程数或初始峰值等,只要有一个不错的尝试就是不要向后端发出太多请求。

      我可以使用任何异步/线程池框架的建议吗?

0 个答案:

没有答案