google-api - 提高了 Google Drive API 每用户限制,但仍然收到 userRateLimitExceeded 错误

标签 google-api google-drive-api quota

类似于Raising Google Drive API per-user limit does not prevent rate limit exceptions

在 Drive API 控制台中,配额如下所示:

enter image description here

尽管将每用户限制设置为不必要的高请求/秒,但我仍然在用户级别收到速率错误。

我在做什么:

我使用大约 8 个线程上传到云端硬盘,它们都分别实现了 1、2、4、8、16、32、64 秒的稳健指数回退(回退相当多,但恕我直言,这是必要的)。在某些线程的所有退避过程中,该问题仍然仍然存在。

是否还有其他未公布/无法设置的费率?

我远未达到每秒请求数,但总配额仍为 99.53%。为什么我仍然收到 userRateLimitExceeded 错误?

最佳答案

userRateLimitExceeded基本上就是防洪。它用于防止人们快速发送许多请求。

Indicates that the user rate limit has been exceeded. The maximum rate limit is 10 qps per IP address. The default value set in Google Developers Console is 1 qps per IP address. You can increase this limit in the Google Developers Console to a maximum of 10 qps.

您需要通过实现 Exponential Backoff 来减慢代码速度.

  1. 向 API 发出请求
  2. 收到包含可重试错误代码的错误响应
  3. 等待 1 秒 + random_number_milliseconds 秒
  4. 重试请求
  5. 收到包含可重试错误代码的错误响应
  6. 等待 2 秒 + random_number_milliseconds 秒
  7. 重试请求
  8. 收到包含可重试错误代码的错误响应
  9. 等待 4 秒 + random_number_milliseconds 秒
  10. 重试请求
  11. 收到包含可重试错误代码的错误响应
  12. 等待 8 秒 + random_number_milliseconds 秒
  13. 重试请求
  14. 收到包含可重试错误代码的错误响应
  15. 等待 16 秒 + random_number_milliseconds 秒
  16. 重试请求
  17. 如果仍然出现错误,请停止并记录错误。

这个想法是,每次看到该错误时,您都会等待几秒钟,然后尝试再次发送。如果再次出现错误,则需要等待一段时间。

配额用户:

现在我不确定您的应用程序如何工作,但是,如果所有任务都来自同一 IP,这可能会导致您的问题。正如您从配额中看到的,每个用户每秒收到 10 个请求。 Google 如何知道它是用户?他们查看 IP 地址。如果您的所有请求都来自同一 IP,则其为一个用户,您将被锁定为每秒 10 个请求。

您可以通过将 QuotaUser 添加到您的请求来解决此问题。

quotaUser - Alternative to userIp. Link

  1. Lets you enforce per-user quotas from a server-side application even in cases when the user's IP address is unknown. This can occur, for example, with applications that run cron jobs on App Engine on a user's behalf.
  2. You can choose any arbitrary string that uniquely identifies a user, but it is limited to 40 characters.
  3. Overrides userIp if both are provided.
  4. Learn more about capping usage.

如果您对每个请求发送不同的配额用户(例如一个随机数),那么 Google 会认为它是一个不同的用户,并会假设它在 10 秒内只有一个请求。当运行从同一 IP 请求所有内容的服务器应用程序时,这是绕过 IP 限制的一个小技巧。

关于google-api - 提高了 Google Drive API 每用户限制,但仍然收到 userRateLimitExceeded 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29955680/

相关文章:

linux - 如何将用户配额设置为零?

google-api - Google日历-访问权限

python - 为什么此 mime 类型被视为对创建 Google 文档无效?

javascript - 跨域请求被阻止,origin 'null' 无法访问

python - 如何在没有网络浏览器的情况下使用 google drive API

android - 如何使用 android auto backup 以编程方式恢复和备份

google-cloud-platform - 增加谷歌云虚拟机的配额

android - Google Developers Console 项目创建配额

Java:如何将 com.google.api.services.drive.model.File 转换为 InputStream?

javascript - 返回了 Google 距离矩阵 ZERO_RESULTS