了解 Gmail api 配额

Understanding Gmail api quotas

我已阅读此处的 gmail api 配额说明 (https://developers.google.com/gmail/api/v1/reference/quota),但仍然无法理解导致我们超出限制的原因。

问题一: 每个用户配额中的用户是什么?我不确定该用户是个人 gmail 用户,还是使用 gmail api.

的服务客户端

问题二: 我们已经多次看到以下错误,但没有看到我们遇到了任何明显的限制。

"error": {
 "errors": [
  {
   "domain": "usageLimits",
   "reason": "rateLimitExceeded",
   "message": "Rate Limit Exceeded"
  }
 ],
 "code": 429,
 "message": "Rate Limit Exceeded"
}

我们不到 250 units/s 和 25,000 units/100s。我们仅使用 history.list 和 message.get 调用,不发送或修改。
我还缺少其他配额吗?

  1. 用户配额取决于您正在访问的帐户。所以它将是 GMail 帐户。有时您可以通过发送随机 quotaUser 来欺骗它,但这并不总是有效 Google 我怀疑还使用您的 IP 地址来跟踪配额。

  2. 用户限速是防洪你要快。

Per User Rate Limit 250 quota units per user per second, moving average (allows short bursts)

Exceeding a rate limit will cause an HTTP 403 or HTTP 429 Too Many Requests response and your app should respond by retrying with exponential backoff.

Googles 计算并不完美,您可能发送更多或更少,但仍达到此配额。只需实施指数退避。

指数退避

实现简单指数退避的流程如下:

  1. 向API提出请求。
  2. 收到 HTTP 403 限速响应,表明您应该重试该请求。
  3. 等待 1 + random_number_milliseconds 秒,然后重试请求。
  4. 收到 HTTP 403 限速响应,表明您应该重试该请求。
  5. 等待 2 + random_number_milliseconds 秒,然后重试请求。
  6. 收到 HTTP 403 限速响应,表明您应该重试该请求。
  7. 等待 4 + random_number_milliseconds 秒,然后重试请求。
  8. 收到 HTTP 403 限速响应,表明您应该重试该请求。
  9. 等待 8 + random_number_milliseconds 秒,然后重试请求。
  10. 收到 HTTP 403 限速响应,表明您应该重试该请求。
  11. 等待 16 + random_number_milliseconds 秒,然后重试请求。
  12. 停止。报告或记录错误。

关于你的问题 1

以下是您的 Gmail 中不同配额的含义

  • QPD(每天配额) - 意思是客户端 ID 在 24 小时内能够对 API

  • QPS(quota per second) - 表示应用程序每秒的全局配额,表示应用程序每秒可以调用多少次

  • 每个用户每秒的配额 - 表示应用程序可以进行的用户查询数。

第 2 题

好吧,如果您在开发人员控制台中检查 Gmail 的配额,Gmail 的默认配额为:

那么我可以建议您使用以下技巧来有效地使用您的配额:

  • Push notification - 它提高了应用程序的性能。它允许您消除轮询资源以确定它们是否已更改所涉及的额外网络和计算成本。每当邮箱发生变化时,Gmail API 都会通知您的后端服务器应用程序。

  • 使用 synchronization 检索和存储您的目的所需的尽可能多的最新消息或线程。

  • Batching Requests - 减少客户端必须建立的 HTTP 连接数。

如果您发现您已达到此限制并且需要更多,那么您可以申请更多配额here