Skitflow
Code Review

Масштабирование и лимиты Code Review

Масштабирование self-hosted Code Review workers и настройка concurrency, budgets, metrics, retention и encrypted artifact storage.

В self-hosted Code Review обработка webhook и dashboard отделена от очередей review и Code Intelligence. Dedicated workers используют общие Redis и основную базу данных, поэтому классы очередей можно настраивать независимо и добавлять worker replicas, не перенося web process.

Поведение при исчерпании бюджета

Владельцы организации задают лимиты в Dashboard → Settings → Code Review. На уровне repository можно задать более узкие token/cost budgets, а budgets для embedding tokens и indexing time действуют на всю организацию.

Budget enforcement меняет наблюдаемое поведение review:

  • При расходе 80% новые review переключаются на контекст diff_only. Они продолжают выполняться, но без repository-aware context до сброса суточного или месячного бюджета.
  • При 100% автоматические review пропускаются. Интерактивные review используют diff_only, если When the budget is exhausted имеет значение degrade — это значение по умолчанию.
  • Выберите block, только если после исчерпания бюджета нужно запрещать также интерактивные review.

Organization automatic reviews per hour и Organization automatic reviews per day ограничивают автоматические review во всех repositories организации. По умолчанию оба лимита выключены: пустое значение означает отсутствие общего лимита. Решения о throttle и budget, принятые web service при admission, записываются в audit log организации. Перед model work worker повторно проверяет budgets. Если порог был пересечён уже после admission, решение diff_only, skipped_budget или budget_exhausted видно в состоянии run, но сейчас не создаёт отдельную запись в audit log организации.

Если агрегаты metering недоступны, budget check работает fail-open: review остаются доступны, а Skitflow записывает диагностическое событие вместо остановки сервиса.

Производительность workers

Начните со значений по умолчанию и настройте их с учётом CPU, памяти, provider rate limits и задержки очередей:

ПеременнаяПо умолчаниюОбласть действия
SKITFLOW_CODE_REVIEW_ORG_CONCURRENCY2Одновременные review на организацию.
SKITFLOW_CODE_REVIEW_REPO_CONCURRENCY1Одновременные review на repository.
SKITFLOW_CODE_REVIEW_MAX_CHANGED_FILES100Максимум изменённых файлов; worker проверяет лимит повторно.
SKITFLOW_CODE_REVIEW_INTERACTIVE_CONCURRENCY8Интерактивные jobs на worker replica.
SKITFLOW_CODE_REVIEW_BACKGROUND_CONCURRENCY4Автоматические jobs на worker replica.
SKITFLOW_CODE_REVIEW_SHADOW_CONCURRENCY2Shadow-evaluation jobs на worker replica.
SKITFLOW_CODE_REVIEW_BACKGROUND_RATE_MAX60Автоматические jobs за rate window.
SKITFLOW_CODE_REVIEW_SHADOW_RATE_MAX30Shadow jobs за rate window.
SKITFLOW_CODE_REVIEW_RATE_DURATION_MS60000Окно rate limit в миллисекундах.

Для интерактивных review rate cap отсутствует, пока не задан SKITFLOW_CODE_REVIEW_INTERACTIVE_RATE_MAX. У Code Intelligence отдельные concurrency controls для trigger, worker, embedding и cleanup; полный контракт переменных окружения находится в docs/PRODUCTION_ENV.md соответствующего deployment.

В однонодовой установке SKITFLOW_MAX_TOTAL_CONCURRENCY задаёт safety ceiling для in-process workers. По умолчанию он равен удвоенному числу доступных CPU. Если сумма concurrency включённых классов выше, Skitflow выводит предупреждение при запуске. Уменьшите лимиты классов или перенесите нагрузку в dedicated worker replicas.

В Swarm оставляйте web service на manager node: он управляет кластером. Code Review worker — отдельный service с labels skitflow.component=code-review и skitflow.class=mixed; задавайте placement constraints и resource reservations подходящих worker nodes. Не переносите web service на worker node ради увеличения review capacity.

Миграция Redis queues

SKITFLOW_QUEUE_PREFIX по умолчанию равен skitflow и изолирует Redis keys Skitflow. После миграции не меняйте его без необходимости.

SKITFLOW_QUEUE_LEGACY_DRAIN нужен только при обновлении со сборки, которая использовала очереди без prefix. Временно задайте true на worker, чтобы запустить второй consumer для legacy queues. Верните false, когда во всех legacy queues дважды с интервалом не менее 60 секунд будет ноль waiting, active, delayed и prioritized jobs. Оставленный флаг расходует дополнительную worker concurrency.

Worker metrics

Workers отдают Prometheus text по GET /metrics на SKITFLOW_METRICS_PORT (по умолчанию 9095). Опциональный SKITFLOW_METRICS_TOKEN требует от инфраструктурного scraper заголовок Authorization: Bearer <token>. Self-hosted workers по умолчанию слушают 127.0.0.1; используйте SKITFLOW_METRICS_HOST, только если endpoint нужен внутреннему collector.

Сейчас install.sh не передаёт эти три metrics-переменные в worker service. Поэтому script-based installation использует defaults worker image: loopback, порт 9095 и отсутствие token. Для private-network scraper добавьте нужные переменные прямо в skitflow-code-review-worker после установки, например через docker service update --env-add.

Никогда не публикуйте metrics port через Traefik, публичный load balancer или host port. Это внутренний инфраструктурный endpoint. Оставляйте его в private worker network даже при включённой bearer authentication.

Зашифрованное artifact storage

S3-compatible bucket опционален. Если SKITFLOW_ARTIFACT_S3_BUCKET не задан, запись artifacts становится no-op, а review, indexing, embedding и cleanup продолжают работать. Установка без S3 полностью поддерживается.

ПеременнаяНазначение
SKITFLOW_ARTIFACT_S3_BUCKETВключает artifact storage.
SKITFLOW_ARTIFACT_S3_REGIONRegion; по умолчанию us-east-1.
SKITFLOW_ARTIFACT_S3_ENDPOINTОпциональный S3-compatible endpoint.
SKITFLOW_ARTIFACT_S3_FORCE_PATH_STYLEУстановите true, если это требуется MinIO или другим provider.
SKITFLOW_ARTIFACT_KEYПредпочтительный encryption root; fallback — SKITFLOW_SECRET_KEY, затем BETTER_AUTH_SECRET.
SKITFLOW_CODE_REVIEW_DEBUG_BUNDLESПри true сохраняет bundles успешных runs; failed runs сохраняются автоматически.

Поддерживается стандартная AWS credential chain. До upload объекты шифруются в приложении с AES-256-GCM и отдельным HKDF-SHA256 key для каждой организации. Смена effective root key делает существующие объекты нечитаемыми; key rotation в этой версии нет. Настройте bucket lifecycle на удаление объектов с tag retention=30d через 30 дней.

Retention в базе данных

Периодическая retention job:

  • удаляет code_review_webhook_events через 30 дней;
  • очищает policy/context diagnostic JSON в code_review_runs через 90 дней, сохраняя сам run;
  • агрегирует детальные code_review_usage в помесячные строки перед удалением detail старше 13 месяцев.

Агрегация и удаление detail выполняются в одной transaction, поэтому detail не исчезает до надёжного сохранения месячных итогов.

Production reference

Публичные defaults и contracts на этой странице согласованы с skitflow-cloud/docs/PRODUCTION_ENV.md, deployment compose files и production environment example. Перед обновлением сравните локальные overrides с этим файлом, особенно если меняете worker topology или limits.

On this page