管理配额

Google 日历 API 有配额,以确保所有用户都能公平使用。 使用日历 API 时,需要考虑以下三个重要限制:

  • API 用量配额 是按项目和用户强制执行的。如需了解详情,请参阅下一部分。
  • 常规日历用量限制:避免 超出日历使用限制
  • 操作限制: 您随时可能会受到速率限制。例如,如果您尝试快速连续写入单个日历。

日历 API 用量配额类型

系统会强制执行以下两种类型的配额:

  • 每分钟每个项目: 这是您的 Google Cloud 项目发出的请求数。
  • 每分钟每个项目每位用户: 这是您的云项目中的任何一位特定用户发出的请求数。此限制旨在帮助您确保用户之间的用量公平分配。

配额是使用滑动窗口按分钟计算的,因此,如果在一分钟内流量快速突增并超出每分钟配额,则在下一个窗口期间会受到速率限制,以确保平均用量保持在配额范围内。

如果超出任一配额,您将受到速率限制,并且查询会收到 403 usageLimits状态代码429 usageLimits状态代码 。如果发生这种情况,您可以执行以下操作:

  1. 确保遵循所有最佳实践: 使用指数退避算法随机化流量模式使用推送通知
  2. 如果您的项目不断增长且用户数量增加,您可以申请增加每个项目的配额。
  3. 如果达到每位用户的配额限制,您可以执行以下操作:
    • 如果您使用服务账号, 请将负载分配给用户 或在多个服务账号之间拆分负载。
    • 虽然您可以申请增加每位用户的配额,但一般不建议将其增加到高于默认值,因为您的应用可能会开始达到其他类型的限制,例如 常规日历用量限制或操作限制。

申请增加配额

如需查看或更改项目的用量限制,或申请增加配额,请按以下步骤操作:

  1. 如果您的项目还没有结算账号,请创建一个。
  2. 在 API 控制台中访问 API 库中的“已启用的 API”页面,然后从列表中选择一个 API。
  3. 如需查看和更改配额相关设置,请选择配额。如需查看 用量统计信息,请选择使用量

使用指数退避算法

如果我们希望您降低请求速率,将返回 403 “usageLimits”响应或 429 响应(请参阅 完整的错误文档)。 这不是致命错误,我们希望您在短暂间隔后重试请求。如果请求仍然过快到达,我们会再次要求您降低请求速率,依此类推。为了确保此操作正常运行,重要的是请求之间的延迟时间应随着时间的推移而增加。

通常,您应使用截断指数退避算法Cloud Storage 文档 对这种算法的工作原理和首选算法进行了很好的说明。如果您使用的是 Google 客户端库,系统通常会为您处理此问题;请参阅库文档。通常,您应使用库实现,而不是自行编写。

随机化流量模式

日历客户端容易出现流量高峰模式,这是因为多个客户端同时执行操作。例如,日历客户端的一个常见不良做法是在午夜执行完全同步。这几乎肯定会导致超出每分钟配额,并导致速率限制和退避。

为避免这种情况,请尽可能确保流量全天分布。如果您的客户端需要执行每日同步,请让客户端确定随机时间(每个客户端的时间不同)。如果您需要定期执行操作,请将间隔时间更改为 +/- 25%。这样可以更均匀地分配流量,并提供更好的用户体验。

使用推送通知

一个常见的用例是,每当用户的日历发生变化时,都希望执行操作。这里的一种反模式是反复轮询每个感兴趣的日历。这会很快用完所有配额 - 例如,如果您的应用有 5,000 个用户,并且每分钟轮询每个用户的日历一次,那么即使在完成任何工作之前,也至少需要每分钟 5,000 个配额。

服务器端应用可以注册推送通知,以便在发生感兴趣的事件时通知您。这些通知需要更多设置工作,但可以大幅提高配额的使用效率,并提供更好的用户体验。请务必指定您希望收到通知的 eventType。如需了解详情,请参阅 推送通知

使用服务账号进行适当的结算

如果您的应用使用 全网域授权执行请求, 默认情况下,系统会针对“每分钟每个 项目每位用户”配额向服务账号收费,而不是向您模拟的用户收费。这意味着,即使服务账号可能正在处理多个用户的日历,也可能会用完配额并受到速率限制。您可以使用 quotaUser 网址参数(或 x-goog-quota-user HTTP 标头)来指明将向哪个用户收费,从而避免这种情况。这仅用于配额计算。如需了解详情,请参阅 Cloud 文档中的 限制每位用户的请求数

测试配额限制处理

为确保您的应用能够在实际操作中妥善处理达到配额限制的情况(例如,通过使用指数退避算法进行重试),并尽可能减少对用户的潜在干扰,我们强烈建议您在真实环境中测试此场景。

为了确保此类测试不会干扰您的实际应用使用情况,我们 建议您在 Google API 控制台中注册一个仅用于测试的单独项目,并以与生产项目类似的方式 对其进行配置然后,您可以为此项目设置人为的低配额,并观察应用的行为。

价格

所有 Google 日历 API 的使用均免费。超出配额 请求限制不会产生额外费用,也不会向您的账号收费。