Настройка ограничений частоты запросов
NORA реализует ограничение частоты запросов для защиты реестра от чрезмерной нагрузки. В этом руководстве описаны значения по умолчанию, рекомендации по тонкой настройке и мониторинг.
Отключение ограничений
Заголовок раздела «Отключение ограничений»Переменные окружения
Заголовок раздела «Переменные окружения»| Переменная | По умолчанию | Описание |
|---|---|---|
NORA_RATE_LIMIT_ENABLED | true | Включение/отключение ограничений |
NORA_RATE_LIMIT_UPLOAD_RPS | 200 | Запросов загрузки в секунду |
NORA_RATE_LIMIT_UPLOAD_BURST | 500 | Пиковое значение для загрузок |
NORA_RATE_LIMIT_GENERAL_RPS | 500 | Общих запросов в секунду |
NORA_RATE_LIMIT_GENERAL_BURST | 1000 | Пиковое значение для общих запросов |
Примеры конфигурации
Заголовок раздела «Примеры конфигурации»Docker Run
Заголовок раздела «Docker Run»docker run -d \ --name nora \ -p 5000:5000 \ -v /data/nora:/data \ -e NORA_RATE_LIMIT_UPLOAD_RPS=2000 \ -e NORA_RATE_LIMIT_UPLOAD_BURST=5000 \ -e NORA_RATE_LIMIT_GENERAL_RPS=1000 \ -e NORA_RATE_LIMIT_GENERAL_BURST=2000 \ ghcr.io/getnora-io/nora:latest serveDocker Compose
Заголовок раздела «Docker Compose»services: nora: image: ghcr.io/getnora-io/nora:latest environment: NORA_RATE_LIMIT_UPLOAD_RPS: 2000 NORA_RATE_LIMIT_UPLOAD_BURST: 5000 NORA_RATE_LIMIT_GENERAL_RPS: 1000 NORA_RATE_LIMIT_GENERAL_BURST: 2000Конфигурация YAML
Заголовок раздела «Конфигурация YAML»rate_limits: upload: rps: 2000 burst: 5000 general: rps: 1000 burst: 2000Командная строка
Заголовок раздела «Командная строка»nora serve \ --rate-limit-upload-rps 2000 \ --rate-limit-upload-burst 5000 \ --rate-limit-general-rps 1000 \ --rate-limit-general-burst 2000Рекомендации по тонкой настройке
Заголовок раздела «Рекомендации по тонкой настройке»Небольшая команда (менее 10 разработчиков)
Заголовок раздела «Небольшая команда (менее 10 разработчиков)»Значений по умолчанию достаточно:
NORA_RATE_LIMIT_UPLOAD_RPS=200NORA_RATE_LIMIT_UPLOAD_BURST=500NORA_RATE_LIMIT_GENERAL_RPS=500NORA_RATE_LIMIT_GENERAL_BURST=1000Сценарий использования: Нечастые сборки, ручная загрузка образов, небольшой CI/CD-конвейер
Средняя команда (10–50 разработчиков)
Заголовок раздела «Средняя команда (10–50 разработчиков)»Рекомендуется умеренное увеличение:
NORA_RATE_LIMIT_UPLOAD_RPS=1000NORA_RATE_LIMIT_UPLOAD_BURST=2000NORA_RATE_LIMIT_GENERAL_RPS=750NORA_RATE_LIMIT_GENERAL_BURST=1500Сценарий использования: Регулярный CI/CD, несколько параллельных сборок, активная разработка
Крупная команда (50+ разработчиков, интенсивный CI/CD)
Заголовок раздела «Крупная команда (50+ разработчиков, интенсивный CI/CD)»Значительное увеличение для высокой пропускной способности:
NORA_RATE_LIMIT_UPLOAD_RPS=2000NORA_RATE_LIMIT_UPLOAD_BURST=5000NORA_RATE_LIMIT_GENERAL_RPS=1000NORA_RATE_LIMIT_GENERAL_BURST=2000Сценарий использования: Непрерывное развёртывание, матричные сборки, частая загрузка образов
Корпоративное / мультитенантное развёртывание
Заголовок раздела «Корпоративное / мультитенантное развёртывание»Индивидуальная тонкая настройка под нагрузку:
NORA_RATE_LIMIT_UPLOAD_RPS=5000NORA_RATE_LIMIT_UPLOAD_BURST=10000NORA_RATE_LIMIT_GENERAL_RPS=2000NORA_RATE_LIMIT_GENERAL_BURST=5000Сценарий использования: Несколько команд, круглосуточный CI/CD, глобальные развёртывания
Описание параметров ограничений
Заголовок раздела «Описание параметров ограничений»RPS (запросов в секунду)
Заголовок раздела «RPS (запросов в секунду)»- Определение: Средняя допустимая частота запросов в устойчивом режиме
- Пример:
RPS=200означает 200 запросов в секунду в среднем - Эффект: Запросы, превышающие эту частоту, будут ограничены
Пиковое значение (Burst)
Заголовок раздела «Пиковое значение (Burst)»- Определение: Максимальное число запросов, допустимое в кратковременном пике
- Пример:
BURST=500допускает до 500 запросов при кратковременной пиковой нагрузке - Эффект: Позволяет обрабатывать всплески трафика без немедленного ограничения
Загрузка и общие запросы
Заголовок раздела «Загрузка и общие запросы»- Ограничения загрузки: Применяются к операциям отправки образов (PUT, POST на
/v2/) - Общие ограничения: Применяются ко всем остальным операциям (получение образов, каталог, теги)
Мониторинг ограничений
Заголовок раздела «Мониторинг ограничений»Конечная точка метрик
Заголовок раздела «Конечная точка метрик»Проверьте /metrics для получения статистики по ограничениям:
curl http://localhost:4000/metrics | grep rate_limitКлючевые метрики:
nora_rate_limit_hits_total{type="upload"}— срабатывания ограничений загрузкиnora_rate_limit_hits_total{type="general"}— срабатывания общих ограниченийnora_requests_total— общее число обработанных запросов
Запросы Prometheus
Заголовок раздела «Запросы Prometheus»# Частота срабатывания ограничений за 5 минутrate(nora_rate_limit_hits_total[5m])
# Процент запросов, попавших под ограничение(rate(nora_rate_limit_hits_total[5m]) / rate(nora_requests_total[5m])) * 100Правила оповещений
Заголовок раздела «Правила оповещений»groups: - name: nora_rate_limits rules: - alert: NoraHighRateLimitHits expr: rate(nora_rate_limit_hits_total[5m]) > 10 for: 5m labels: severity: warning annotations: summary: "Частое срабатывание ограничений в NORA" description: "{{ $value }} срабатываний ограничений в секунду"
- alert: NoraRateLimitCritical expr: (rate(nora_rate_limit_hits_total[5m]) / rate(nora_requests_total[5m])) > 0.1 for: 10m labels: severity: critical annotations: summary: "Более 10% запросов попадают под ограничение" description: "Рассмотрите увеличение лимитов"Устранение неполадок
Заголовок раздела «Устранение неполадок»Симптом: ошибки «429 Too Many Requests»
Заголовок раздела «Симптом: ошибки «429 Too Many Requests»»Причина: Превышены ограничения частоты запросов
Решение:
- Проверьте текущие значения ограничений
- Определите по
/metrics, какое ограничение срабатывает (загрузка или общие запросы) - Увеличьте соответствующие значения в зависимости от нагрузки
- Перезапустите NORA для применения новых ограничений
Симптом: медленная загрузка образов при CI/CD-сборке
Заголовок раздела «Симптом: медленная загрузка образов при CI/CD-сборке»Причина: Ограничения загрузки слишком жёсткие для параллельных сборок
Решение:
# Увеличить ограничения загрузкиNORA_RATE_LIMIT_UPLOAD_RPS=2000NORA_RATE_LIMIT_UPLOAD_BURST=5000Симптом: тайм-ауты при вызовах API
Заголовок раздела «Симптом: тайм-ауты при вызовах API»Причина: Общие ограничения блокируют запросы метаданных
Решение:
# Увеличить общие ограниченияNORA_RATE_LIMIT_GENERAL_RPS=1000NORA_RATE_LIMIT_GENERAL_BURST=2000Рекомендации
Заголовок раздела «Рекомендации»- Начинайте с консервативных значений — используйте значения по умолчанию и увеличивайте на основе метрик
- Ведите постоянный мониторинг — настройте оповещения Prometheus при срабатывании ограничений
- Учитывайте пиковые нагрузки — задавайте
BURSTвышеRPSдля обработки всплесков трафика - Настраивайте раздельно — тюнируйте ограничения загрузки и общие ограничения независимо, исходя из профиля нагрузки
- Документируйте изменения — фиксируйте корректировки ограничений и причины изменений
- Проводите нагрузочное тестирование — проверяйте новые значения в тестовой среде перед применением в промышленной
Влияние на производительность
Заголовок раздела «Влияние на производительность»Механизм ограничения частоты запросов в NORA реализован максимально эффективно:
- Накладные расходы: менее 1 мс на запрос
- Память: пренебрежимо малое потребление (алгоритм маркерного ведра)
- Процессор: минимальное влияние даже при высоких значениях RPS
Увеличение ограничений практически не влияет на производительность самого NORA. Ограничения существуют исключительно для защиты сервера от чрезмерной клиентской нагрузки.