簡體   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