AWS Batch背后的调度策略

时间:2018-10-23 08:06:38

标签: amazon-web-services fifo aws-batch

我想知道AWS Batch背后的调度策略是什么样的。关于该主题的官方文档没有提供太多详细信息:

  

AWS Batch调度程序评估何时,何地以及如何运行已提交到作业队列的作业。只要满足了对其他作业的所有依赖关系,这些作业就按照提交时的顺序大致运行。

https://docs.aws.amazon.com/batch/latest/userguide/job_scheduling.html

“大约” fifo非常怪诞。尤其是我在测试AWS Batch时观察到的执行顺序看起来并不像fifo。 我错过了什么?是否有可能更改调度策略或配置“批处理”以按照提交作业的确切顺序执行作业?

1 个答案:

答案 0 :(得分:0)

我已经使用Batch一段时间了,它似乎总是以FIFO方式运行。首先提交的作业通常会首先开始,但是由于分布式系统的限制,该一般规则无法完美地解决。具有依赖关系的作业将保持为PENDING状态,直到它们的依赖关系完成为止,然后它们进入RUNNABLE状态。以我的经验,每当Batch准备从RUNNABLE状态运行更多作业时,它都会选择提交时间最早的作业。

但是,有一些警告。首先,如果作业A首先提交但需要8个核心,而作业B之后提交但仅需要4个核心,则在Batch仅具有4个核心的情况下,可以首先选择作业B。其次,在作业离开RUNNABLE状态后,它将进入STARTING状态,而Batch会下载Docker映像并准备运行容器。根据多种因素,在STARTING状态下,同时提交的作业可能需要更长或更短的时间。最后,如果作业失败并被重试,它将返回到PENDING状态,并提交其原始时间。当Batch决定选择要运行的更多作业时,通常会选择提交日期最早的作业,即提交失败的作业。如果在第一个作业失败之前已经开始其他作业,则第一个作业将在其他作业之后开始第二次运行。

由于它是一个分布式系统,因此无法将Batch配置为完美的FIFO,但是通常,如果您提交的作业具有相同的计算需求,并且间隔数秒,那么它们将以与提交它们相同的顺序执行。