nodejs - 每分钟增加的正常运行时间检查次数

时间:2014-03-15 20:07:27

标签: node.js amazon-ec2 uptime

我正在建立一个类似于pingdom.com的系统,我有大约10k个域,每5分钟检查一次正常运行时间。我正在使用ec2微实例来执行检查。我的支票网址和他们的最后检查时间都存储在mongodb中。节点进程采用前n个检查进行处理,这些检查在最后5分钟内未处理,然后url请求以异步方式完成。我使用节点请求库,我的网址检查代码如下所示:

var request = require("request");

var options = {
    url: url,
    headers: {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Accept-Encoding': 'gzip,deflate,sdch',
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36'
    },
    timeout: 10000,
    maxRedirects: 10,
    pool: false,
    strictSSL: false
};

request(options, function (error, response, body) {
    ...
});

现在我注意到当我同时向不同的域发出超过10个请求以进行正常运行时间检查时,这些域的响应时间随着同时请求数量的增加而减慢。我认为响应时间不应该随着节点异步而增加。我也考虑尝试使用node-curl库,但在此之前我想确认我是否在这里做错了什么。

我试过调整ulimit& pool.maxConnection限制,没有任何运气。我知道如果我增加ec2实例的数量,我可以在5分钟内完成10k的检查,并且响应时间可以接受,但我想像pingdom这样的服务有更多的检查要处理,我很好奇他们做了什么除了增加正常运行时检查实例外,还要扩展其系统。

1 个答案:

答案 0 :(得分:0)

您可能希望在一个实例上尝试一小组Node服务器。他们每个人都可以使用不同的进程/线程。一个实例可以充当控制器并通过redis pub / sub或其他方式发送命令。不过,我不确定你的瓶颈是什么;可能是微实例的带宽问题。您应该运行一些测试,以确定最慢的代码位。