#api #throttling #ratelimit
#API #регулирование #ограничение скорости
Вопрос:
У меня есть API, который ограничивает 10 вызовов в секунду с IP-адреса — давайте вызовем этот API-1
У меня есть веб-приложение, которое использует API-1. Давайте вызовем это веб-приложение-1
Если у моего веб-приложения больше трафика и ему требуется совершать больше вызовов в секунду, чем разрешено, как мне спроектировать вызов WebApp-1 для API-1?
Ответ №1:
Некоторые идеи о том, как подойти к API с ограниченной скоростью, которые приходят на ум:
- Увеличьте ограничения API для вашего клиентского ключа. Вероятно, это не ваш случай, но в некоторых случаях может быть вариантом.
- Создайте / приобретите больше учетных записей клиентов (ключей доступа) к API, чтобы повысить общий предел скорости. Равномерно распределите трафик между ключами.
- Результаты кэширования на стороне запроса (в вашем случае WebApp). Это зависит от приложения, но если WebApp является приложением на основе браузера, кэширование может быть неэффективным, поскольку между клиентами нет общего кэша.
- Ввести кэширующий прокси. WebApp отправляет запросы прокси-серверу, который перенаправляет их в API с ограниченной скоростью. Это поможет в поддержании общего кэша. Некоторые варианты реализации прокси: Nginx, Varnish, AWS API Gateway и т.д.
- Введите очередь запросов (синхронную). Опять же, если WebApp является приложением для браузера, вам может потребоваться установить серверную службу в качестве прокси-сервера между WebApp и API. Прокси будет поддерживать постоянный поток запросов к API. Если есть пакет входящих запросов, это приведет к задержке обработки для соблюдения ограничения скорости API (веб-приложению, возможно, придется ждать дольше, чтобы получить ответ от прокси-сервера). На самом деле не масштабируемо.
- Введите очередь запросов (асинхронную). Веб-приложение отправляет запросы прокси-серверу. Прокси подтверждает получение и возвращает идентификатор получения. Затем либо прокси отправляет запрос обратного вызова веб-приложению, когда ответ от API готов, либо веб-приложение опрашивает прокси, чтобы узнать, есть ли какие-либо данные для данного идентификатора поступления.
- Другим (явно сомнительным) решением является выполнение запросов с разных компьютеров и IP-адресов. Вероятно, владелец API не хочет этого видеть!