Масштабирование краулеров
При разработке краулера часто возникает необходимость контролировать количество одновременных запросов к сайту. 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
в настройках краулера - это более удобный и наглядный способ.