【问题标题】:Implementing LONG background tasks on Azure webapps在 Azure webapps 上实现 LONG 后台任务
【发布时间】:2017-02-12 11:08:19
【问题描述】:

情况:

在我们的 Azure blob 存储中拥有价值 TB 的文件和在我们的 Azure 数据库中拥有千兆字节存储的用户决定离开我们的服务。此时,我们需要将他的所有数据导出到 2GB 的包中,并在短时间内(两周左右)将它们存放在 blob 存储中。

这种情况应该很少发生,我们正在努力削减成本。在一两天内下载相应用户的 blob(240 KB 文件)并将它们压缩到包中的任务在哪里实现最佳?

我查看了一个单独的 webapp 运行一个专用的连续 webjob,但是 webjobs 似乎在应用程序卸载时关闭,我需要它来休眠并且在未启动和运行时不使用资源,所以“始终开启”是出去。另外,我似乎找不到完整的接口实现教程,所以我可能会取消正在运行的任务等。

我们最后的手段是放弃 web 应用程序(其中三个)并在虚拟机上运行它,但这会带来更高的成本。有没有我错过的方法可以完成工作?

【问题讨论】:

  • Azure Web 应用仍然是 Web 应用。它们不适合长时间运行的工作。你应该看看 Azure Web Jobs 或 Azure Functions。功能还有一个额外的好处,就是它们只按实际使用量收费,您不需要购买特定尺寸
  • 实际上,您可以轻松实现一个例程来创建 Web 应用程序、创建 Web 作业并启动它,然后删除 Web 应用程序,但您可能希望为此使用 azure 函数...
  • Azure Functions 看起来确实不错。您将如何处理具有 1.5GB 内存限制的函数的大文件?

标签: azure c#-4.0 asp.net-web-api2 azure-web-app-service azure-blob-storage


【解决方案1】:

对我来说,这听起来像是 Azure Functions 上的无服务器模型的工作。您无需为闲置资源付费即可获得所需的计算规模。

我不认为运行该函数有任何时间限制(与 AWS Lambda 不同),但即便如此,您也可能希望先实现一些东西来拆分作业,以便可以并行处理(并且为故障提供一些弹性)。将这些任务排队并触发函数退出队列。

值得注意的是,它们目前仍处于“预览”阶段。

编辑 - 刚刚注意到您对文件大小的评论...这可能是个问题,但理论上您应该能够使用本地存储,而不是全部在内存中进行。

【讨论】:

  • 虽然大部分情况都是如此,但本地存储限制为 500MB。有没有办法流式传输到 blob 存储?
猜你喜欢
  • 1970-01-01
  • 2013-07-18
  • 2014-08-27
  • 1970-01-01
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多