@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()
});
  • Вопрос задан
  • 273 просмотра
Решения вопроса 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 запросов...
Или такой вариант вообще не рассматривается?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы