【发布时间】:2017-11-29 10:51:20
【问题描述】:
我已经使用 NodeJS 和 express 构建了一个 API,一切运行良好,但最近我注意到由于调用的增加而开始出现一些性能/瓶颈,因此服务器有时会出现问题由于内存/cpu 使用而停止。
场景:
- 每小时我都会有一个 cronjob 触发到我的 api 端点。
- 数据库调用 (MongoDB) 以获取所有项目(大约 800-900)
- 我遍历所有项目并使用详细信息或我自己的数据库调用第 3 方 api 并返回结果。
- 然后我将结果与存储在我的数据库中的先前结果进行匹配
- 如果条件语句匹配,则会发送电子邮件并更新数据库
我尝试在循环中添加超时,因此每次调用之间都有几秒钟的时间,问题是站点可以扩展到数千个项目,到最后一个运行 cronjob 时再次开火。
我正在寻找有关如何优化上述方案并防止未来出现瓶颈以及最大化服务器上的内存/cpu 使用率的任何建议。
【问题讨论】:
-
您提到了您在应用程序中所做的 5 件事。我们无法判断这是否可以简化或优化,因为我们不知道它是否真的有必要,或者您是否可以找到一种不需要这些步骤的方法。此外,您还没有为上述步骤提供任何代码,因此我们不建议您进行代码优化,从而提高性能。我建议您为每个项目符号发布相关代码(甚至可以将其拆分为多个问题)。对于整个应用程序本身,您可能需要创建一个描述您的用例的问题。
-
您可以使用
process.nextTick或setImmediate在大量对象中循环而不阻塞事件循环。假设您只循环 50 个对象/(可能)滴答声,响应请求需要更长的时间,但不会阻塞事件循环。此外,您可以集群您的节点服务器以使用机器上所有可用的 cpu 内核。这有一个缺点,因为这些都是独立的进程,所以每个进程都有自己的内存。
标签: node.js mongodb performance express optimization