Перейти к основному содержимому

Масштабирование краулеров

При разработке краулера часто возникает необходимость контролировать количество одновременных запросов к сайту. Crawlee предоставляет несколько опций для тонкой настройки параллельных запросов, ограничения запросов в минуту и масштабирования в зависимости от доступных системных ресурсов.

подсказка

Все эти настройки доступны для всех краулеров Crawlee, но в этом руководстве мы рассмотрим их на примере CheerioCrawler. Полный список доступных опций можно найти здесь.

maxRequestsPerMinute

Этот параметр определяет максимальное количество запросов в минуту. Система подсчитывает количество запросов каждую секунду, чтобы избежать резких всплесков активности на уровне maxConcurrency с последующими длительными паузами. По умолчанию установлено значение Infinity, что позволяет краулеру работать на максимуме maxConcurrency. Этот параметр полезен, когда нужно обеспечить полную производительность, но при этом не перегружать целевой сайт постоянными запросами.

import { CheerioCrawler } from 'crawlee';

const crawler = new CheerioCrawler({
// Давайте краулеру знать, что он может обрабатывать до 100 запросов одновременно в любой момент времени
maxConcurrency: 100,
// ...но также убедитесь, что краулер никогда не превысит 250 запросов в минуту
maxRequestsPerMinute: 250,
});

minConcurrency и maxConcurrency

Эти параметры контролируют количество параллельных запросов. По умолчанию краулеры начинают с одного параллельного запроса и постепенно масштабируются до максимума в 200 запросов.

Не устанавливайте слишком высокое значение minConcurrency!

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

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

import { CheerioCrawler } from 'crawlee';

const crawler = new CheerioCrawler({
// Запустите краулер сразу и убедитесь, что будет всегда 5 одновременных запросов
minConcurrency: 5,
// Убедитесь, что краулер не превысит 15 одновременных запросов
maxConcurrency: 15,
});

Расширенные настройки

Хотя для большинства пользователей достаточно базовых настроек, существует возможность глубокой настройки пула автомасштабирования через объект autoscaledPoolOptions.

Внимание: сложные настройки!

Этот раздел содержит продвинутые настройки. Если вы не уверены в своих действиях и не провели тщательное тестирование, лучше оставить значения по умолчанию - они обычно работают отлично без дополнительной настройки.

Если вы готовы к экспериментам, вот как можно применить эти настройки:

import { CheerioCrawler } from 'crawlee';

const crawler = new CheerioCrawler({
// Передайте расширенные опции, предоставив их в autoscaledPoolOptions
autoscaledPoolOptions: {
// ...
},
});

desiredConcurrency

Определяет начальное количество параллельных запросов при запуске краулера. По умолчанию равно значению minConcurrency.

desiredConcurrencyRatio

Минимальное соотношение параллельных запросов (от 0 до 1) для разрешения дальнейшего масштабирования. По умолчанию установлено значение 0.95.

scaleUpStepRatio и scaleDownStepRatio

Эти значения определяют долю желаемой параллельности, которая добавляется или вычитается при масштабировании вверх или вниз. Оба параметра по умолчанию установлены на 0.05.

При каждой попытке масштабирования это значение добавляется или вычитается из текущей параллельности, и на основе desiredConcurrencyRatio и maxConcurrency определяется количество возможных параллельных запросов.

maybeRunIntervalSecs

Определяет частоту проверки возможности запуска новых запросов (в секундах). По умолчанию установлено значение 0.5.

к сведению

Изменение этого параметра не влияет на запросы, которые запускаются сразу после завершения предыдущих. Однако это влияет на скорость запуска новых запросов после масштабирования пула.

loggingIntervalSecs

Позволяет контролировать частоту логирования состояния пула автомасштабирования (текущее соотношение параллельности, желаемые соотношения, информация о перегрузке системы и т.д.).

Логирование можно полностью отключить, установив значение null. По умолчанию установлено 60 секунд.

autoscaleIntervalSecs

Определяет частоту проверки возможности масштабирования (в секундах). По умолчанию установлено значение 10.

подсказка

Рекомендуется устанавливать значение в диапазоне от 5 до 20 секунд.

Будьте осторожны с экстремальными значениями

Слишком низкое значение может существенно снизить производительность краулера. С другой стороны, слишком высокое значение может привести к неэффективному использованию доступных ресурсов.

При настройке этого параметра рекомендуется учитывать его взаимодействие с scaleUpStepRatio и scaleDownStepRatio - это позволит настроить более медленное, но более масштабное увеличение параллельности.

maxTasksPerMinute

Контролирует общее количество запросов в минуту. Система подсчитывает количество запросов каждую секунду, чтобы избежать резких всплесков на уровне maxConcurrency с последующими длительными паузами. По умолчанию установлено значение Infinity, что позволяет краулеру работать на максимуме maxConcurrency. Этот параметр полезен, когда требуется обеспечить полную производительность, но при этом не перегружать целевой сайт постоянными запросами.

к сведению

Этот параметр можно установить через maxRequestsPerMinute в настройках краулера - это более удобный и наглядный способ.