【问题标题】:Scale Azure function independently (single Function)独立扩展 Azure 函数(单函数)
【发布时间】:2018-12-20 13:03:54
【问题描述】:

我使用 Visual Studio 作为库项目创建了 Azure 函数,有一个包含 12 个函数的项目 例如

截至目前,我的函数托管在专用 AppService 计划中,其中一个函数(EventHub 侦听器)每天处理数百万条消息,因此它一直使用 90% 以上的 CPU。

因此,我们计划为该单一功能扩展或分离应用服务计划。我看到以下可能的解决方案

  1. 将专用应用服务工厂更改为消费。 (不确定定价影响或 SLA)。

  2. 创建一个新项目,在该项目中移动单个函数并将该函数部署到单独的应用服务计划中。 (所需的代码和 CI/CD 管道更改。)

  3. 在 2 个 AppService 计划中部署相同的函数 dll,并根据规模删除函数。 (不确定这是否可以通过 Azure DevOps 实现)。

想知道更好的方法,如果客户不同意消费计划。

【问题讨论】:

    标签: azure azure-devops azure-functions


    【解决方案1】:

    与消费计划相比,专用计划的优势在于可预测性。在消费计划上运行工作负载通常比在专用计划上运行相同的工作负载更快、更便宜,但使用专用计划确实可以防止意外的使用高峰导致成本意外高峰,还可以防止冷启动问题。

    如果您切换到消费模型(选项 1),您需要为单个函数的执行付费,因此无论您运行一个还是两个函数应用,从这个角度来看都没有区别。您应该根据功能的独立程度来决定如何拆分功能。如果您只将它们部署为一个单元,则坚持使用一个函数应用,但如果您可能想单独更新侦听器,请将其放在单独的项目中。

    如果您拆分为两个在不同的专用服务计划上运行的应用程序,那么创建一个新项目(选项 2)无疑是最简洁的方法。但是,将同一个项目部署到两个应用程序(选项 3)在技术上是可行的 - 您只需使用应用程序设置禁用不应在每个应用程序上运行的功能。创建名为AzureWebJobs.MyFunction.Disabled 的设置,其值为true(请参阅https://docs.microsoft.com/en-gb/azure/azure-functions/disable-function#functions-2x---all-languages)。

    【讨论】:

    • 感谢@MarkXA,我的一个函数从 eventthub 读取遥测数据 24*7,其他函数根据您的输入接收数据。我不确定冷启动问题来自功能方面还是功能应用方面。你说什么??
    • 冷启动是一个函数应用程序的事情 - 它发生在消费计划决定它需要启动一个新实例时。
    【解决方案2】:
    1. 帮不了你,它会扩展函数应用中的所有函数
    2. 会起作用的
    3. 与版本相同,只是有 2 个应用服务计划,而不是一个。

    更好的方法是 - 将此函数隔离到单个 Azure Function App 中,然后您可以独立扩展它。

    【讨论】:

    • 基于您的“更好的方法” - 另一种可能性是创建一个 docker 容器,而无需隔离和使用编排来扩展。虽然这只是理论上的。从未将它与 Azure 函数一起使用,但可以工作
    猜你喜欢
    • 1970-01-01
    • 2015-02-22
    • 2018-01-27
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多