Azure 函数实例和缩放

Posted

技术标签:

【中文标题】Azure 函数实例和缩放【英文标题】:Azure function instance and scaling 【发布时间】:2020-11-29 10:25:26 【问题描述】:

通过在其中包含单个 HTTP 触发函数的消费计划下创建 Azure 函数应用服务,我可以控制为传入请求提供服务的实例的 Azure 函数应用服务数量吗?如果是,如何控制应用服务实例?

如果不是,Azure 缩放或实例化逻辑背后的基本原理是什么?如果我有像 cosmos db 连接这样的单例静态资源,如何在 azure function app 服务实例之间共享它?以提高性能。

【问题讨论】:

【参考方案1】:

您无法确定 Azure Scale Controller 将如何在 Consumption 或 Premium 计划中横向扩展 HTTP 触发函数的其他实例。 Scale Controller 将对何时应提供函数的其他实例做出最佳猜测。

另外请注意,如果您从冷启动进入“Reddit 上的每个人现在都在请求我的函数”,Azure Scale Controller 将被限制为每秒最多添加一个 HTTP 触发函数的新实例。随着 HTTP 队列因突然涌入的流量而加深,我遇到了这个难题。

此外,当您的函数横向扩展时,您无法控制消费计划和高级计划中的新实例将添加到您所在区域内的哪个虚拟机。 Azure 函数中的单例变量仅由同一 VM 中的函数实例共享。相应地计划。解决此行为的唯一方法是将 Azure 函数托管在应用服务计划上。在这种情况下,您知道您的 Azure Function 将在相同的 N 个 VM 实例上运行,其中 N 是横向扩展的 Web 应用程序实例的数量。

【讨论】:

@RobReagan,不管App服务计划(或)消费计划,一个VM可以只托管一个Azure函数应用服务实例吗?如果是这样,为什么?因为我假设 Azure 函数应用服务作为容器部署在 VM 中,并且可以在同一 VM 上启动多个具有相同映像的容器。如果 VM 可以托管同一 Azure 函数应用服务的多个实例,那么 AZURE FUNCTION APP SERVICE 中的 Singleton 变量(而不是函数应用服务中的函数)是否可以在托管在同一 VM 中的实例之间共享? 应用服务计划可以托管多个 Azure 函数实例。它还可以最多支持多个 Azure Function。实际上,您可以在同一个应用服务计划上部署一个 Web 应用和 N 个不同的 Azure Functions。单个变量实例可以在同一 VM 上的 Azure 函数的多个实例之间共享。 @RobReagan,惊讶地听到“单个变量实例可以在同一 VM 上的 Azure 函数的多个实例之间共享”,并想知道在技术上如何实现这一点,因为我在假设中出于安全和各种其他原因,应用程序实例的对象可以在其应用程序域内访问,而不是在其外部访问。您能否向我推荐一些微软文档,以便在他们质疑我时将其推荐给我的上级。谢谢。 我从未在文档中看到过。但这里是微软首席软件工程经理 Chris Gillum 对类似问题的回答。 ***.com/questions/39387423/…。当需要扩展和重用 HttpClient 或 Sql 连接时,我自己也看到过这种行为。

以上是关于Azure 函数实例和缩放的主要内容,如果未能解决你的问题,请参考以下文章

Azure 云服务内置自动缩放如何工作?

Azure Pack 是不是支持使用 WASABi 自动缩放 Web 和辅助角色?

Azure Web App 未及时自动缩放

基于队列长度的 Azure 自动缩放

windows azure 自动缩放

为 Azure Web 角色定义缩放阈值