【问题标题】:Google Drive API request fail if more than 10 request are done within a second如果在一秒钟内完成超过 10 个请求,Google Drive API 请求将失败
【发布时间】:2021-06-19 00:52:49
【问题描述】:

我是一个应用程序的开发人员,在该应用程序中,用户请求会导致对 Google Drive API 的调用。 针对 Google Drive API 的所有请求都是使用来自服务器数组/副本的 Java API 在服务器端完成的。我们目前正在运行大约五台服务器。

我们现在看到,有时来自用户的请求在某种程度上达到了峰值,因此针对 Google Drive API 的并发请求超过了 10 个。这使得一些请求失败并显示消息:

超出用户速率限制。用户请求率超过配置的项目配额。您可以考虑重新评估 API 的预期每用户流量,并相应地调整项目配额限制。您可以在 API 控制台中监控总配额使用情况并调整限制:https://console.developers.google.com/apis/api/drive.googleapis.com/quotas?project=xxxxxxxxx

我创建了一个单元测试,在其中我同时启动 11 个线程来执行对 Google Drive 文件的获取请求。始终有一个请求失败,而其他 10 个请求成功。 对于单元测试和生产代码,我将 quotaUser 参数设置为唯一值。

Google Analytics API 具有每秒最大请求数的配额,如下所述: https://developers.google.com/analytics/devguides/reporting/mcf/v3/limits-quotas

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

我无法找到与 Google Drive API 相同的“10 次请求/秒”配额的文档,因此我不希望它存在。

限制功能对我来说真的不是一个选项,因为我将来可能会有超过 10 个服务器副本,因此将无法阻止超过 10 个同时请求。

总的来说,我离一般项目配额请求限制配置还差得很远。

为什么会得到这个 10 请求/秒的配额限制?

【问题讨论】:

    标签: google-api google-drive-api


    【解决方案1】:

    Drive 对 Drive 使用令牌/桶速率限制。见https://cloud.google.com/solutions/rate-limiting-strategies-techniques

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

    如果您的问题不是吞吐量,而是并发,那么可能值得为每个服务器创建多个凭据,看看是否能绕过并发问题。注意我还没有测试过这个,所以如果你尝试的话,请分享结果。下一级分片将是创建多个应用程序,每个应用程序共享对您的云端硬盘语料库的访问权限。

    另一种方法是更改​​您的服务器架构(是的 - 我知道这很糟糕),以便通过 2-10 个代理服务器代理 Drive API 调用,以确保并发低于 10。

    【讨论】:

      【解决方案2】:

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

      403_error_user_rate_limit_exceeded 是一个非常通用的错误消息,表示您正在淹没服务器并且需要放慢速度。 Google api 并不意味着以这种方式由同一项目进行多线程处理。

      您应该考虑研究一些处理此错误消息的推荐方法。

      修复此错误:

      • 在开发者控制台项目中提高每用户配额。如需更多信息,请参阅Request additional quota
      • 如果一个用户代表 Google Workspace 域的多个用户发出大量请求,请考虑使用具有权限委派的服务帐号(设置 quotaUser parameter)。
      • 使用exponential backoff 重试请求。

      我有一篇文章是我不久前写的,它解释了我如何尝试使用防洪措施。 Flood buster 可能会有帮助。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-28
        • 2014-11-02
        • 1970-01-01
        • 1970-01-01
        • 2018-02-26
        • 1970-01-01
        相关资源
        最近更新 更多