来自 pub/sub 个主题的速率限制 GCP Cloud Function 触发器

Rate limit GCP Cloud Function triggers from pub/sub topic

我有一个从 Pub/Sub 主题触发的云函数。

我想限制我的 Cloud Functions 的速率,所以我将最大实例设置为 5。在我的例子中,生成的消息比 Cloud Functions 多得多(我想限制 运行 云函数)。

我希望这个过程表现得像 Kafka/queue - 主题消息将被累积,Cloud Function 将慢慢消耗消息,直到主题为空。

但似乎所有未触发云功能 (ack) 的消息都只是发送了一个 UNACK - 并留下了。我的订阅详情:

ack deadline 最大值对我来说太低(由于速率限制,Cloud Function 可能需要几个小时才能收到消息)。

我可以在 Pub/Sub 中更改什么以满足我的需要?或者我需要添加一个队列? (Pub/Sub 发送到任务队列,而 Cloud Function 会消耗任务队列?)。

顺便说一句,pub/sub 数据实际上是 GCS 事件。 如果这是 AWS,我会简单地将 S3 文件创建的事件发送到 SQS,并让 Lambda 在队列的另一端使用。

如有任何帮助,我们将不胜感激。

你无法与 kafka 相提并论,因为你的 kafka 消费者在方便时拉取消息,而 Cloud Function (CF) 创建一个推送订阅,将消息推送到你的 CF。 所以一些替代方案:

  1. 创建一个由云调度程序触发的 HTTP CF,它将从您的 PULL 订阅中提取消息。 unack 消息的最长保留时间为 7 天(希望足够)
  2. 使用云来增加最大并发(最大并发请求),并适当调整 CPU 和 RAM。当然,您可以控制最大云 运行 实例数(不同于最大并发数)。并使用 PUSH 订阅推送到云端 运行。但在这里你也将被限制在 10 分钟内确认截止日期。

理想的解决方案是简单地更改重试策略。 当使用“在指数退避延迟后重试”时,Pub/Sub 将在最大指数延迟(600 秒)后继续重试。 这样,你可以在 Pub/Sub 中有很多消息,并通过一些云函数慢慢处理它们 - 这符合我们限速的需要。

基本上,一切都是一样的,只是这个配置改变了,结果是:

这正是我要找的:)