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

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

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

Рекомендации по тому, как оставаться ниже лимитов использования API

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

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

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

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

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

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

  1. Сделайте запрос к EMM API 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%. Этот адаптивный подход приводит к более оптимальной скорости запросов при одновременном снижении задержки для действий пользователя.