我们有一个简单的 Azure 函数来进行 DocumentDB 查询。好像第一次调用要等很长时间才能完成,然后连续调用就很快了。
例如,我刚刚打开我们的应用程序,第一个函数调用花费了 10760 毫秒,任何最终用户都绝对会注意到。此后,所有函数调用大约需要 100 毫秒来处理,并且几乎难以察觉。
Azure Functions 中似乎存在一些“唤醒”周期。有什么方法可以最大限度地减少这种情况,或者更好的是将此记录在某处,以便我们可以了解这里到底发生了什么?
最佳答案
按消耗计划运行的功能应用确实有一段空闲时间,之后它们实际上会进入休眠状态。正如您所观察到的以及人们在评论中提到的那样,需要下一次调用来“唤醒他们”。
至于为什么会发生这种情况,是为了让 Microsoft 能够在 Multi-Tenancy 环境中以最佳方式分配计算工作负载,同时确保您只在函数实际工作时按秒计费。这就是无服务器的美妙之处。
对于这种行为 Not Acceptable 工作负载,您可以考虑放弃消耗计划并转向实际的应用服务计划。或者,您可以实现一个计时器触发的函数,例如每分钟触发一次,并通过 ping 您不想进入休眠状态的函数来将其用作“保持事件”机制。
关于azure - 为什么 Azure Functions 需要花费过多时间才能到达 "wake up"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45448040/