Задать вопрос
@mafaka111

Что улушчить, чтобы отправлять 40000 запросов в секунду?

Добрый день.
Стоит задача спарсить большое количество данных. Парсинг происходит путем обращения к апи сайта.
Необходимо сделать в среднем 5-10 запросов одновременно для каждой из 4000 сущностей.

Сейчас написан скрипт на node.js, в котором создается 100 дочерних процессов, каждый выполняет соответстенно около 4000 асинхронных запросов и дожидается их выполнения с помощью Promise.all

Время выполнения всего скрипта - около 15 секунд на 6-ядерном CPU. Время ответа от сервера ~1с.
Можно ли повысить скорость выполнения на текущем оборудовании или сможет помочь только горизонтальное масштабирование? Какое железо требуется чтобы выполнять такое количество запросов каждые 2 или 5 секунд?

Упрощенный код:
// main.js
const childProcess = require('child_process');
const entitiesChunks = splitToChunks(entities, 100); // Разделяет массив сущностей на 100 частей
for (let i = 0; i < 100; i++) {
    let workerProcess = childProcess.fork('entityWorker.js');
    workerProcess.send(entitiesChunks[i]);
}

// entityWorker.js
process.on('message', async (entities) => {
    // Проходит по всем эелементам и выполняет 5-10 асинхронных запросов внутри parseEntity()
    process.send(await Promise.all(entities.map((el) => parseEntity(el)))); 
    process.exit()
});
  • Вопрос задан
  • 338 просмотров
Подписаться 1 Средний 2 комментария
Решения вопроса 1
Sanasol
@Sanasol
нельзя просто так взять и загуглить ошибку
Сейчас написан скрипт на node.js, в котором создается 100 дочерних процессов, каждый выполняет соответстенно около 4000 асинхронных запросов и дожидается их выполнения с помощью Promise.all

таки в чём вопрос если всё написано и работает?

Что требуется, чтобы отправить 40000 запросов в секунду?

надо чтобы хватило потоков-ядер, интернет канала и не забанило.

Сколько надо зависит от того какую нагрузку создают запросы и сколько времени каждый запрос выполняется и обрабатывает ответ.

От создания 100 дочерних процессов скорость не прибавляется, всё равно одновременно выполнится столько сколько тянет процессор т.е как правило 1 процесс = 1 ядро/поток процессора.
Даже если 1 ядро вытягивает несколько процессов одновременно, встанет вопрос интернет канала, а потом и обработки получаемых данных(запись в базу/на hdd/оперативку), это всё жрёт время и вряд ли сервер сможет за секунду сделать 40к действий.
Где-то тут появляется понимание что нужен уже не один сервер, а целый кластер.

В общем надо измерять и проверять сколько запросов на скольких ресурсах выполняется чтобы понимать насколько надо масштабировать эти ресурсы.

Нет никакой формулы чтобы отвечать на такие вопросы "какой хостинг тариф выбрать если у меня 10/100/1000 посетителей на сайте".
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
saboteur_kiev
@saboteur_kiev
software engineer
Вообще-то, по грамотному надо расширять API для выполнения bulk запросов...
Или такой вариант вообще не рассматривается?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы