четверг, 16 февраля 2023 г.

Генератор данных для нагрузочного тестирования ETL

На текущем проекте для нагрузочного тестирования ETL нужен постоянный поток данных от телекоммуникационного оборудования. Размер сетей, тип и объём данных в метриках (сети 3g/4g/5g, оборудование разных вендоров) различается от клиента к клиенту и пока сетевики занимаются организацией доступа в сеть заказчика нужно определить системные требования и посчитать стоимость ресурсов чтобы заложить бюджет. Далее будет развёртывание окружения под клиента и оценка надёжности его работы сверх ожидаемой нагрузки (чтобы был запас по прочности на случай если у заказчика метрик станет заметно больше, чем планировалось).

Для функционального тестирования достаточно загрузить тестовый набор данных от клиента (чтобы убедиться что ETL корректно разбирает данные метрик), но это не подходит для нагрузочного тестирования, когда нужно проверить какую максимальную нагрузку выдержит система прежде чем мы перестанем соответствовать SLO (Service Level Objective).

Источник данных, с которым предстоит работать, генерирует новую порцию метрик в виде набора сжатых XML файликов каждые 15 минут. Плюс идет чередование записи метрик в разные директории (не помню для чего это делается, но скорее всего вид партиционирования чтобы распределить нагрузку на диски).

Просто копировать один файлик много раз не выйдет, т.к. для ETL важно чтобы внутри XML были уникальные ID для метрик и время начала и окончания интервала сбора данных (иначе ETL свалит все данные в одну кучу).

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

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

  • Возможность отключить партиционирование. Пригодится, если запускать несколько копий генератора параллельно чтобы генерировать больше данных.
  • Настраиваемая маска имени метрик для параллельного запуска нескольких генераторов (для ETL нужны уникальные ID метрик, но возиться с многопоточностью нет желания).
  • Автоматический расчет максимального количества метрик, которые успеют сгенерироваться за 15-минутный интервал.

В однопоточной реализации на Shell Script генератор успевает записать 20k метрик за 14 минут. Если этого будет недостаточно, то попробую переписать на python.


Комментариев нет:

Отправить комментарий