我需要一个Azure VM(Ubuntu)每10分钟执行一次任务(java应用程序)。因为任务通常持续不到一分钟,所以如果能够每隔10分钟启动一次机器并在任务完成时将其停止,我会省钱。我了解到可以在自动化帐户中安排启动和停止时间,但更好的方法是在任务完成时立即停止VM。有没有简单的方法可以做到这一点?
这听起来确实像Azure Batch的工作。如果您正在寻找IaaS解决方案,Azure Batch将为您完成这项工作。看看:https://azure.microsoft.com/en-gb/services/batch/#overview。它允许您将VM与首选OS一起使用(在Azure Batch中称为节点),并运行一组任务。完成后,将取消分配VM。
因此,每个节点运行一组池,在每个池中您都有一个作业,在每个作业中您都可以有任务。任务可以是例如运行特定应用程序的cmd行。因此,例如,您可以在Windows操作系统上使用run example.exe 1 2
或在Ubuntu操作系统上使用等效的命令行。
这里的功能是,当您将任务添加到作业中时,它将分配要在VM上运行的任务,然后,一旦完成,VM将被销毁,您只需支付计算时间。
缺点是它是无状态的VM,因此,您需要安装或存储的所有内容都必须使用其他方法。 Azure Batch使您可以在每次启动时预安装程序(例如Java应用程序)。同样,如果您正在使用文件和/或期望创建文件,则需要Blob存储来支持此功能。因此,如果您期望它使用一定数量的文件,请将其存储在blob存储中,然后在程序执行此操作时写回blob存储。
最后是调度程序,这实际上取决于您要如何处理它,如果您有本地服务器或Azure上已经运行24/7的服务器,则可以向调度程序中添加调度的作业并运行一个程序,会将任务添加到Azure批处理。或者,如果您不介意使用Azure函数,则只需添加一个计时器Azure函数即可将任务添加到作业中。有多种解决方法,您可能已经有了现有的解决方案。
希望您发现这很有用!