使用Azure Web Apps,我可以扩展一系列有用的指标,例如磁盘或网络I / O,CPU和内存使用情况。到目前为止,在Azure Functions documentation中,您似乎只将内存使用量作为使用动态服务计划时进行缩放的度量标准。从我所读到的,还有一些未记载的魔法可以决定它如何扩展;我真的希望它完整记录下来。
如果我有一个功能应用程序,有时会使用大量的CPU,有时候很多磁盘或网络I / O,有时候主要是RAM - 混合使用指标,或者甚至只是前两个中的一个,会缩放功能工作?
更具体地说,对于我的情况,或者我的预期情况,如果函数使用队列触发器并且具有基于每个特定执行的资源需求的混合,但是所有作业都适合所选择的存储器层,那么缩放是否会进入内存以外的帐户因素,如CPU和I / O,队列中的消息数以及在一台计算机上处理的数量,以便在其他计算机上分散负载?
我担心的是,如果作业没有使用太多内存,例如高CPU或网络流量,那么我最终会在一台机器上运行大量工作,等待其他资源慢慢运行,而不是将负载分散到多个实例中。
我们当前的解决方案/服务仅基于CPU进行扩展,因此函数似乎就是针对另一个类似问题交换一个问题。有些工作需要永远完成,因为它们受I / O限制,并且服务过多地在少数工蜂上过度配置。我们实际编写的代码在CPU上旋转以伪造高使用率,以便向服务建议它应该扩展,这非常糟糕和浪费。
答案 0 :(得分:0)
我认为文档在谈论内存与缩放有关时有点误导。实际上,负责扩展功能应用程序的Azure功能的动态运行时与内存,CPU或I / O无关。相反,它关注吞吐量。我们的想法是,可能存在导致速度减慢(CPU,内存,I / O等)的各种因素,因此在检测到减速时向外扩展更有意义,而不是尝试针对特定资源进行优化。 / p>
在这里查看我对类似问题的回答:https://stackoverflow.com/a/37712126/2069。它详细介绍了如何通过强调队列触发函数来制定比例决策。希望这能为您提供所需的信息。