Azure Functions 可伸缩性问题
Azure Functions scalability issue
我在应用服务计划中使用 Azure Functions。我的理解是,对于每次新的执行,Azure Function 都会创建一个新的 App Service,执行该函数,然后关闭 App Service。由于多个请求而产生的多个应用服务之间不会共享任何内容。
然而,当我测试我的功能(这是一个视频处理功能)时,对于一个请求,它花费的时间大约是 2-3 分钟,但是对于多个同时请求,时间增加到 10-15 分钟。我的问题是我上面的理解是否正确?如果不是,那么这些应用服务之间共享什么资源?我应该如何决定缩放选项(手动还是自动)?
“我的理解是,对于每次新的执行,Azure 函数都会创建一个新的应用服务”不,它不会每次都 运行 新实例。一般来说,如果 AF 上没有负载,它会停止所有实例。
然后,如果第一个 request/event 进来,它将首先启动。这就是我们在 Serverless 中使用 ColdStart 的原因。之后,缩放控制器将测量您的实例性能内存和 CPU 消耗,并决定它是否需要缩放,但它不会是即时的。因此,如果假设您发送了 N 个请求来处理视频,它们可能会转到相同的第一个实例并增加负载。然后 AF 将扩展,因为 CPU 尖峰但它不会帮助处理旧请求,因为它们是在第一个实例中处理的。请记住,对于 non-HTTP 触发器,最多每 30 秒分配一次新实例,这意味着您的 AF 应该有 CPU 峰值至少 30 秒以添加新实例 https://docs.microsoft.com/en-us/azure/azure-functions/event-driven-scaling
我不确定 Azure Functions 是否适合视频处理。 Azure 函数应该用于快速处理,通常我会说不超过 30 秒。但是执行时间有一些限制取决于你如何 运行 它 https://docs.microsoft.com/en-us/azure/azure-functions/functions-premium-plan?tabs=portal
不确定你在做什么类型的视频处理,但我想看看 Azure 媒体服务
您提到的其他选项是低优先级的批处理作业https://azure.microsoft.com/en-au/blog/announcing-public-preview-of-azure-batch-low-priority-vms/它实际上是一个很好的用例:媒体处理和转码、渲染等
: if you're running your Function in an App Service (also known as a Dedicated Plan) 的一个小补充,默认情况下它只会在您定义的应用服务计划的可能性范围内扩展实例。这意味着您的 Function App 运行 的所有实例都在同一个虚拟机上。这很可能是您看到随着请求的增加请求时间增加的原因。
如果您希望 Functions 的扩展超出该计划的能力,您将需要手动扩展或为 App Service 计划启用自动扩展。
An App Service plan defines a set of compute resources for an app to run. These compute resources are analogous to the server farm in conventional hosting.
和
Using an App Service plan, you can manually scale out by adding more VM instances. You can also enable autoscale, though autoscale will be slower than the elastic scale of the Premium plan. [...] You can also scale up by choosing a different App Service plan.
如果您 运行 您的 Function App 在 Consumption Plan 上(true 无服务器托管计划选项,因为它可以缩放到零),
The Consumption plan scales automatically, even during periods of high load.
如果您需要比消费计划中可用的执行时间更长的执行时间,但应用服务计划似乎不是您的函数的最佳托管环境,还有 Premium Plan.
The Azure Functions Elastic Premium plan is a dynamic scale hosting option for function apps.
Premium plan hosting provides the following benefits to your functions:
- Avoid cold starts with perpetually warm instances
- Virtual network connectivity.
- Unlimited execution duration, with 60 minutes guaranteed.
- Premium instance sizes: one core, two core, and four core instances.
- More predictable pricing, compared with the Consumption plan.
- High-density app allocation for plans with multiple function apps.
有关所有不同 Azure Functions hosting options 的更多信息。
我在应用服务计划中使用 Azure Functions。我的理解是,对于每次新的执行,Azure Function 都会创建一个新的 App Service,执行该函数,然后关闭 App Service。由于多个请求而产生的多个应用服务之间不会共享任何内容。
然而,当我测试我的功能(这是一个视频处理功能)时,对于一个请求,它花费的时间大约是 2-3 分钟,但是对于多个同时请求,时间增加到 10-15 分钟。我的问题是我上面的理解是否正确?如果不是,那么这些应用服务之间共享什么资源?我应该如何决定缩放选项(手动还是自动)?
“我的理解是,对于每次新的执行,Azure 函数都会创建一个新的应用服务”不,它不会每次都 运行 新实例。一般来说,如果 AF 上没有负载,它会停止所有实例。
然后,如果第一个 request/event 进来,它将首先启动。这就是我们在 Serverless 中使用 ColdStart 的原因。之后,缩放控制器将测量您的实例性能内存和 CPU 消耗,并决定它是否需要缩放,但它不会是即时的。因此,如果假设您发送了 N 个请求来处理视频,它们可能会转到相同的第一个实例并增加负载。然后 AF 将扩展,因为 CPU 尖峰但它不会帮助处理旧请求,因为它们是在第一个实例中处理的。请记住,对于 non-HTTP 触发器,最多每 30 秒分配一次新实例,这意味着您的 AF 应该有 CPU 峰值至少 30 秒以添加新实例 https://docs.microsoft.com/en-us/azure/azure-functions/event-driven-scaling
我不确定 Azure Functions 是否适合视频处理。 Azure 函数应该用于快速处理,通常我会说不超过 30 秒。但是执行时间有一些限制取决于你如何 运行 它 https://docs.microsoft.com/en-us/azure/azure-functions/functions-premium-plan?tabs=portal
不确定你在做什么类型的视频处理,但我想看看 Azure 媒体服务
您提到的其他选项是低优先级的批处理作业https://azure.microsoft.com/en-au/blog/announcing-public-preview-of-azure-batch-low-priority-vms/它实际上是一个很好的用例:媒体处理和转码、渲染等
如果您希望 Functions 的扩展超出该计划的能力,您将需要手动扩展或为 App Service 计划启用自动扩展。
An App Service plan defines a set of compute resources for an app to run. These compute resources are analogous to the server farm in conventional hosting.
和
Using an App Service plan, you can manually scale out by adding more VM instances. You can also enable autoscale, though autoscale will be slower than the elastic scale of the Premium plan. [...] You can also scale up by choosing a different App Service plan.
如果您 运行 您的 Function App 在 Consumption Plan 上(true 无服务器托管计划选项,因为它可以缩放到零),
The Consumption plan scales automatically, even during periods of high load.
如果您需要比消费计划中可用的执行时间更长的执行时间,但应用服务计划似乎不是您的函数的最佳托管环境,还有 Premium Plan.
The Azure Functions Elastic Premium plan is a dynamic scale hosting option for function apps.
Premium plan hosting provides the following benefits to your functions:
- Avoid cold starts with perpetually warm instances
- Virtual network connectivity.
- Unlimited execution duration, with 60 minutes guaranteed.
- Premium instance sizes: one core, two core, and four core instances.
- More predictable pricing, compared with the Consumption plan.
- High-density app allocation for plans with multiple function apps.
有关所有不同 Azure Functions hosting options 的更多信息。