Сканирование в ширину¶
Целью данного режима сканирования является распределения нагрузки на инфраструктуру при единовременном сканировании большого количества целей. При данном подходе все активные сканирования продвигаются стабильно, а сроки получения результатов становятся более предсказуемыми для пользователя.
Режимы сканирования¶
- Стандартный режим — режим, при котором для параллельно запущенных сканирований приоритет выделения ресурсов отдаётся тому сканированию, чей идентификатор имеет наименьшее значение.
- Режим сканирования в ширину — режим, при котором ресурсы для параллельно запущенных сканирований и задач данных сканирований распределяются для скорейшего получения первичных результатов.
Механизм работы¶
- Для группы задаётся ресурсный бюджет. Токен — единица ресурсного бюджета.
- Для каждой задачи сканирования есть возможность задавать стоимость обработки одного элемента (ресурса, конечной точки или тега) в токенах.
- Перед обработкой задача запрашивает из ресурсного бюджета необходимую стоимость.
- Если в бюджете достаточное количество токенов, задача их получает, а бюджет уменьшается на указанное количество.
- Если в бюджете недостаточно токенов, задача остаётся в режиме ожидания, пока другие активные задачи не вернут токены в бюджет.
- После окончания обработки элемента, задача возвращает используемые токены в бюджет.
- Для задач можно задать максимальное занимаемое число токенов (
max_token_concurrency). При достижении указанного значения, токены не будут выделяться сверх меры даже при их наличии в бюджете, а обработка последующих элементов в рамках задачи не начнётся до освобождения токенов данной задачей.
Настройка¶
Необходимо примерно оценить сканируемый объём и в зависимости от этого задать параметры. В следующей инструкции значения параметров указаны в качестве примера и могут отличаться от пользовательских.
- В файле конфигурации
fuchsiadвыставьте значение для поляconcurrency(например,concurrency: 100). Это позволит запустить сервисуfuchsiadдо 100 задач сканирования одновременно. -
Создайте бюджет токенов с размером 100.
-
Для модулей, запускаемых при помощи
fuchsia-franzisrunner, и модуля статического веб-краулинга в YAML-файлах конфигурации укажите параметрыtoken_cost(стоимость обработки ресурса или конечной точки в токенах) иmax_token_concurrency(максимальное занимаемое модулем число токенов).- Для модулей, использующих браузер, укажите
token_cost: 10, для остальныхtoken_cost: 1. - Для модуля статического веб-краулинга, укажите
max_token_concurrency: 1, для остальных модулей задайте число, указанное во флагах-concurrencyдля соответствующих модулей.
- Для модулей, использующих браузер, укажите
На данном этапе настройка завершена и можно переходить к сканированию желаемой группы.
Использование¶
Режим сканирования в ширину доступен через консольный клиент fuchsiactl.
-
Cоздание группы сканирований с указанным числом сканирований.
-
Запуск сканирования указанной группы.
-
Получение списка сканирований указанной группы.
-
Получение списка групп сканирований.
-
Получение метрик распределения бюджета токенов по группе.