2

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

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

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

“大约”fifo 是相当模糊的。特别是当我在测试 AWS Batch 时观察到的执行顺序看起来不像 fifo。我错过了什么?是否有可能更改调度策略,或配置 Batch 以按照提交作业的确切顺序执行作业?

4

1 回答 1

1

我已经使用 Batch 有一段时间了,它的行为似乎一直大致是 FIFO 方式。先提交的作业通常会先启动,但由于分布式系统的限制,这个一般规则不会完美运行。具有依赖关系的作业保持在 PENDING 状态,直到它们的依赖关系完成,然后它们进入 RUNNABLE 状态。根据我的经验,每当 Batch 准备好从 RUNNABLE 状态运行更多作业时,它都会选择提交时间最早的作业。

但是,有一些警告。首先,如果 Job A 先提交但需要 8 个 core,而 Job B 后提交但只需要 4 core,如果 Batch 只有 4 core 可用,则可能会先选择 Job B。其次,在作业离开 RUNNABLE 状态后,它会进入 STARTING 状态,同时 Batch 会下载 Docker 映像并让容器准备好运行。根据许多因素,同时提交的作业在 STARTING 状态下可能需要更长或更短的时间。最后,如果一个作业失败并被重试,它会回到 PENDING 状态,并以其原始时间提交。当 Batch 决定选择更多的作业来运行时,它一般会选择提交日期最早的作业,也就是失败的作业。如果在第一个作业失败之前已经启动了其他作业,则第一个作业将在其他作业之后开始第二次运行。

没有办法将 Batch 配置为完美的 FIFO,因为它是一个分布式系统,但通常如果您提交具有相同计算要求且间隔几秒钟的作业,它们将按照您提交的顺序执行。

于 2020-04-22T23:12:56.950 回答