我正在使用Node.js和Express开发实时通知服务,MongoDB用于数据存储,Socket.IO用于实时通信.这项服务旨在整合到各种网站中.然而,当我将这项服务集成到一个拥有超过10万用户的网站中时,后端遇到了性能问题,并难以处理大量连接.

以下是我的设置概述:

  • Backend:Node.js与Express用于API端点,MongoDB用于数据存储.
  • 实时通信:套接字. IO用于实时通知.
  • 前端:客户端界面的React.js.
  • 托管:API和Socket. IO服务器都托管在同一台服务器上,具有4个核心和8 GB RAM.

尽管有这种配置,后端在重负载下会经历性能下降.我可以实施哪些优化来提高后端有效处理大量连接的能力?

我已经考虑过一些潜在的解决方案,比如负载平衡、优化数据库查询和水平扩展.然而,我不确定最好的方法,并将感谢社区的任何见解或建议.

提前感谢您的帮助!

推荐答案

你的第一步应该是找出具体的性能下降发生的地方,try 设置监控和定时来找出瓶颈发生的地方,否则任何人都很难给你有意义的建议.

一般来说,水平扩展和负载平衡从来都不是坏主意,但您会产生额外的服务器成本.如果您的问题是mongoDB吞吐量瓶颈,则优化查询只能提高性能.Node.js也是单线程的,为了充分利用所有的核心和线程,你要么需要工作线程,子进程,要么需要多个node.js服务器.

但是,我不建议你做任何事情,直到你能准确地找出你的问题在哪里,

Node.js相关问答推荐

Express 4.18正文解析

我的Node.js应用程序没有将Mongoose方法findByIdAndDelete作为函数进行检测

无法将示例 Node.js 应用程序部署到 AWS Elastic Beanstalk

SvelteKit应用程序立即退出,没有错误

Amplify 部署的应用程序出现TypeError: handler is not a function错误,但它在本地运行

mongoose findOneAndUpdate 不更新数据库

Jest - SyntaxError: 不能在@nestjs/axios 的模块外使用 import 语句

如何在 NestJS 中使用外部生成的 swagger.json?

如何调用同名的两个函数?

JavaScript & Node - 将图像文件保存到服务器但无法查看

使用加密模块的流功能获取文件的哈希(即:没有 hash.update 和 hash.digest)

bash:npm:找不到命令?

如何将子集合添加到 Firestore 中的文档?

如何在 MongoDB 上只收听 localhost

Puppeteer:如何提交表单?

遍历 NodeJS 中的一系列日期

Passport 的 req.isAuthenticated 总是返回 false,即使我硬编码 done(null, true)

续集findbyid不是一个函数,但显然findAll是

Node.js - 判断是否安装了模块而不实际需要它

如何调试 Gulp 任务?