【问题标题】:Deallocation of Azure VM on a task completion在任务完成时重新分配 Azure VM
【发布时间】:2023-03-07 12:01:01
【问题描述】:

我需要一个 Azure VM (Ubuntu) 每 10 分钟执行一次任务(Java 应用程序)。因为任务通常持续不到一分钟,如果可以每 10 分钟启动一次机器并在任务完成时停止它,我会省钱。我了解到我可以在自动化帐户中安排启动和停止时间,但更理想的方法是在任务完成的那一刻停止 VM。有没有简单的方法来做到这一点?

【问题讨论】:

    标签: azure azure-virtual-machine azure-automation


    【解决方案1】:

    这听起来确实像是 Azure Batch 的工作。如果您正在寻找 IaaS 解决方案,Azure Batch 将为您完成这项工作。看看它:https://azure.microsoft.com/en-gb/services/batch/#overview。 它允许您将 VM 与您的首选操作系统(在 Azure Batch 中称为节点)一起使用,并运行一组任务。完成后,VM 将被解除分配。

    所以每个节点运行一组池,在每个池中你有一个作业,在每个作业中你可以有任务。例如,任务可以是运行特定应用程序的 cmd 行。因此,例如,您可以在 Windows 操作系统或 Ubuntu 操作系统的等效命令行上使用 run example.exe 1 2

    这里的强大之处在于,当您将任务添加到作业时,它会分配在 VM 上运行的任务,然后一旦完成,VM 将被释放,您只需为计算时间付费。

    这样做的缺点是它是一个无状态的 VM,因此您需要安装或存储的任何东西都必须使用其他方法。 Azure Batch 允许您在每次启动时预安装程序(例如您的 Java 应用程序)。此外,如果您正在使用文件和/或期望创建文件,则需要一个 blob 存储来支持这一点。因此,如果您希望它使用一定数量的文件,请将它们存储在 blob 存储中,然后在您的程序执行此操作时写回 blob 存储。

    最后是您的调度程序,这实际上取决于您要如何处理它,如果您有本地服务器或 Azure 上的服务器已经 24/7 运行,您可以将计划作业添加到调度程序并运行程序这会将任务添加到 Azure Batch。或者,如果您不介意使用 Azure Functions,您可以添加一个计时器 Azure Function,它将向作业添加任务。有多种方法可以解决这个问题,您可能已经有一个现有的解决方案。

    希望你觉得这很有用!

    【讨论】:

    • Azure Batch 看起来可以完成这项工作,但我找到了另一种解决方案。任务完成后,我可以使用自动化帐户并调用 webhook 从 VM 内部触发 VM 停止。看起来很简单。学习整个 Azure Batch 内容会节省时间。我错过了什么吗?
    • 我认为 VM + 自动化帐户本质上与 Azure Batch 相同。您可以使用 Azure Batch 节省一些钱,因为您无需为 VM 支付费用,而只是为计算时间付费,每次分配 VM 时,您还需要为基础架构付费,而且可能会变得更加昂贵。如果您真的有兴趣加倍努力,我想您需要进行一些估算。但是,如果您找到了类似的方法并且您已经在保存,我怀疑您会使用 Azure Batch 节省更多。另外值得一提的是,Azure Batch 的 VM 分配优先级较低:计算时间更短。
    猜你喜欢
    • 2023-03-16
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多