为什么Azure功能需要花费过多时间来"唤醒"?

Gra*_*ham 14 azure azure-functions

我们有一个简单的Azure函数来进行DocumentDB查询.这似乎是我们第一次称之为漫长的等待完成,然后连续的呼叫非常快.

例如,我刚打开我们的应用程序,第一个函数调用需要10760毫秒,任何最终用户都明显可以注意到.在此之后,所有函数调用大约需要100毫秒进行处理,几乎察觉不到.

好像Azure函数中有一些"唤醒"循环.是否有某种方法可以最大限度地减少这种情况,或者更好的方法是将其记录在某处,以便我们能够理解这里真正发生了什么?

Jes*_*ter 12

在消费计划上运行的功能应用确实具有空闲时间,之后它们有效地进入睡眠状态.下次调用需要按照您观察到的"唤醒它们"并且人们在评论中提到过.

至于为什么会发生这种情况,微软可以在多租户环境中最优化地分配计算工作负载,同时确保只在您的功能实际工作的时间内向第二个计费.这是无服务器的美.

对于不可接受的行为的工作负载,您可以考虑从消费计划转移到实际的App Service计划.或者,您可以实现一个定时器触发的函数,例如每分钟关闭一次,并通过ping您不想进入睡眠的函数将其用作"保持活动"机制.

  • 转到应用服务计划并利用永远在线功能:https://github.com/Azure/Azure-Functions/wiki/Enable-Always-On-when-running-on-dedicated-App-Service-Plan (4认同)
  • 在考虑了这个之后,如果我要转向应用服务计划,我只需编写本机node.js代码而不会受到函数开销的困扰. (3认同)
  • 就这样。...我们也使用Azure函数构建了我们认为简单而干净的东西,然后又碰到了这一点,现在不得不考虑为此付出更多的“成本”。回到服务器端,直到MSFT实现了5秒以上的冷启动功能,都会导致用户放弃。如果30天后仍未访问某个功能,但5分钟后,我就知道卸载了吗??? (2认同)