Стратегия планирования в AWS Batch
Мне интересно, как выглядит стратегия планирования в AWS Batch. Официальная документация по этой теме не дает подробностей:
Планировщик пакетов AWS оценивает, когда, где и как запускать задания, отправленные в очередь заданий. Задания выполняются примерно в том порядке, в котором они отправляются, если все зависимости от других заданий были выполнены.
( https://docs.aws.amazon.com/batch/latest/userguide/job_scheduling.html)
"Приблизительно" fifo довольно вялый. Тем более, что порядок выполнения, который я наблюдал при тестировании AWS Batch, не был похож на fifo. Я что-то пропустил? Есть ли возможность изменить стратегию планирования или настроить пакетное выполнение заданий в точном порядке, в котором они были отправлены?
2 ответа
Я уже некоторое время использую Batch, и мне всегда казалось, что он ведет себя примерно как FIFO. Задания, которые отправляются первыми, обычно запускаются первыми, но из-за ограничений распределенных систем это общее правило не будет работать идеально. Задания с зависимостями остаются в состоянии PENDING до тех пор, пока их зависимости не завершатся, а затем они переходят в состояние RUNNABLE. По моему опыту, всякий раз, когда Batch готов запустить больше заданий из состояния RUNNABLE, он выбирает задание с самым ранним временем отправки.
Однако есть некоторые предостережения. Во-первых, если задание A было отправлено первым, но требует 8 ядер, тогда как задание B было отправлено позже, но требует только 4 ядра, задание B может быть выбрано первым, если в пакете доступно только 4 ядра. Во-вторых, после того, как задание выходит из состояния RUNNABLE, оно переходит в состояние STARTING, в то время как пакетная служба загружает образ Docker и готовит контейнер к запуску. В зависимости от ряда факторов, задания, которые были отправлены одновременно, могут занять больше или меньше времени в состоянии НАЧАЛО. Наконец, если задание завершается ошибкой и повторяется, оно возвращается в состояние PENDING с исходным временем отправки. Когда пакетная служба решает выбрать больше заданий для запуска, она обычно выбирает задание с самой ранней датой отправки, которое и будет заданием, которое не удалось. Если другие задания были запущены до сбоя первого задания, первое задание начнет второе выполнение после других заданий.
Невозможно настроить Batch как идеальный FIFO, потому что это распределенная система, но, как правило, если вы отправляете задания с одинаковыми вычислительными требованиями с интервалом в несколько секунд, они будут выполняться в том же порядке, в котором вы их отправили.
@ Натан, не могли бы вы знать, есть ли способ создать зависимость, где, скажем, если задание B зависит от завершения задания A, планировщик будет ждать, пока задание A завершится, а затем вытащит задание B для обработки, даже если вычислительная мощность доступна .