在Node.js中长时间运行的请求

时间:2020-03-17 09:24:54

标签: javascript node.js express

我想知道是否有任何好的做法,如何在nodejs中利用长时间运行的请求? 我正在使用Express.js,一直在想是否有任何方法可以将表达请求之一移动到节点的其他实例或其他东西上?

我想知道的原因是,如果强烈使用CPU,则会同时阻塞节点中的事件循环。主要问题是,首先,我要获取一些数据,然后计算丢失的数据并将其插入到DB中,然后根据结果获取其他数据,然后再次计算并更新DB中的其他内容。

我没有注意到这个问题,因为到目前为止,我是唯一使用此请求的人。但是现在我正在与其他用户一起测试它,如果其中很少有人使用此请求,则整个应用程序将冻结几秒钟。在我的监控工具上,我看到CPU使用率很高(100%-200%,哈哈)

因此,我尝试了群集,但似乎无法正常工作。我已经使用pm2并在CPU的所有内核上运行了应用程序。由于我的算法的复杂性,我试图将多个函数移至工作线程,但看起来这些线程会被非常非常频繁地使用,并且我担心会导致整个节点实例崩溃。

我不知道,哪种解决方案是最好的,并且不知道Express是否有任何好的工具,这些工具可以帮助我卸载/利用这些请求?我还没有深入研究分区,但是看起来这可能有效。是否有人将其用于较大的项目,并且知道这是否可能是将一个请求分配到多个刻度中的解决方案?

Bull或Kue等工作队列呢?将这些任务排入队列是否是个好主意?我从来没有使用过这样的工具,而是在问,因为我不知道这是否有意义。

欢呼

1 个答案:

答案 0 :(得分:1)

如果有数据存在-您可以使用传入的HTTP请求将数据发送给用户。 但是如果找不到任何数据,则可以在HTTP请求中发送空响应。

您需要使用队列服务来计算和插入丢失的数据。 bee-queue很不错。

将redis与bee-queue结合使用可加快后台作业的速度。

相关问题