如何使用 google 云函数处理背压

How to handle backpressure using google cloud functions

使用 google 云函数,有没有办法像 AWS Lambda 那样管理执行并发性? (https://docs.aws.amazon.com/lambda/latest/dg/concurrent-executions.html)

我的意图是设计一个函数来使用任务文件并将这些任务发布到工作队列 (pub/sub)。我想要一个函数来使用工作队列 (pub/sub) 中的任务并执行任务。

以上可能导致大量几乎并发执行。我的 dowstream 消费者服务很慢,一次不能消费很多并发请求。很有可能,它会 return HTTP 429 响应来尝试减慢生产者的速度。

有没有办法像使用 AWS 那样限制给定 Google 云函数的并发性?

此功能 is not available for Google Cloud Functions. Instead, since you are asking to handle the pace at which the system will open concurrent tasks, Task Queues 是解决方案。

Push queues dispatch requests at a reliable, steady rate. They guarantee reliable task execution. Because you can control the rate at which tasks are sent from the queue, you can control the workers' scaling behavior and hence your costs.

在您的情况下,您可以控制调用下游消费者服务的速率。

您可以使用配额设置“每秒函数调用次数”。它记录在这里: https://cloud.google.com/functions/quotas#rate_limits

文档告诉您如何增加它,但您也可以减少它以实现您正在寻找的节流类型。

您可以通过控制触发器本身来控制触发云函数的速度。例如,如果您已将 "new file creation in a bucket" 设置为云函数的触发器,那么通过控制在该存储桶中创建的新文件数量,您可以管理并发执行。 尽管这样的解决方案并不完美,因为有时云功能会失败并自动重启(如果您以这种方式配置云功能)而您无法控制它。实际上,云函数的活动实例数有时会超出您的计划。 不过,AWS 提供的是一项巧妙的功能。

现在可以使用当前的 gcloud 测试版!您可以设置一次可以 运行 的最大值:

gcloud beta functions deploy FUNCTION_NAME --max-instances 10 FLAGS...

查看文档 https://cloud.google.com/functions/docs/max-instances