AWS的IISNode上托管的MongoDB应用的高TTFB

时间:2019-11-02 18:18:40

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

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

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进行测试,但不确定结果。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

我正在使用允许查询数据库的前端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毫秒。我还注意到,初始连接的时间减少到600ms至800ms。以前是1到2秒。因为我使用Lambda函数,所以在前端应用程序加载时,初始请求也将开始冷启动(如果尚未预热)。