Azure 函数是否适合长时间的 运行 任务?
Is azure functions a right fit for long running tasks?
A TCP 主机服务器 位于本地。现在,我需要从 Azure 环境连接到 主机服务器 。建立连接后,主机服务器将不断发送消息,接收到的消息将转发到 Azure 服务总线队列。
我得到了以下架构(简化)。该架构提出了一个功能应用程序,用于连接本地服务器,然后不断接收消息,然后将消息放入服务总线队列。
根据 Microsoft 指南,它说我们必须 avoid long running functions,因为它会导致超时问题。
考虑到上述要求(建立连接和接收消息 - 即长 运行 任务)和 MS 指南,Azure Function 是否是正确的选择?我相信网络工作或网络应用程序更适合这个目的。
您可以将 Azure Functions 用于较长的 运行 过程。建议将流程部分移至 Durable Framework 提供的 Activity:
在这种情况下,函数是错误的技术选择,您可以轻松地为 Azure Web 应用程序中的 Continuous WebJob 切换函数。 Web 应用程序和函数应用程序都是 Azure 应用程序服务的类型,因此这是一个非常简单的更改。
as per Microsoft guidelines it says we must avoid long running
functions, as it causes timeout issues.
是的,当您使用运行时间少于 60 分钟的 Azure 函数时,这是推荐的方法。高级计划中的 azure Function 支持有保障的 60 minutes
。但是对于长期 运行 的场景,您可以使用 Durable Function,它旨在解决复杂的场景,让您将工作拆分成更小的垃圾。
在您的场景中,我建议您添加一个中间件组件,例如 eventhub,它可以将数据保留一定时间,并在以后使用不同的函数异步处理它们。
我有几个问题:
查询 1 - TCP 主机服务器是否会持续向 Azure Function 发送消息,或者 Azure Function 会与 'TCP Host Server' 对话并获取消息然后添加到服务总线队列?
查询 2 - 如果 Azure Function 将与 'TCP Host Server' 对话并获取消息,它会像建立连接、获取消息、将消息添加到队列并断开连接,还是会建立一个连接永无止境并不断收到消息并不断将它们添加到队列中?
如果它建立连接以获取一条消息或多条消息(假设每隔几秒或几分钟),那么您可以使用 Azure Function。在这种情况下,您可以使用带有计划的 CRON 作业类型 Azure 函数来实现此目的,这不算长 运行 函数,因为它总是以您定义的计划结束。
但是如果你想建立一个长连接,那么我不推荐使用 Azure Function,即使使用 Durable Function,因为它超越了 durable Function 的概念,而且它应该结束。如果可以将消息从 on-prem 服务器发送到事件中心,请使用事件中心。事件中心将是一种非常可扩展的方式来执行此操作,因为如果您有数百万或数万亿条消息,您可以扩展它,并且它是专门为此构建的。您还可以将 Azure IoT 中心与协议网关结合使用,您的网关可以在其中将您的 TCP 消息转换为 IoT 中心支持的协议(HTTP、AMQP 或 MQTT)。
我知道我把它弄糊涂了,如果您想保持简单,请使用 Function,但要使用类似预定 CRN 作业的方式来避免漫长的 运行 陷阱。
A TCP 主机服务器 位于本地。现在,我需要从 Azure 环境连接到 主机服务器 。建立连接后,主机服务器将不断发送消息,接收到的消息将转发到 Azure 服务总线队列。
我得到了以下架构(简化)。该架构提出了一个功能应用程序,用于连接本地服务器,然后不断接收消息,然后将消息放入服务总线队列。
根据 Microsoft 指南,它说我们必须 avoid long running functions,因为它会导致超时问题。
考虑到上述要求(建立连接和接收消息 - 即长 运行 任务)和 MS 指南,Azure Function 是否是正确的选择?我相信网络工作或网络应用程序更适合这个目的。
您可以将 Azure Functions 用于较长的 运行 过程。建议将流程部分移至 Durable Framework 提供的 Activity:
在这种情况下,函数是错误的技术选择,您可以轻松地为 Azure Web 应用程序中的 Continuous WebJob 切换函数。 Web 应用程序和函数应用程序都是 Azure 应用程序服务的类型,因此这是一个非常简单的更改。
as per Microsoft guidelines it says we must avoid long running functions, as it causes timeout issues.
是的,当您使用运行时间少于 60 分钟的 Azure 函数时,这是推荐的方法。高级计划中的 azure Function 支持有保障的 60 minutes
。但是对于长期 运行 的场景,您可以使用 Durable Function,它旨在解决复杂的场景,让您将工作拆分成更小的垃圾。
在您的场景中,我建议您添加一个中间件组件,例如 eventhub,它可以将数据保留一定时间,并在以后使用不同的函数异步处理它们。
我有几个问题:
查询 1 - TCP 主机服务器是否会持续向 Azure Function 发送消息,或者 Azure Function 会与 'TCP Host Server' 对话并获取消息然后添加到服务总线队列?
查询 2 - 如果 Azure Function 将与 'TCP Host Server' 对话并获取消息,它会像建立连接、获取消息、将消息添加到队列并断开连接,还是会建立一个连接永无止境并不断收到消息并不断将它们添加到队列中?
如果它建立连接以获取一条消息或多条消息(假设每隔几秒或几分钟),那么您可以使用 Azure Function。在这种情况下,您可以使用带有计划的 CRON 作业类型 Azure 函数来实现此目的,这不算长 运行 函数,因为它总是以您定义的计划结束。
但是如果你想建立一个长连接,那么我不推荐使用 Azure Function,即使使用 Durable Function,因为它超越了 durable Function 的概念,而且它应该结束。如果可以将消息从 on-prem 服务器发送到事件中心,请使用事件中心。事件中心将是一种非常可扩展的方式来执行此操作,因为如果您有数百万或数万亿条消息,您可以扩展它,并且它是专门为此构建的。您还可以将 Azure IoT 中心与协议网关结合使用,您的网关可以在其中将您的 TCP 消息转换为 IoT 中心支持的协议(HTTP、AMQP 或 MQTT)。
我知道我把它弄糊涂了,如果您想保持简单,请使用 Function,但要使用类似预定 CRN 作业的方式来避免漫长的 运行 陷阱。