如何使用谷歌云功能处理背压

时间:2018-02-06 15:44:01

标签: concurrency google-cloud-platform google-cloud-functions backpressure

使用谷歌云功能,有没有办法按照AWS Lambda的方式管理执行并发? (https://docs.aws.amazon.com/lambda/latest/dg/concurrent-executions.html

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

以上可能会导致大量的几乎并发执行。我的下游消费者服务很慢,并且一次不能消耗许多并发请求。在所有可能的情况下,它会返回HTTP 429响应以试图减慢生产者的速度。

有没有办法限制给定Google Cloud功能的并发性,使其可以使用AWS来实现?

4 个答案:

答案 0 :(得分:3)

此功能is not available适用于Google Cloud Functions。相反,由于您要求处理系统打开并发任务的速度,Task Queues是解决方案。

  

以可靠,稳定的速度推送队列调度请求。它们保证可靠的任务执行。因为您可以控制从队列发送任务的速率,所以您可以控制工作人员。缩放行为,从而降低成本。

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

答案 1 :(得分:0)

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

文档介绍了如何增加它,但也可以减少它以实现所需的节流效果。

答案 2 :(得分:0)

您可以通过控制触发器本身来控制触发云功能的速度。例如,如果您将“在存储桶中创建新文件”设置为云功能的触发器,那么通过控制在该存储桶中创建了多少个新文件,您可以管理并发执行。 这样的解决方案并不是完美的,因为有时云功能会失败并自动重新启动(如果您已经以这种方式配置了云功能)而又无法对其进行任何控制。实际上,云功能的活动实例数有时会超出您的计划。 AWS所提供的功能却很完善。

答案 3 :(得分:0)

当前gcloud beta版现在可以实现!您可以设置可以一次运行的最大值:

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

请参阅文档https://cloud.google.com/functions/docs/max-instances