Google api 如果在一秒钟内完成10个以上的请求,Google Drive API请求将失败

Google api 如果在一秒钟内完成10个以上的请求,Google Drive API请求将失败,google-api,google-drive-api,Google Api,Google Drive Api,我是一个应用程序的开发者,在这个应用程序中,用户请求会导致对GoogleDrive API的调用。 所有针对Google Drive API的请求都是通过服务器端使用Java API从服务器阵列/副本完成的。我们目前运行大约五台服务器 我们现在看到,有时来自用户的请求在某种程度上达到了峰值,因此针对GoogleDrive API同时完成了10多个请求。这会导致某些请求失败,并显示以下消息: 超出了用户速率限制。用户请求的速率超过配置的项目配额。您可以考虑重新评估API的预期每个用户流量,并相应地

我是一个应用程序的开发者,在这个应用程序中,用户请求会导致对GoogleDrive API的调用。 所有针对Google Drive API的请求都是通过服务器端使用Java API从服务器阵列/副本完成的。我们目前运行大约五台服务器

我们现在看到,有时来自用户的请求在某种程度上达到了峰值,因此针对GoogleDrive API同时完成了10多个请求。这会导致某些请求失败,并显示以下消息:

超出了用户速率限制。用户请求的速率超过配置的项目配额。您可以考虑重新评估API的预期每个用户流量,并相应地调整项目配额限制。您可以在API控制台中监视聚合配额使用情况并调整限制:

我已经创建了一个单元测试,在这里我同时启动11个线程,对Google驱动器文件执行get请求。始终有一个请求失败,而其他10个请求成功。 对于单元测试和生产代码,我都将quotaUser参数设置为唯一值

Google Analytics API具有每秒最大请求数的配额,如下所述:

每个IP地址每秒10次查询(QPS)

我还没有找到与Google Drive API相同的“10请求/秒”配额的文档,所以我不希望它存在

节流功能对我来说确实不是一个选项,因为我将来可能会有10个以上的服务器副本,因此无法阻止10个以上的同时请求

一般来说,我无法接近一般项目配额请求限制配置


为什么要接受10个请求/秒的配额限制?

用户速率限制是所有谷歌API的标准。它也可能会在没有警告或通知的情况下更改。仅仅因为它没有在google drive下记录,并不意味着它不存在。如果你得到了错误,那么它确实存在

这是一条非常通用的错误消息,表示您正在淹没服务器,需要降低速度。谷歌API不应该以这种方式被同一个项目多线程化

<>你应该考虑一下处理错误消息的一些推荐方法。

要修复此错误,请执行以下操作:

  • 提高开发人员控制台项目中的每用户配额。有关详细信息,请参阅
  • 如果一个用户代表谷歌工作区域的许多用户提出很多请求,请考虑具有权限委托(设置)的服务帐户。
  • 用于重试请求
我前阵子写了一篇文章,解释了我是如何尝试防洪工作的。这可能会有帮助


无论哪种方式,添加配额用户和运行更少的线程都会有所帮助。

驱动器对驱动器使用令牌/存储桶速率限制。看

根据我的经验,最初的桶大小是25ish,补充速度大约是每秒1次。因此,为了获得最大吞吐量,您需要根据收到的403个错误自适应地限制请求,但在前25个错误之后,将目标设定为每秒1个将或多或少是最佳的

如果您的问题不是吞吐量,而是并发性,那么为每台服务器创建多个凭据可能是值得的,看看这是否会绕过并发性问题。注意:我还没有测试过这个,所以如果你尝试的话,请分享结果。切分的下一个层次是创建多个应用程序,每个应用程序共享对驱动器主体的访问

另一种方法是更改服务器体系结构(是的,我知道这很糟糕),以便通过2-10个代理服务器代理驱动API调用,以确保并发性低于10