Azure Function slot 变暖但仍然经历冷启动

Azure Function slot warmed but still experiences cold start

对于我们的 Azure 功能,我们使用自动插槽交换功能和以下应用程序设置来确保我们的插槽在上线前预热:

WEBSITE_OVERRIDE_PRESERVE_DEFAULT_STICKY_SLOT_SETTINGS = 1 
WEBSITE_SWAP_WARMUP_PING_PATH = "/api/healthcheck"
WEBSITE_SWAP_WARMUP_PING_STATUSES = "200" 

这会导致我们的 ADO 管道调用健康检查端点(已确认),并且只有在成功时才将槽交换为存活。

问题是所有这些发生之后,在我们收到响应之前需要等待很多秒的请求。此后的任何请求几乎都是即时的。此行为对于每次部署都是一致的。

我们不会预料到这一点,因为我们知道在命中 healthcheck 端点时暂存槽会预热,然后将槽交换到生产中。那么为什么我们会遇到这种冷启动延迟呢?我们甚至可以在插槽交换完成后等待一两分钟,我们总是体验它。

是否发生了一些奇怪的事情,比如一旦插槽进入生产状态,它需要再次才能预热?

This可能对你有帮助。

After slot swaps, the app may experience unexpected restarts. This is because after a swap, the hostname binding configuration goes out of sync, which by itself doesn’t cause restarts. However, certain underlying storage events (such as storage volume failovers) may detect these discrepancies and force all worker processes to restart. To minimize these types of restarts, set the WEBSITE_ADD_SITENAME_BINDINGS_IN_APPHOST_CONFIG=1 app setting on all slots

如果您将变量 WEBSITE_ADD_SITENAME_BINDINGS_IN_APPHOST_CONFIG 设置为 1,您应该能够摆脱冷启动,这是由重新启动主机引起的。但是,请注意,在 slot 功能期间,处理请求可能会非常缓慢。

您还可以查看 this github issue 在哪里找到有关零停机部署的讨论。