【问题标题】:High TTFB for MongoDB app hosted on IISNode on AWS托管在 AWS 上的 IISNode 上的 MongoDB 应用程序的高 TTFB
【发布时间】:2020-02-28 14:54:40
【问题描述】:

在开始之前,请注意我已经阅读了这些资源:

MongoDB Cloud Deployment - High TTFB

https://mongoosejs.com/docs/connections

我正在运行一个 Node.js 应用程序,该应用程序连接到 AWS EC2 实例上的 Mongo 数据库。 Node.js 应用程序和数据库位于同一台服务器上。该实例是运行 IIS 的 Windows 服务器,我使用 IISNode 连接到应用程序。我住在托管我的 EC2 实例的区域附近。

我使用 Mongoose 连接到我的数据库。我没有在我的连接字符串中使用 localhost;我使用 mongodb://127.0.0.1:27017 格式。

我的 TTFB 出现 1 到 2 秒的延迟。

有没有办法解决这个问题?这只是初始连接的正常延迟吗?

当我在这里时,我还可以澄清一下连接和套接字在 MongoDB 中的工作方式。如果用户连接到数据库并且连接上打开了套接字,并且来自不同 IP 地址的用户尝试连接到数据库,他们是否使用打开的套接字?我尝试使用 VPN 对此进行测试,但我不确定结果。

提前感谢您的帮助。

【问题讨论】:

    标签: node.js mongodb amazon-web-services iisnode


    【解决方案1】:

    我想出了一个解决方案,可能有点破解,但它有效。如果有人有更好的解决方案,请随时发布。

    我正在使用允许查询数据库的前端 Web 应用程序。我在前端应用程序中添加了一些代码,以便在页面加载时将查询发送到数据库:

    $(document).ready(function() {
        var xhttp = new XMLHttpRequest();
        xhttp.open("GET", "URL-for-an-empty-record-in-your-database", true);
        xhttp.send()
    })
    

    然后,我通过添加以下代码行来确保将正确的 CORS 标头添加到我的 Node.js Express 应用程序中:

    app.use(function (req, res, next) {
      res.setHeader('Access-Control-Allow-Origin', 'my-frontend-application-url');
      res.setHeader('Access-Control-Allow-Methods', 'GET');
      next();
    });
    

    我包含上述代码是因为我之前一直使用 JSONP 向我的 Node.js 应用程序发出请求,当我切换到 XHR 请求时,需要包含标头。我注意到在进行此更改后,我的请求被返回的速度有所提高。以前,一个请求平均需要 300 毫秒到 400 毫秒才能返回,而现在它们大约需要 130 毫秒到 200 毫秒才能返回。我还注意到初始连接的时间下降到 600 毫秒到 800 毫秒;以前是 1 到 2 秒。因为我使用 Lambda 函数,所以当前端应用程序加载时,初始请求也将开始冷启动(如果尚未暖启动)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-22
      • 2017-03-22
      • 2014-01-30
      • 2020-08-22
      • 1970-01-01
      • 2016-11-20
      • 2016-04-14
      • 2018-11-16
      相关资源
      最近更新 更多