Google Play EMM API 的默认上限为每个 EMM 每分钟 6 万次查询。
如果您超出了配额,Google Play EMM API 会返回 HTTP 429 Too Many Requests
。
为确保您不会超出规定的使用限制,并为用户提供最佳体验,不妨考虑采用下一部分中介绍的一些最佳实践。
关于如何确保不超过 API 用量限额的建议
使用 Google Play EMM API 时,您可以实施一些最佳做法来分发请求,并降低超出用量限额的风险。
随机设置开始时间和间隔时间
同时进行同步或签入设备等活动可能会导致请求量大幅增加。您可以通过对这些间隔时间进行随机化处理,而不是按定期安排的时间间隔执行这些活动,从而分散请求负载。例如,您可以选择在 23 到 25 小时之间随机选择的时间段同步每部设备,而不是每 24 小时同步一次。这有助于分散请求数量。
同样,如果您运行的每日作业会快速连续进行多次 API 调用,请考虑每天在随机时间启动该作业,以免同时向所有企业客户发出大量请求。
使用指数退避算法重试请求
如果您运行的作业包含许多 API 调用,请使用指数退避策略来应对达到配额的情况。指数退避算法是一种以指数方式重试请求的算法。实现简单指数退避算法的示例流程如下:
- 向 Google Play EMM API 发出请求。
- 收到
HTTP 429
响应。 - 等待 2 秒 +
random_time
,然后重试该请求。 - 收到
HTTP 429
响应。 - 等待 4 秒 +
random_time
,然后重试请求。 - 收到
HTTP 429
响应。 - 等待 8 秒 +
random_time
,然后重试该请求。
random_time
通常是一个随机数,介于 -0.5 * 等待时间 和 +0.5 * 等待时间 之间。每次重试请求时,都要重新定义新的 random_time
。完成面向用户的操作所需的 API 调用可以按更频繁的时间表(例如 0.5 秒、1 秒和 2 秒)重试。
速率限制批处理
每当批处理流程达到配额时,调用 API 的用户操作的延迟时间都会增加。在这种情况下,指数退避等策略可能不足以有效地缩短用户操作的延迟时间。
为避免反复达到 API 的使用限制并增加面向用户的操作的延迟时间,请考虑为批处理流程使用速率限制器(请参阅 Google 的 RateLimiter)。 借助速率限制器,您可以调整 API 请求的速率,以便始终保持在用量限制以下。
例如,启动一个批处理进程,默认速率限制为 50 QPS。只要 API 未返回错误,请缓慢提高速率限制(每分钟 1%)。每次达到配额时,请将请求速率降低 20%。这种自适应方法可实现更优的请求速率,同时缩短面向用户的操作的延迟时间。