为什么 Azure Functions 花费过多时间 "wake up"?

Why do Azure Functions take an excessive time to "wake up"?

我们有一个简单的 Azure 函数可以进行 DocumentDB 查询。好像第一次调用要等很长时间,然后后面的调用很快。

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

似乎 Azure Functions 中有一些 "wake up" 循环。有什么方法可以最大限度地减少这种情况,或者更好的是将其记录在某处以便我们了解这里到底发生了什么?

消费计划中的功能应用程序 运行 确实有一段空闲时间,之后它们会有效地进入睡眠状态。正如您所观察到的以及人们在评论中提到的那样,下一次调用需要 "wake them up"。

至于为什么会发生这种情况,这是为了让 Microsoft 可以在多租户环境中以最佳方式分配计算工作负载,同时确保您只需为函数实际工作的时间付费。这就是无服务器的美妙之处。

对于这种行为不可接受的工作负载,您可以考虑退出消费计划并转向实际的应用服务计划。或者,您可以实施一个定时器触发功能,例如每分钟关闭一次,并通过对您不想进入睡眠的功能执行 ping 操作,将其用作 "keep alive" 机制。