Перейти к содержанию

Сканирование в ширину

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

Режимы сканирования

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

Механизм работы

  • Для группы задаётся ресурсный бюджет. Токен — единица ресурсного бюджета.
  • Для каждой задачи сканирования есть возможность задавать стоимость обработки одного элемента (ресурса, конечной точки или тега) в токенах.
  • Перед обработкой задача запрашивает из ресурсного бюджета необходимую стоимость.
    • Если в бюджете достаточное количество токенов, задача их получает, а бюджет уменьшается на указанное количество.
    • Если в бюджете недостаточно токенов, задача остаётся в режиме ожидания, пока другие активные задачи не вернут токены в бюджет.
  • После окончания обработки элемента, задача возвращает используемые токены в бюджет.
  • Для задач можно задать максимальное занимаемое число токенов (max_token_concurrency). При достижении указанного значения, токены не будут выделяться сверх меры даже при их наличии в бюджете, а обработка последующих элементов в рамках задачи не начнётся до освобождения токенов данной задачей.

Настройка

Необходимо примерно оценить сканируемый объём и в зависимости от этого задать параметры. В следующей инструкции значения параметров указаны в качестве примера и могут отличаться от пользовательских.

  1. В файле конфигурации fuchsiad выставьте значение для поля concurrency (например, concurrency: 100). Это позволит запустить сервису fuchsiad до 100 задач сканирования одновременно.
  2. Создайте бюджет токенов с размером 100.

    fuchsiactl create_scangroup 100
    
  3. Для модулей, запускаемых при помощи fuchsia-franzisrunner, и модуля статического веб-краулинга в YAML-файлах конфигурации укажите параметры token_cost (стоимость обработки ресурса или конечной точки в токенах) и max_token_concurrency (максимальное занимаемое модулем число токенов).

    • Для модулей, использующих браузер, укажите token_cost: 10, для остальных token_cost: 1.
    • Для модуля статического веб-краулинга, укажите max_token_concurrency: 1, для остальных модулей задайте число, указанное во флагах -concurrency для соответствующих модулей.

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

Использование

Режим сканирования в ширину доступен через консольный клиент fuchsiactl.

  • Cоздание группы сканирований с указанным числом сканирований.

    fuchsiactl create_scangroup <capacity>
    
  • Запуск сканирования указанной группы.

    fuchsiactl scan --scangroup <scangroup_id>
    
  • Получение списка сканирований указанной группы.

    fuchsiactl get_scangroup <scangroup_id>
    
  • Получение списка групп сканирований.

    fuchsiactl list_scangroups
    
  • Получение метрик распределения бюджета токенов по группе.

    fuchsiactl get_tokenbudget_metrics <id>