繁体   English   中英

Express / NodeJS + Mongoose App服务器响应缓慢

[英]Express/NodeJS + Mongoose App server response slow

问题

我有一个Express(Node.JS)+ MongoDB应用,服务器响应加载时间平均为4-7秒(缓慢)。

据我了解,根据Google Pagespeed工具 ,平均服务器响应时间在200毫秒以下

这个应用程序是从mongoDB异步获取数据,但是到数据库的往返时间非常慢,每次调用平均大约500ms-1s。 这些调用是简单的findAll调用,用于检索少于100条记录的数据。

语境

  • 猫鼬版本:4.13.14
  • 数据库服务器的MongoDB版本为3.4.16
  • 数据库服务器托管在AWS /俄勒冈州(us-west-1)的MongoDB Atlas M10上
  • Web服务器由SFO1(us-west-1)中的now.sh托管。
  • 根据MongoDB Atlas的性能顾问的建议执行了推荐的索引
  • 在几毫秒内查询数据时,在本地环境(本地服务器+本地db)中提取数据非常好
  • 可以在此要点中找到受影响页面的猫鼬日志

Mongo Server配置

  • 蒙哥地图集M10
  • 2GB内存
  • 10 GB储存空间
  • 100 IOPS
  • 加密的
  • 自动扩展存储

尝试的解决方案:

我检查了数据库指标,它们看起来不错。 也没有慢查询。 这些是简单的findAll查询。 蒙哥地图集的性能顾问认为没有异常。

生产应用程序和数据库都托管在同一区域中。

我已经尝试通过运行.lean()优化查询(猫鼬)的应用程序层

题:

我还应该在哪里改善数据库延迟? 一个简单的查询如何花这么长时间? 否则,为什么预期的时间约为200毫秒,我的服务器响应时间最多需要4s?

嘿,您可以尝试在同一区域中托管服务器和数据库。 我认为网络在这种情况下造成了开销。 如果服务器和数据库位于同一区域,则它们位于同一网络上,这将大大减少延迟。 在aws上有一个图表 在此处输入图片说明

我曾经使用相同的开发堆栈(mongodb,nodejs)在我的nodejs代码中遇到过同样的问题,我陷入了api迟来响应的麻烦,并且花了很多时间后才发现我的服务器是真正的罪魁祸首,然后我从heroku更改了到Amazon aws EC2实例,事情开始快速而且出奇地快,所以您的Web服务器可能是罪魁祸首


为了确保mongodb不是罪魁祸首,请编写一个api端点,您可以在其中返回一些json响应而无需对数据库进行任何查询。

我用我的硕士学位开发的应用程序给您增加了一些像您一样的问题。 我添加了一个在线运行的node.js api并将其呈现在教室中。我意识到每次我想在api中进行调用时,响应都会占用时间。 我意识到问题之一是防火墙造成的学校网络。 我放置服务器heroku.com的地方也给了一些延迟。 我所做的是使用Redis( https://redis.io/ )来提高性能,而且heroku也因为请求是http而不是https而给我带来了一些问题。

进行测试,在本地主机上运行应用程序和数据,然后查看性能。 如果您没有任何问题,请尝试检查是否没有使您的请求混乱,例如托管节点服务器的位置。

让我知道这是否有帮助,或者您仍然遇到问题,以便我可以更好地帮助您。

您也可以尝试使用Azure服务。 注册时,只需少量服务即可免费获得1年。 Azure使您可以在各个区域中部署多个实例,从而可以最大程度地减少延迟。 如果预算合适,则可以使用针对node.js + mongoDB应用程序进行了高度优化和自动管理的Web应用程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM