提高了Google Drive API每用户限制,仍然会收到userRateLimitExceeded错误

时间:2015-04-29 22:27:13

标签: 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秒后退的强大指数后退(非常过度的后退,但必要的imho)。在某些主题中,问题可能仍然持续存在。

是否有一些其他费率没有被广告/无法设定?

我没有接近请求/秒,仍然有99.53%的总配额。为什么我仍然收到userRateLimitExceeded错误?

1 个答案:

答案 0 :(得分:2)

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

  

表示已超出用户速率限制。最高费率   每个IP地址限制为10 qps。 Google中设置的默认值   开发人员控制台每个IP地址1个qps。你可以增加这个   Google Developers Console中的限制最多为10 qps。

您需要通过实施Exponential Backoff来降低代码速度。

  1. 向API提出请求
  2. 收到具有可重试错误代码的错误响应
  3. 等待1s + random_number_milliseconds秒
  4. 重试请求
  5. 收到具有可重试错误代码的错误响应
  6. 等待2s + random_number_milliseconds秒
  7. 重试请求
  8. 收到具有可重试错误代码的错误响应
  9. 等待4s + random_number_milliseconds秒
  10. 重试请求
  11. 收到具有可重试错误代码的错误响应
  12. 等待8s + random_number_milliseconds秒
  13. 重试请求
  14. 收到具有可重试错误代码的错误响应
  15. 等待16s + random_number_milliseconds秒
  16. 重试请求
  17. 如果仍然出现错误,请停止并记录错误。
  18. 这个想法是,每当你看到错误,你等待几秒钟然后再尝试发送它。如果再次出现错误,请再等一会儿。

    配额用户:

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

    您可以通过在请求中添加QuotaUser来解决此问题。

      

    quotaUser - userIp的替代方案。 Link

         
        
    1. 即使在用户的IP地址未知的情况下,也允许您从服务器端应用程序强制执行每用户配额。这可能发生,   例如,对于在App Engine上运行cron作业的应用程序   用户代表。
    2.   
    3. 您可以选择唯一标识用户的任意字符串,但最多只能包含40个字符。
    4.   
    5. 如果提供了两者,则覆盖userIp。
    6.   
    7. 了解有关限制使用的详情。
    8.   

    如果你在每个请求上发送一个不同的小名,比如一个随机数,那么谷歌认为它是一个不同的用户,并假设它在10秒内只有一个请求。在运行请求来自同一IP的所有内容的服务器应用程序时,这是解决ip限制的一个小技巧。