Ограничения использования

API EMM Google Play имеет ограничение по умолчанию в 60 000 запросов в минуту для каждого EMM.

Если вы превысите квоту, Google Play EMM API вернет HTTP 429 Too Many Requests . Чтобы гарантировать, что вы не превысите установленные ограничения на использование и обеспечите оптимальные условия для своих пользователей, рассмотрите возможность внедрения некоторых передовых методов, описанных в разделе ниже.

Рекомендации по соблюдению ограничений на использование API

При использовании Google Play EMM API можно реализовать несколько рекомендаций для распределения запросов и снижения риска превышения ограничений использования.

Рандомизировать время и интервалы начала

Такие действия, как одновременная синхронизация или регистрация устройств, скорее всего, приведут к значительному увеличению объема запросов. Вместо выполнения этих действий через регулярные запланированные интервалы вы можете распределить нагрузку по запросам, рандомизируя эти интервалы. Например, вместо того, чтобы синхронизировать каждое устройство каждые 24 часа, вы можете синхронизировать каждое устройство в случайно выбранный период времени от 23 до 25 часов. Это помогает распределить количество запросов.

Аналогичным образом, если вы запускаете ежедневное задание, в ходе которого выполняется множество вызовов API подряд, рассмотрите возможность запуска задания каждый день в случайное время, чтобы предотвратить одновременное выполнение большого объема запросов для всех ваших корпоративных клиентов.

Используйте экспоненциальную отсрочку для повторных запросов

Если вы запускаете задания, состоящие из множества вызовов API, используйте стратегию экспоненциальной задержки в ответ на достижение квоты. Экспоненциальная отсрочка — это алгоритм, который повторяет запросы экспоненциально. Пример алгоритма реализации простого экспоненциального отката выглядит следующим образом:

  1. Сделайте запрос к API EMM Google Play.
  2. Получите ответ HTTP 429 .
  3. Подождите 2 секунды + random_time , затем повторите запрос.
  4. Получите ответ HTTP 429 .
  5. Подождите 4 секунды + random_time , затем повторите запрос.
  6. Получите ответ HTTP 429 .
  7. Подождите 8 секунд + random_time , затем повторите запрос.

random_time обычно представляет собой случайное число в диапазоне от -0,5 * время ожидания до +0,5 * время ожидания . Переопределите новое random_time каждый раз, когда вы повторяете свой запрос. Вызовы API, необходимые для выполнения действий с пользователем, можно повторять по более частому расписанию (например, 0,5 с, 1 с и 2 с).

Пакетные процессы с ограничением скорости

Каждый раз, когда пакетный процесс достигает квоты, задержка действий пользователя, вызывающих API, увеличивается. В подобных ситуациях такие стратегии, как экспоненциальная задержка, могут быть недостаточно эффективными для поддержания низкой задержки для действий пользователя.

Чтобы избежать повторного достижения пределов использования API и увеличения задержки для действий пользователя, рассмотрите возможность использования ограничителя скорости для пакетных процессов (см. Google RateLimiter ). С помощью ограничителя скорости вы можете регулировать скорость запросов API, чтобы постоянно оставаться ниже ограничений использования.

Например, запустите пакетный процесс с ограничением скорости по умолчанию в 50 запросов в секунду. Пока API не возвращает ошибку, медленно увеличивайте предел скорости (1 % каждую минуту). Каждый раз, когда вы достигаете квоты, уменьшайте частоту запросов на 20%. Этот адаптивный подход обеспечивает более оптимальную частоту запросов и одновременно снижает задержку для действий пользователя.