⚠️ Важно
Перед тем как оптимизировать работу, изменяя описанные ниже параметры, необходимо удостовериться, что:
- RabbitMQ, PostgreSQL и ТестОпс не делят между собой ресурсы — либо на отдельных серверах, либо (в случае k8s) на отдельных подах с явно заданными requests/limits для каждого сервиса. В противном случае под нагрузкой ТестОпс не сможет обрабатывать результаты из-за конкуренции за ресурсы со стороны его зависимостей.
- Пулы соединений ТестОпс <-> БД настроены и включены:
- upload pool — всё, что касается операций загрузки результатов;
- analytics pool — всё, что касается аналитики (виджеты, дашборды). В идеале этот пул должен работать с RO-репликой БД, но даже без неё включение пула в любом случае разгрузит основной пул.
По умолчанию в конфигурационных файлах для каждого типа деплоймента они присутствуют и описаны. Если их у вас нет — вы используете либо старый чарт/compose/.conf, либо кастомный. Кастомные конфигурации команда ТестОпс поддерживать не может.
Для дополнительной консультации по оптимизации инсталляции вы можете создать обращение.
Если вы в этом разделе, значит ваш ТестОпс работает медленно
Первым делом убедитесь, что у вас включены пулы коннектов БД <-> ТестОпс. Всего есть 3 пула:
- Upload — загрузка результатов, постпроцессинг;
- Main — основные операции по инстансу;
- Analytics — графики, виджеты, дашборды. Для этого пула настоятельно рекомендуем использовать RO-реплику БД!
На самом деле есть и четвёртый пул — migration, но его можно не трогать.
Расчёт количества коннектов
Самое надёжное по ресурсам на приложение — limits: 4 CPU / 8 GB RAM, с горизонтальным масштабированием при необходимости (4 реплики 4/8 лучше, чем 2 реплики 8/16):
Limits: cpu: X # лимит CPU на инстанс memory: X*2Gi # лимит оперативной памяти на инстанс
Где X — лимит CPU на инстанс. Формулы для пулов:
| Пул | Формула | При 4 CPU / 8 GB RAM |
|---|---|---|
| Upload | X × 2 | 8 коннектов |
| Main | X × 3 | 12 коннектов |
| Analytics | X × 2 | 8 коннектов |
Переменные окружения загрузки и обработки TestResults
ALLURE_BLOB_STORAGE_MAXCONCURRENCY
allure.blob-storage.maxConcurrency
Параметр для S3: определяет количество потоков для задач, связанных с интеграцией с S3 (например, store, findByKey и т.д.). Для S3_ASYNC — это параметр concurrency самого асинхронного клиента S3 (влияние необходимо протестировать).
- минимум = 1 (категорически не рекомендуется)
- по умолчанию = 200
- максимум = 500
- рекомендуемое значение = 50
Рекомендуется установить 50: даже 50 потоков для обработки задач интеграции с S3 — более чем достаточно. Точное значение можно определить по метрикам использования пула потоков.
ALLURE_SCHEDULER_CLEANER_BLOB_BATCHSIZE
allure.scheduler.cleaner.blob.batchSize
Связан с очисткой объектов в S3 и используется в планировщике, который запускается каждые 5 минут. Определяет количество записей из таблицы BLOB_REMOVE_TASK, получаемых за один запуск планировщика и передаваемых методу blobStorage.bulkRemove (этот метод запускает фактическое bulk-удаление только для S3_ASYNC).
- минимум = 100
- по умолчанию = 1000
- максимум = 1 000 000 (кошмар)
- рекомендуемое значение = 100
Рекомендуется установить 100: процесс выполняется каждые 5 минут, и если удаление объектов из S3 распределено во времени, это снижает нагрузку на приложение и на сам S3.
Например: 1 000 000 файлов в день, ~288 запусков в сутки → значение ≈ 3500.
RabbitMQ
Для контейнеров RabbitMQ есть несколько параметров, разделённых по фазам — parse, store, storeComplete, integration, system:
| Фаза | Exchange | Очередь | Dead-letter exchange | Dead-letter очередь |
|---|---|---|---|---|
| Parse | allure.upload | allure.upload.process | allure.dead-letter | allure.upload.process.dlq |
| Store | allure.upload | allure.upload.post-process | allure.dead-letter | allure.upload.post-process.dlq |
| StoreComplete | allure.upload | allure.upload.complete-process | — | — |
| Integration | allure.integration | allure.integration.it-export-launch | — | — |
| System | allure.system | allure.system.storage-clean | allure.dead-letter | allure.system.dead-letter |
ALLURE_UPLOAD_*_CONSUMERSPERQUEUE
allure.upload.parse.consumersPerQueue · allure.upload.store.consumersPerQueue
Количество консьюмеров для связанных топиков в каждом инстансе ТестОпс.
- минимум = 1
- по умолчанию: Parse = 10, Store = 2
Рекомендуется рассчитывать значения по формуле (где X — количество CPU на инстанс ТестОпс, 1 под):
| Параметр | Формула |
|---|---|
| allure.upload.parse.consumersPerQueue | X × 2 − 1 |
| allure.upload.store.consumersPerQueue | X − 1 |
Limits: cpu: X memory: X*2Gi
ALLURE_UPLOAD_*_PREFETCHCOUNT
allure.upload.*.prefetchCount
Говорит брокеру, сколько сообщений присылать в каждый консьюмер за один запрос.
- минимум = 1
- по умолчанию = 50
Менять не предлагается: для «быстрых» событий нормально видеть значение больше 1; «медленные» события (более 3–5 сек на обработку) лучше обрабатывать по одному. Менять только по рекомендации поддержки.
ALLURE_UPLOAD_*_RETRY_ENABLED
allure.upload.*.retry.enabled
Включает/выключает ретрай сообщений в RabbitMQ.
- по умолчанию = false (значения: true / false)
Для всех фаз предлагается выставить true.