为什么我的Azure功能不能扩展?

时间:2017-11-08 18:58:30

标签: powershell azure-functions

对于测试,我创建了一个新的功能应用程序。我添加了两个函数,一个是http触发器,在调用时,将500条消息推送到队列中。另一个是队列触发器来读取消息。队列触发器功能代码被设置为读取消息并从1到30秒随机休眠。这是为了模拟更长时间运行的任务。

我调用了http触发器来创建消息,然后观察了que填充(消息由另一个触发器处理)。我还将应用程序见解连接到此功能应用程序,但我没有看到超过1台服务器的规模。

Azure功能是否会在que中的#消息中扩展soley?

另外,我在Powershell中实现了这些功能。

2 个答案:

答案 0 :(得分:7)

如果您在Azure功能消费计划中运行,我们会监控队列的长度和吞吐量,以确定是否需要其他VM资源。

请注意,单个功能应用实例可以同时处理多个队列消息,而无需跨多个VM进行扩展。因此,如果所有500条消息都可以相对较快地消费(同样,在消费计划中),那么您可能根本无法进行扩展。

缩放的确切算法尚未发布(它需要进行大量调整),但一般来说,如果将消息添加到队列中的速度快于系统,您可以期望系统自动扩展。你的功能可以处理它们。如果队列中第一条消息的延迟持续增加(意味着消息处于空闲状态且未处理),您的应用也将向外扩展。添加虚拟机之间的时间通常在几十秒内。

还有一些基于队列计数的阈值。例如,系统会尝试确保每个1K队列消息至少有1个VM,但通常缩放决策基于消息吞吐量,如前所述。

答案 1 :(得分:1)

我认为@Chris Gillum说得好,我们很难将服务器的极限推到事情将开始扩大的程度。

其他一些可用选项包括:

  1. 使用持久功能并使用线程进行缩放: https://docs.microsoft.com/en-us/azure/azure-functions/durable-functions-cloud-backup
  2. 另一种方法可能是使用专为大规模设计的事件中心。函数#1触发事件,而函数#2订阅了事件中心触发器,而不是队列。如果需要,添加流分析也可以选择更全面地扩展功能。