Масштабирование и лимиты 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_CONCURRENCY | 2 | Одновременные review на организацию. |
SKITFLOW_CODE_REVIEW_REPO_CONCURRENCY | 1 | Одновременные review на repository. |
SKITFLOW_CODE_REVIEW_MAX_CHANGED_FILES | 100 | Максимум изменённых файлов; worker проверяет лимит повторно. |
SKITFLOW_CODE_REVIEW_INTERACTIVE_CONCURRENCY | 8 | Интерактивные jobs на worker replica. |
SKITFLOW_CODE_REVIEW_BACKGROUND_CONCURRENCY | 4 | Автоматические jobs на worker replica. |
SKITFLOW_CODE_REVIEW_SHADOW_CONCURRENCY | 2 | Shadow-evaluation jobs на worker replica. |
SKITFLOW_CODE_REVIEW_BACKGROUND_RATE_MAX | 60 | Автоматические jobs за rate window. |
SKITFLOW_CODE_REVIEW_SHADOW_RATE_MAX | 30 | Shadow jobs за rate window. |
SKITFLOW_CODE_REVIEW_RATE_DURATION_MS | 60000 | Окно 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_REGION | Region; по умолчанию 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.