如何测试 Azure 函数的可扩展性?

How to test Azure Function Scalability?

由于我们是 Azure Function App 的新手,我们听说它的一项重要功能是 可扩展性,但是 azure 函数扩展是如何实现的?它是在后面自动缩放还是我们可以设置任何机制?例如,最大比例大小限制。

当我们在本地调试 azure 函数时(我们尝试了 ServiceBusTrigger、EventHubTrigger、QueueTrigger 和 CosmosDBTrigger),似乎 每次都是同一个函数实例在我们继续发送消息的同时被多次调用,这并没有像我们预期的那样scaling/working并行工作,有没有什么好的方法可以在本地调试可扩展性?

azure function的可扩展性取决于hosting plan,有3种托管计划:消费计划,高级计划(它在预览中,所以我们现在可以忽略它),专用计划(应用服务计划)。

对于 Consumption plan,它会根据传入事件的数量自动缩放。

对于app service plan, you can manually scale out by adding more VM instances, or you can also enable autoscale. More details you can refer to this article

当您在没有托管计划的情况下在本地 运行 时,您看不到这种行为。

希望对您有所帮助。

Azure Functions 的缩放由 Scale Controller:

决定

缩放控制器仅在云端运行,因此无法在本地测试缩放。此外,该控制器的内部工作原理并未公开。

测试扩展的最佳方法是实际在云中进行概念验证并确保您 configure Application Insights。对函数应用进行负载测试后,您可以执行 Log Analytics 查询,例如以下查询,以查看是否已预配函数应用的多个实例:

requests | 
project timestamp, id, operation_Id, operation_Name, duration, cloud_RoleName, cloud_RoleInstance | 
where cloud_RoleName =~ 'FUNCTION_APP_NAME' | 
order by timestamp desc | 
take 100

cloud_RoleInstance 属性 具有已配置资源的 ID。当该列包含多个值时,您就知道发生了缩放。

老实说,测试 Azure Functions 是否自动缩放不应该是您的主要关注点,因为这是 Azure 的责任。您可能需要自动缩放来处理小型和大型工作负载,并且您可能有时间限制来完成处理。如果那是您真正关心的问题,那么您最好测量端到端 performance/timings.