我已经使用Visual Studio作为库项目创建了Azure函数,有一个包含12个函数的项目 例如
到目前为止,我的函数托管在专用的AppService计划中,其中一个函数(EventHub侦听器)每天处理数百万条消息,因此它始终占用90%以上的CPU。
因此,我们正计划为该单一功能扩展或分离App Service计划。我看到以下可能的解决方案
将专用应用程序服务工厂更改为消费。 (不确定价格影响或SLA)。
创建一个新项目,在该项目中移动单个功能,然后在单独的应用程序服务计划中部署该功能。 (所需的代码和CI / CD管道更改。)
在2 AppService计划中部署相同功能的dll,并根据规模删除功能。 (不确定是否可以使用Azure DevOps做到这一点。)
如果客户不同意消费计划,想知道更好的方法。
答案 0 :(得分:2)
更好的方法是-将此功能隔离到单个Azure Function应用中,然后可以独立扩展。
答案 1 :(得分:2)
与消费计划相比,专用计划的优势在于可预测性。与在专用计划上运行相同的工作负载相比,在消耗计划上运行工作负载通常会更快,更便宜,但是使用专用计划确实可以防止意外的使用高峰导致成本的意外高峰,并且还可以防止冷启动问题。 / p>
如果切换到使用模式(选项1),则需要为单个功能执行付费,因此从该角度来看,无论运行一个或两个功能应用程序都没有区别。您应该根据功能的独立性来决定如何拆分功能。如果只将它们作为一个单元进行部署,则请坚持使用一个功能应用程序,但是如果您想单独更新侦听器,请将其放在单独的项目中。
如果您将两个应用程序划分为运行在单独的专用服务计划上,则创建新项目(选项2)无疑是最干净的方法。但是,将相同的项目部署到两个应用程序(选项3)在技术上是可行的-您只需要使用应用程序设置禁用不应在每个应用程序上运行的功能。创建名为AzureWebJobs.MyFunction.Disabled
且值为true
的设置(请参见https://docs.microsoft.com/en-gb/azure/azure-functions/disable-function#functions-2x---all-languages)。