NodejsToGo Ответов: 0

Web crawler loop с лимитом 1000 параллельных https запросов обрабатывает только от 100 до 200 запросов в течение минуты


Я пишу веб-Искатель в узле js с модулем запроса и redis в качестве кэша url-адресов.
То, что я пытаюсь сделать, - это постоянно обходной цикл (бесконечно), который получает url-адрес от redis и делает запрос https.

Я попытался добавить ограничение запросов paralell. Например, 10 параллельных запросов.
Я не знаю почему, но независимо от того, выбираю ли я 10 или 1000, результат всегда один и тот же.
В течение одной минуты обрабатывается только от 100 до 200 запросов.

Пожалуйста, дайте мне подсказку, где я делаю что-то не так. Я хотел бы обрабатывать 60 000 запросов (URL) в минуту, но даже если я выберу 10k параллельных запросов в качестве ограничения, он будет обрабатывать только от 100 до 200 запросов в течение минуты.

Мой код, как показано ниже:

гусеничная петля:
var limit   = 1000;       // parallel requests limit
var running = 0;  

function loop() {
  while(running < limit) {
    req(function(){
      running--;
      loop();
    });  
    running++;
  }
}
loop();

// and the req function to make the https requests to the urls given by redis:

  function req (callback){ 
    client.select(2);
    client.RANDOMKEY([], function (err, result) {
    var url = result;
    client.del(url);

    if(err) { 
      return  callback();
    }
    else if (url == null || url == "" ) {
      return  callback();
    } 
    else {
      request(url,function(error, response, body){
        return callback();
      });
    } 
  });
}


Что я уже пробовал:

Я пытался играть с setTimeout и запускать больше параллельных запросов, но даже это не сработало, что бы я ни пробовал, я никогда не получал больше 200 запросов, обрабатываемых в минуту. Не могу поверить, что это предел, на который способен узел js.

Richard MacCutchan

- Капитан, я не могу изменить законы физики.

Gerry Schmitz

.. И все интернет - провайдеры одинаковы. И все веб-сайты. И все звенья. И все страницы.

ZurdoDev

Скорее всего, это предел того, что им управляет.

NodejsToGo

Я работаю на ubuntu с облачным сервером Ionos. Я действительно понятия не имею, что ограничивает мои запросы, не так ли ? Узел js может легко выполнять 1000k запросов в секунду в обычном режиме.

Dave Kreskowiak

Узел js может легко выполнять 1000k запросов в секунду в обычном режиме.
Да, если бы вы писали серверное приложение, которое принимает входящие запросы.

Исходящие запросы на такое количество серверов-не так уж и много.

0 Ответов