与Raising Google Drive API per-user limit does not prevent rate limit exceptions类似
在Drive API控制台中,配额如下所示:
尽管将每用户限制设置为不必要的高请求数/秒,但我仍然在用户级获得速率错误。
我在做什么:
我正在使用大约8个线程上传到云端硬盘,并且它们全部实现了分别为1,2,4,8,16,32,64秒后退的强大指数后退(非常过度的后退,但必要的imho)。在某些主题中,问题可能仍然持续存在。
是否有一些其他费率没有被广告/无法设定?
我没有接近请求/秒,仍然有99.53%的总配额。为什么我仍然收到userRateLimitExceeded错误?
答案 0 :(得分:2)
userRateLimitExceeded基本上是防洪。它用于防止人们向快速发送许多请求。
表示已超出用户速率限制。最高费率 每个IP地址限制为10 qps。 Google中设置的默认值 开发人员控制台每个IP地址1个qps。你可以增加这个 Google Developers Console中的限制最多为10 qps。
您需要通过实施Exponential Backoff来降低代码速度。
这个想法是,每当你看到错误,你等待几秒钟然后再尝试发送它。如果再次出现错误,请再等一会儿。
配额用户:
现在我不确定您的应用程序是如何工作的,但是,如果所有任务都来自同一个IP,这可能会导致您的问题。正如您在配额中看到的那样,每秒/每位用户可获得10个请求。 Google如何知道其用户?他们查看IP地址。如果您所有的reuqest来自同一个IP,那么它的一个用户就会被锁定为每秒10个请求。
您可以通过在请求中添加QuotaUser来解决此问题。
quotaUser - userIp的替代方案。 Link
- 即使在用户的IP地址未知的情况下,也允许您从服务器端应用程序强制执行每用户配额。这可能发生, 例如,对于在App Engine上运行cron作业的应用程序 用户代表。
- 您可以选择唯一标识用户的任意字符串,但最多只能包含40个字符。
- 如果提供了两者,则覆盖userIp。
- 了解有关限制使用的详情。
醇>
如果你在每个请求上发送一个不同的小名,比如一个随机数,那么谷歌认为它是一个不同的用户,并假设它在10秒内只有一个请求。在运行请求来自同一IP的所有内容的服务器应用程序时,这是解决ip限制的一个小技巧。