Skip to Content

Особенности работы 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}/async50 мс.
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 создания запросов Умного OCR
  • inference_ext_get_limit, зона для API получения результатов запросов Умного OCR
  • inference_ext_tracking_limit, зона для внутренних взаимодействий API и агентов целевых машин
  • inference_limit, дополнительная зона для всех остальных запросов к сервису Api.Inference
  • api_limit, дополнительная зона для всех остальных запросов к Api

Если сервис под нагрузкой отдает ошибки 429 / 503, скорректируйте настройки зон.

  1. Откройте на редактирование файл конфигурации nginx.conf.
    • При установке серверной части с использованием Docker:
    sudo nano /app/Primo.AI/Api/volumes/nginx/nginx.conf
    • При установке серверной части без Docker:
    sudo nano /etc/nginx/nginx.conf
  2. Скорректируйте стандартные параметры limit_req_zone: уменьшите допустимую частоту запросов rate, пока деградация при нагрузке не исчезнет.