【问题标题】:Stateful and serverless services on AzureAzure 上的有状态和无服务器服务
【发布时间】:2021-11-03 01:29:46
【问题描述】:

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

很多服务几乎可以直接转换为 Azure Functions,但其他服务是有状态的,例如需要一个外部部分的登录过程,然后才能执行它的操作。

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

【问题讨论】:

  • 您的问题存在一些误解。例如,您可以使用带有 Durable Functions 的 Azure Functions 来存储状态。您需要执行登录的事实与状态无关,但与身份验证/授权有关。
  • 您好,感谢您的回答。抱歉不清楚,但登录场景实际上只是一个示例,您是绝对正确的,它可能是身份验证过程的一部分。但是,如果我使用持久功能,我会受到功能触发器的限制,并且我们会从其他来源获取数据推送给我们。我正在尝试编写自己的触发器。我不知道这是否可行。
  • 现在我更加困惑了。目前它的工作情况如何?你提到了windows服务,但是外部用户不能直接调用你的windows服务吧?
  • 不,他们不能。我们有从不同提供商那里获取数据的服务。有些是计时器触发的,可以由 Azure Function 处理,但有些是由我们的 Windows 服务订阅数据使用的,数据提供者会将数据推送给我们。这有意义吗?

标签: azure azure-functions


【解决方案1】:

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

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

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

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

请注意,目前您不能在 .NET 5 中使用 Durable Functions。目前尚不清楚它是否会受到支持,或者他们是否会直接跳到 .NET 6。

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

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

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

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

【讨论】:

  • 非常感谢您的回答并花时间真正理解我的问题。我将在合适的情况下使用函数和持久函数,但是在使用服务结构时,正确的方法是使每个服务结构集群尽可能小,或者我是否能够扩展集群中的每个服务结构分开?
  • 我实际上在这里找到了答案:docs.microsoft.com/en-us/azure/architecture/… 谢谢你的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-04
  • 1970-01-01
  • 2017-05-23
  • 2016-12-04
  • 1970-01-01
  • 1970-01-01
  • 2017-06-22
相关资源
最近更新 更多