Настройка ограничения частоты запросов
NORA реализует ограничение частоты запросов для защиты реестра от чрезмерной нагрузки. Это руководство охватывает значения по умолчанию, рекомендации по настройке и мониторинг.
Переменные окружения
Заголовок раздела «Переменные окружения»| Переменная | По умолчанию | Описание |
|---|---|---|
NORA_RATE_LIMIT_UPLOAD_RPS | 200 | Запросов на загрузку в секунду |
NORA_RATE_LIMIT_UPLOAD_BURST | 500 | Максимальный всплеск для загрузки |
NORA_RATE_LIMIT_GENERAL_RPS | 100 | Общих запросов в секунду |
NORA_RATE_LIMIT_GENERAL_BURST | 200 | Максимальный всплеск для общих запросов |
NORA_RATE_LIMIT_AUTH_RPS | 10 | Запросов аутентификации в секунду |
NORA_RATE_LIMIT_AUTH_BURST | 20 | Максимальный всплеск для аутентификации |
NORA_RATE_LIMIT_ENABLED | true | Включение/отключение ограничения |
Примеры конфигурации
Заголовок раздела «Примеры конфигурации»Docker Run
Заголовок раздела «Docker Run»docker run -d \ --name nora \ -p 4000:4000 \ -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: 2000config.toml
Заголовок раздела «config.toml»[rate_limit]enabled = trueРекомендации по настройке
Заголовок раздела «Рекомендации по настройке»Небольшая команда (< 10 разработчиков)
Заголовок раздела «Небольшая команда (< 10 разработчиков)»Значений по умолчанию достаточно:
NORA_RATE_LIMIT_UPLOAD_RPS=200NORA_RATE_LIMIT_UPLOAD_BURST=500NORA_RATE_LIMIT_GENERAL_RPS=100NORA_RATE_LIMIT_GENERAL_BURST=200Сценарий использования: Редкие сборки, ручная публикация, небольшой 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 24/7, глобальные развёртывания
Описание параметров ограничения частоты запросов
Заголовок раздела «Описание параметров ограничения частоты запросов»RPS (Requests Per Second — запросов в секунду)
Заголовок раздела «RPS (Requests Per Second — запросов в секунду)»- Определение: Средняя допустимая скорость обработки запросов
- Пример:
RPS=200означает 200 запросов в секунду в среднем - Эффект: Запросы, превышающие эту скорость, будут ограничены
Burst (всплеск)
Заголовок раздела «Burst (всплеск)»- Определение: Максимальный допустимый временный пик запросов
- Пример:
BURST=500позволяет до 500 запросов за короткий всплеск - Эффект: Обрабатывает пики трафика без немедленного ограничения
Upload vs General (загрузка vs общие)
Заголовок раздела «Upload vs General (загрузка vs общие)»- Лимиты загрузки: Применяются к операциям push образов (PUT, POST к
/v2/) - Общие лимиты: Применяются ко всем остальным операциям (pull, каталог, теги)
Мониторинг ограничений частоты запросов
Заголовок раздела «Мониторинг ограничений частоты запросов»Эндпоинт метрик
Заголовок раздела «Эндпоинт метрик»Проверьте /metrics для получения статистики ограничения частоты запросов:
curl http://localhost:4000/metrics | grep rate_limitКлючевые метрики:
nora_http_requests_total{registry, method, status}— общее количество HTTP-запросов по реестру, методу и коду ответа
Запрос Prometheus
Заголовок раздела «Запрос Prometheus»# Частота запросов за 5 минутrate(nora_http_requests_total[5m])
# Запросы с ошибкой 429 (ограниченные)rate(nora_http_requests_total{status="429"}[5m])Правила алертов
Заголовок раздела «Правила алертов»groups: - name: nora_rate_limits rules: - alert: NoraHighRateLimitHits expr: rate(nora_http_requests_total{status="429"}[5m]) > 10 for: 5m labels: severity: warning annotations: summary: "NORA experiencing high rate limit violations" description: "{{ $value }} rate-limited requests per second"Устранение неполадок
Заголовок раздела «Устранение неполадок»Симптом: ошибки “429 Too Many Requests”
Заголовок раздела «Симптом: ошибки “429 Too Many Requests”»Причина: Превышены ограничения частоты запросов
Решение:
- Проверьте текущую конфигурацию ограничений
- Мониторьте
/metricsдля определения, какой лимит достигнут (загрузка или общий) - Увеличьте соответствующие лимиты в зависимости от вашей нагрузки
- Перезапустите NORA для применения новых лимитов
Симптом: медленная загрузка образов во время CI/CD
Заголовок раздела «Симптом: медленная загрузка образов во время CI/CD»Причина: Лимиты загрузки слишком строгие для параллельных сборок
Решение:
# Increase upload limitsNORA_RATE_LIMIT_UPLOAD_RPS=2000NORA_RATE_LIMIT_UPLOAD_BURST=5000Симптом: таймауты API-вызовов
Заголовок раздела «Симптом: таймауты API-вызовов»Причина: Общие лимиты блокируют запросы метаданных
Решение:
# Increase general limitsNORA_RATE_LIMIT_GENERAL_RPS=1000NORA_RATE_LIMIT_GENERAL_BURST=2000Лучшие практики
Заголовок раздела «Лучшие практики»- Начинайте консервативно — начните со значений по умолчанию и увеличивайте на основе метрик
- Мониторьте постоянно — настройте алерты Prometheus для отслеживания срабатываний лимитов
- Планируйте пиковые нагрузки — устанавливайте значения
BURSTвышеRPSдля обработки всплесков трафика - Разделяйте Upload/General — настраивайте независимо в зависимости от паттернов использования
- Документируйте изменения — ведите учёт корректировок лимитов и их причин
- Нагрузочное тестирование — тестируйте новые лимиты в staging-среде перед продакшеном
Влияние на производительность
Заголовок раздела «Влияние на производительность»Ограничение частоты запросов в NORA очень эффективно:
- Накладные расходы: < 1 мс на запрос
- Память: Пренебрежимо мало (алгоритм token bucket)
- CPU: Минимальное влияние даже при высоком RPS
Увеличение лимитов практически не влияет на производительность самой NORA. Лимиты существуют исключительно для защиты сервера от чрезмерной клиентской нагрузки.