Особенности работы API и управление нагрузкой
AI Server взаимодействует с клиентами через API. Руководство не рассматривает установку с использованием Kubernetes и других механизмов балансировки и отказоустойчивости. При их отсутствии высокая нагрузка на API может привести к частичной или полной недоступности сервиса.
Для обеспечения стабильной и корректной работы используются механизмы ограничения нагрузки (Rate Limiting). Они реализованы как на стороне AI Server, так и на уровне nginx, обрабатывающего входящий трафик.
Далее описаны базовые рекомендации по работе с API AI Server и порядок настройки ограничения нагрузки с использованием очередей в nginx.
Рекомендации по ограничению нагрузки на API сервиса
Для обеспечения стабильной работы API сервиса в текущей конфигурации необходимо соблюдать приведенные ниже ограничения.
1. Общие рекомендации
- Клиенты должны регулировать частоту запросов, чтобы не создавать избыточную нагрузку на сервер.
- По-умолчанию минимальный интервал между запросами одного клиента — 50 мс (настраивается на стороне клиента).
2. Специфичные рекомендации для разных типов запросов
| Тип запроса | Интервал между запросами |
|---|---|
POST /inference/smartOcr/ | 50 мс. |
GET /inference/smartOcr/{requestKey} | 50 мс. |
POST /inference/nlp/{modelType}/async | 50 мс. |
GET /inference/nlp/{modelType}/{requestKey} | 50 мс. |
| Прочие запросы | Не требуется (не предполагается высокой нагрузки) |
3. Рекомендации по реализации на клиентской стороне
-
Очередь запросов:
- Запросы одного типа должны отправляться последовательно, а не параллельно.
- Может быть реализована как единая очередь, так и несколько отдельных очередей на каждый тип запроса.
- Между окончанием обработки одного запроса и отправкой следующего должен быть интервал ≥50 мс.
-
Дополнительно, опционально, экспоненциальный backoff при ошибках: - Если сервер возвращает 429 (Too Many Requests) или 503 (Service Unavailable), клиент должен увеличить интервал между запросами (например, по алгоритму 50 мс → 100 мс → 200 мс и т. д.). - Интервал должен уменьшаться спустя продолжительное время.
Настройка контроля нагрузки на стороне nginx
Описанные выше правила — это “джентльменское соглашение” с клиентами.
Однако для защиты от клиентов, где не реализованы описанные выше рекомендации, реализована защита на стороне прокси-сервера nginx.
Для этого использован модуль ngx_http_limit_req_module: он организует очередь запросов.
По-умолчанию организовано 5 зон:
inference_ext_post_limit, зона для API создания запросов Умного OCRinference_ext_get_limit, зона для API получения результатов запросов Умного OCRinference_ext_tracking_limit, зона для внутренних взаимодействий API и агентов целевых машинinference_limit, дополнительная зона для всех остальных запросов к сервису Api.Inferenceapi_limit, дополнительная зона для всех остальных запросов к Api
Если сервис под нагрузкой отдает ошибки 429 / 503, скорректируйте настройки зон.
- Откройте на редактирование файл конфигурации
nginx.conf.- При установке серверной части с использованием Docker:
sudo nano /app/Primo.AI/Api/volumes/nginx/nginx.conf- При установке серверной части без Docker:
sudo nano /etc/nginx/nginx.conf - Скорректируйте стандартные параметры
limit_req_zone: уменьшите допустимую частоту запросов rate, пока деградация при нагрузке не исчезнет.