Azure 上的有状态和无服务器服务

Stateful and serverless services on Azure

我正处于一个过程中,我需要将一堆旧的 Windows 服务转换为对云更友好的方式。目前,解决方案中唯一的云是它们都托管在 Azure 虚拟机上。而且,当然,如果不扩展整个虚拟机,您将无法扩展特定服务。

很多服务几乎可以直接转换为 Azure Functions,但其他服务是有状态的,例如在它可以做它的事情之前需要一个外部部分的登录过程。

我们有哪些选择可以在需要状态的 Azure 中创建无服务器服务,或者我是否需要使用 Azure Worker Services 或 Azure Service Fabric 等技术?

现在我有了更深入的了解,可以提供一些信息。

Worker Services(以前的 Cloud Services)现已弃用。您可以使用 Service Fabric 或虚拟机作为替代品。

您可以使用虚拟机规模集轻松扩展虚拟机,但您需要编写无状态服务,或使用专用服务作为 'state server'(例如,需要状态服务器的 Web 应用程序,您可以为此使用 Azure Redis 缓存)。

我通常将我的批处理作业重写为 Azure Functions,并尽可能使用 Durable Functions,因为它简化了我的函数代码。

请注意,您目前无法将 Durable Functions 与 .NET 5 一起使用。目前尚不清楚它是否会受到支持,或者他们是否会直接跳到 .NET 6。

作为另一种选择,您可以使用 Hangfire 等框架,并在 Azure App Service Plan 上托管(假设您已经拥有一个)。它非常适合长时间的 运行 流程,并且有一个很棒的仪表板,您可以在其中监控作业的状态。

您还可以使用 Azure 容器实例剥离一些容器,并使用它来处理您的作业。

现在有了所有这些信息,选择取决于您的要求。

编辑:今天,在 Microsoft Ignite 上宣布了一项新服务,用于基于容器、Azure Worker Apps 的长期 运行 作业,您也可以查看它。