首页 > 解决方案 > nodejs中长时间运行的请求

问题描述

我想知道是否有任何好的做法如何在 nodejs 中利用长时间运行的请求?我正在使用 Express.js 并且一直想知道是否有任何方法可以(我不知道)将快速请求之一移动到节点的不同实例或其他什么?

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

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

所以我尝试过集群,但它似乎不起作用。我已经使用了 pm2 并在我的 CPU 的所有内核上运行了应用程序。由于我的算法的复杂性,我试图将几个函数移动到工作线程,但看起来这些线程会非常非常频繁地使用,我担心整个节点实例崩溃。

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

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

干杯

标签: javascriptnode.jsexpress

解决方案


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

并且您需要使用队列服务来计算和插入丢失的数据。蜜蜂队列是一个不错的选择。

将 redis 与 bee-queue 结合使用可以使后台作业更快。


推荐阅读