使用云功能时限制对第三方 API 的请求

Throttling requests to third-party APIs when using cloud functions

我们是 运行 Firebase Functions 上的节点后端,必须经常访问第三方 API (HubSpot),它的速率限制为 100 个请求/10 秒。

我们正在通过我们的云功能向 HubSpot 发出这些请求,并且经常发现我们在活动期间或其他网站使用高峰期间超出了 HubSpot 的速率限制。另外,由于都是更新HubSpot数据的写请求,所以这些请求不能乱序。

有没有办法限制我们对 HubSpot 的请求,以免超过他们的速率限制?对不一定涉及云功能的建议持开放态度,尽管这是首选。

注意:当我说 "throttle" 时,我的意思是对 HubSpot 的所有请求都需要通过。我正在尝试实现类似于 Lodash's throttle 方法所做的事情,如果这有意义的话。

Cloud Functions 无法进行速率限制。它将始终尝试在请求和事件到达时尽快为它们提供服务。但是你可以使用Cloud Tasks to create an task queue to spread out the load of some work over time using a configured rate limit. A task queue can target another HTTP function。这有效地使您的处理异步,但确实是 Google 云为您提供的唯一机制来平滑负载。

在这种情况下,我们通常做的是将数据存储到数据库中,然后使用每分钟运行一次的 cron 以缓和的方式(例如不超过其速率限制)将其传递给 HubSpot。对于我们成功传递给 HubSpot 的每个数据项,我们在数据库中将其标记为 "success"。