Преодоление ограничений TPS API Azure Vision Read - PullRequest
0 голосов
/ 23 октября 2019

Я работаю в системе, где мы вызываем Vision Read API для извлечения содержимого из растрового PDF. Файлы имеют разный размер, варьирующийся от одной страницы до нескольких сотен страниц.

Файлы хранятся в BLOB-объекте Azure, и будет предусмотрена функция отправки файлов в API чтения один раз, когда все файлы загружены в BLOB-объект. Там могут быть сотни файлов.

Поэтому, когда процесс начинается, ожидается, что большое количество документов будет отправлено для извлечения текста в секунду. Но Vision API имеет ограничение в 10 транзакций в секунду, включая чтение.

Мне интересно, что будет лучшим подходом? Какой-то тип регулирования или очереди?

Существует ли какая-либо доступная интеграция (скажем, с очередью), из которой API чтения будет извлекать документы, и есть ли какой-либо тип push-уведомлений для уведомления о завершении операции чтения? Как я могу предотвратить тайм-ауты из-за превышения лимита 10 TPS?

1 Ответ

1 голос
/ 23 октября 2019

Насколько я понимаю, есть 2 ключевых момента, которые вы хотите знать:

  1. Как преодолеть ограничение в 10 TPS, когда у вас есть много файлов для чтения.
  2. Ищетелучший способ получить статус и результат операции чтения.

Ваш вопрос немного широк, возможно, я могу дать вам несколько советов:

Для Q1 Как правило, если вы достигнете предела TPS, вы получите ответ HTTP 429, вам придется подождать некоторое время, чтобы снова вызвать API, иначе в следующем вызове API будет отказано. Обычно мы повторяем операцию, используя что-то вроде экспоненциальной политики повторных попыток отката для обработки ошибки 429:

2.1) Вам необходимо проверить код ответа HTTP в своем коде.

2.2) Когда ответ HTTPкод 429, затем повторите эту операцию через N секунд, которые вы можете определить самостоятельно, например, 10 секунд ...

Например, следующий ответ - 429. Вы можете установить время ожидания как (26 + n) секунд. (PS: здесь вы можете определить n самостоятельно, например, n = 5…)

{"error": {"statusCode": 429, "message": "Превышен предел скорости. Попробуйте еще раз через 26секунды «. }}

2.3) Если шаг 2 выполнен успешно, продолжите следующую операцию.

2.4) Если шаг 2 завершится неудачно и с 429, повторите эту операцию через N * N секунд (вы можете определить самитоже), что является экспоненциальной политикой повторных попыток отката ..

2.5) Если шаг 4 завершается неудачно и с 429, повторите эту операцию через N N N секунд ...

2.6) Вы всегда должны ждать, пока текущая операция завершится успешно, и время ожидания будет экспоненциально расти.

Для Q2, , как мы знаем, мы можем использовать этот API чтобы получить статус / результат операции чтения. Если вы хотите получить уведомление / результат о завершении, вы должны с интервалами составлять запрос опроса поочередно для каждой операции. Например, каждые 10 секунд отправлять запрос на проверку. Вы можете использовать функция Azure или Runbook автоматизации Azure для создания асинхронных задач для проверки состояния операции чтения и по завершении обработки результатов в соответствии с вашими требованиями.

Надеюсь, это поможет. Если у вас есть какие-либо проблемы, пожалуйста, дайте мне знать.

...