天蓝色功能是否适合长时间运行的任务?

时间:2020-08-19 15:20:37

标签: azure azure-functions azure-webjobs

TCP主机服务器 位于 本地 中。现在从Azure环境中,我需要连接主机服务器。建立连接后,主机服务器将连续发送消息,并将接收到的消息转发到Azure Service Bus队列。

为我提供了以下架构(简化)。该体系结构提出了一个功能应用程序,该应用程序将用于与本地服务器连接,然后连续接收消息,然后将消息放置到服务总线队列中。

enter image description here

根据Microsoft准则,它必须avoid long running functions,因为它会导致超时问题。

考虑到以上要求(建立连接和接收消息-即长时间运行的任务)和MS准则,Azure Function是正确的选择吗?我相信网络工作或网络应用将更适合此目的。

4 个答案:

答案 0 :(得分:2)

您可以将Azure函数用于长时间运行的过程。建议将流程部分移至“持久框架”提供的活动中:

https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-overview?tabs=csharp

答案 1 :(得分:1)

在这种情况下,功能是错误的技术选择,您可以轻松地关闭Azure Web App中Continuous WebJob的功能。 Web Apps和Function Apps都是Azure App Services的类型,因此这是一个非常简单的更改。

答案 2 :(得分:1)

根据Microsoft指南,它必须避免长时间运行 功能,因为它会导致超时问题。

是的,当您使用运行少于60分钟的Azure函数时,这是推荐的方法。高级计划中的azure函数支持有保证的60 minutes。但是,对于长时间运行的方案,您可以使用耐用函数,这些函数旨在解决复杂的方案,从而使您可以将工作分解成较小的垃圾。

在您的情况下,我建议您添加诸如eventhub之类的中间件组件,该组件可以将数据保留一定的时间,并使用不同的功能稍后进行异步处理。

答案 3 :(得分:1)

我的查询很少:

查询1-TCP主机服务器将消息连续发送到Azure Function还是Azure函数与“ TCP主机服务器”对话并获取消息,然后添加到服务总线队列中?

查询2-如果Azure Function将与“ TCP主机服务器”进行对话并获取消息,就像建立连接,获取消息,将消息添加到队列中并断开连接,还是建立一个永远都不会的连接结束并不断收到消息,并不断将它们添加到队列中?

如果建立连接以获取一条消息或多条消息,每隔几秒钟或几分钟说一次,则可以使用Azure功能。在这种情况下,您可以将CRON作业类型Azure函数与计划表配合使用来实现此目的,并且这将不算是长期运行的函数,因为它将始终在您定义的计划表中结束。

但是,如果您想建立一个长连接,那么我不建议您使用Azure Function,即使是使用Durable Function,因为它超越了持久函数的概念,而且它也应该终止。如果可以将消息从本地服务器发送到事件中心,请使用事件中心。事件中心将是一种非常可扩展的方式来执行此操作,因为如果您有数百万或数万亿条消息,则可以对其进行扩展,并且它是专门为此而构建的。您还可以将Azure IoT中心与协议网关一起使用,其中网关可以将TCP消息转换为IoT Hub所支持的协议(HTTP,AMQP或MQTT)。

我知道我对此感到困惑,如果您想使其简单,请使用“功能”,但要使用计划的CRN作业,例如避免长期运行陷阱的方式。