Azure 消费者功能应用对消息的反应极其缓慢

Azure consumer function app extremely slow to react to messages

我们有一个 Linux 函数应用程序,它使用 ServiceBusTrigger 使用来自 Azure 服务总线的消息。

将消息添加到 ASB 上的订阅后,函数应用需要整整 分钟 才能启动响应。一旦热,所有后续消息都会很快被消耗,但是冷启动肯定不能解释一分钟的延迟吗?

2/3/2021, 8:45:22.936 AM | MyApi.DataAccess.ServiceBus.ServiceBusClient | West Europe | Successfully published message to AzureServiceBus
2/3/2021, 8:46:24.000 AM | Host.Startup |   | Loading functions metadata

我可以一次又一次地重复这个,延迟几乎总是一分钟,而且只发生在函数冷的时候。再次冷启动是可以理解的,但在这种情况下的延迟是巨大的——一定有其他事情发生了。需要注意的几点:

下面是我们的一个消费者函数的签名:

[FunctionName("MyEventHandler")]
public async Task Run([ServiceBusTrigger("MyEvent",
        Consts.ServiceBus.SubscriptionName,
        Connection = "ServiceBusConnectionString",
        IsSessionsEnabled = true)]
    MyMessage message,
    ILogger log)

如果我们能够看到该函数何时首次意识到订阅中有一条消息,或者它轮询订阅的频率,那就太好了。这在任何地方都可用吗?

我观察到过去服务总线触发器的“冷启动”持续时间更长。我的假设始终是它毕竟不是真正的“冷启动”。没有显式的 HTTP 调用来唤醒您的函数。相反,您的函数会完全休眠并且仍然需要触发新消息

我的理论是:如果你有一段时间没有收到队列中的消息,监视你的服务总线的进程也会进入休眠状态,并且只会周期性地自行唤醒。这可能是您正在观察的那一刻。

有趣的是,虽然我一直认为这是“有道理的”,但几乎没有关于此的实际信息。所以除了我自己的经验,我没有其他来源。所以它有可能工作得更快,我的应用程序也遇到了你描述的同样问题。

https://mikhail.io/2019/03/reducing-azure-functions-cold-start-time/

https://markheath.net/post/avoiding-azure-functions-cold-starts