【问题标题】:Express/NodeJS + Mongoose App server response slowExpress/NodeJS + Mongoose App 服务器响应慢
【发布时间】:2019-01-18 23:34:56
【问题描述】:

问题

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

据我了解,google pagespeed tools 的平均服务器响应时间低于 200 毫秒。

此应用程序从 mongoDB 异步获取数据,但到数据库的往返时间非常慢,每次调用平均约为 500 毫秒 - 1 秒。这些调用是简单的 findAll 调用,用于检索少于

上下文

  • 猫鼬版本:4.13.14
  • 数据库服务器的MongoDB版本是3.4.16
  • DB 服务器托管在 AWS / Oregon (us-west-1) 的 MongoDB Atlas M10 上
  • Web 服务器托管在 SFO1 (us-west-1) 中的 now.sh
  • 已按照 MongoDB Atlas 的性能顾问的建议执行推荐的索引
  • 在本地环境(本地服务器 + 本地 db)中数据获取非常好,因为在几毫秒内查询数据
  • 可以在gist 中找到受影响页面的 Mongoose 日志

Mongo 服务器配置

  • 蒙古阿特拉斯 M10
  • 2GB 内存
  • 10 GB 存储空间
  • 100 IOPS
  • 加密
  • 自动扩展存储

尝试的解决方案:

我检查了我的数据库指标,它们看起来不错。也没有慢查询。这些是简单的 findAll 查询。 mongo atlas 上的性能顾问报告没有任何异常。

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

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

问题:

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

【问题讨论】:

  • 您的数据库调用是否通过 ORM/驱动程序?例如猫鼬?这是我唯一能想到的
  • 听起来有一些值得关注的领域,数据库为
  • @James 谢谢!我已经更新了问题
  • 往返时间只有0.5 -> 1s?还有 2-3 秒等待数据库处理?
  • 您可以启用调试模式并在此处发布日志吗?您还尝试过 mongo shell 直接连接到远程数据库吗?尝试 Mongo shell 时的响应时间是多少?

标签: node.js mongodb express mongoose keystonejs


【解决方案1】:

您可以尝试在同一区域托管您的服务器和数据库。我认为在这种情况下网络会产生开销。如果服务器和数据库在同一个区域,它们在同一个网络上,这将大大减少延迟。有一个关于这个的aws图表

【讨论】:

  • 我已经将应用服务器和数据库服务器移动到同一个区域,但没有发现太大的区别,所以这可能不是答案。感谢您的意见!
【解决方案2】:

我在硕士学位期间开发的应用程序中添加了一些像您这样的问题。我添加了一个在线运行的 node.js api 以在课堂上展示它。我意识到每次我想在 api 中进行调用时,响应都需要花费大量时间。我意识到问题之一是由于防火墙的学校网络。此外,我放置服务器 heroku.com 的地方也有一些延迟。我所做的是使用 Redis (https://redis.io/) 来提高性能,由于请求是 http 而不是 https,heroku 也给了我一些问题。

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

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

【讨论】:

  • 感谢您的意见!我已经检查了支持 Mongo 的防火墙,但最终没有。从我的角度来看,这个问题在不同的连接中仍然存在。我这边的 ssl 协议没有问题。可能不得不探索redis作为最后的手段。但是还是想解决这个核心问题。将尝试您建议的准系统测试。感谢您的意见!
【解决方案3】:

我的 nodejs 代码使用相同的开发堆栈(mongodb,nodejs)曾经遇到过同样的问题,我遇到了来自 api 的延迟响应的麻烦,在花了很多时间之后,我发现我的服务器才是真正的罪魁祸首从 heroku 更改为 amazon aws EC2 实例,事情开始运行得很快,而且速度惊人,所以可能 您的网络服务器是罪魁祸首


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

【讨论】:

  • 设置没有进行数据库查询的 API 端点,TTFB 从 3.35 秒下降到 868 毫秒。应该是mongodb吧?
  • 好的,我现在的建议是 - 试试 mlab mongodb link ,检查它是否有影响,因为它效果很好,它从未让我失望过,创建新帐户并免费使用mongodb 实例。还有一个问题,你是在本地运行代码吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-16
  • 2018-02-19
  • 1970-01-01
  • 1970-01-01
  • 2011-09-14
  • 1970-01-01
  • 2012-09-12
相关资源
最近更新 更多