Планировщики и исполнители Apache Mesos на примере
Я пытаюсь понять, как работают различные компоненты Mesos, и нашел этот отличный учебник, который содержит следующий архитектурный обзор:
![enter image description here]()
У меня есть несколько опасений по этому поводу, которые не уточняются (либо в статье, либо в официальных документах Mesos):
- Где работают Планировщики? Существуют ли узлы планировщика, где должны работать только планировщики?
- Если бы я писал свою собственную структуру Mesos, какую функциональность планировщика мне нужно было бы реализовать? Это всего лишь двоичный ответ yes/no или accept/reject для предложений, отправленных Мастером? Какие-нибудь конкретные примеры?
- Если бы я писал свою собственную структуру Mesos, какую функциональность Executor мне нужно было бы реализовать? Какие-нибудь конкретные примеры?
- Какой конкретный пример задачи, которая будет отправлена Исполнителю?
- Являются ли исполнители "закрепленными" (постоянно установленными) Slaves или они плавают по типу "по требованию", устанавливаются и выполняются динамически/на лету?
Ответы
Ответ 1
Отличные вопросы!
Я считаю, что было бы очень полезно посмотреть примерную структуру, такую как Rendler. Это, вероятно, ответит на большинство ваших вопросов и даст вам ощущение внутренней структуры.
Позвольте мне теперь попытаться ответить на вопрос, который после этого может быть открыт.
- Местоположение планировщика
Планировщики не включены на каких-либо специальных узлах, но имейте в виду, что планировщики могут также работать с отказом (как любая часть в распределенной системе).
- Функциональность планировщика
Посмотрите на Rendler или в руководстве по разработке каркаса.
- Функциональность/Задача исполнителя
Я считаю, что Rendler - хороший пример для понимания отношений Задачи/Исполнителя. Просто начните читать README/описание на главной странице github.
Исполнители запускаются на каждом node, когда первая задача, требующая такого исполнителя, отправляется на этот node. После этого он останется на этом node.
Надеюсь, это помогло!
Ответ 2
Чтобы добавить к js84 отличный отклик,
- Местоположение планировщика. Многим пользователям нравится запускать планировщики через другую инфраструктуру, такую как Marathon, чтобы гарантировать, что если планировщик или его node умирает, его можно перезапустить в другом месте.
- Функциональность планировщика: после регистрации в Mesos ваш планировщик начнет получать предложения ресурсов в обратном вызове
resourceOffers()
, в котором планировщик должен запустить (по крайней мере) одну задачу для подмножества (или всех) ресурсов, которые предлагаются. Вероятно, вы также захотите реализовать обратный вызов statusUpdate()
для обработки/завершения задачи.
Обратите внимание, что вам может даже не понадобиться реализовать собственный планировщик, если может существовать существующая инфраструктура, такая как Marathon/Chronos/Aurora/Kubernetes.
- Функциональность исполнителя: обычно вам не нужно создавать пользовательский исполнитель, если вы просто хотите запустить Linux-процесс или контейнер-докер и знать, когда он будет завершен. Вы могли бы просто использовать mesos-executor по умолчанию (указав
CommandInfo
непосредственно в TaskInfo
вместо встроенного внутри ExecutorInfo
). Если, однако, вы хотите создать пользовательский исполнитель, как минимум вам нужно реализовать launchTask()
, а в идеале и killTask()
.
- Пример задачи. Примерной задачей может быть простая команда linux, например
sleep 1000
или echo "Hello World"
, или контейнер докера (через ContainerInfo
), например image : 'mysql'
. Или, если вы используете пользовательский исполнитель, тогда исполнитель определяет, что такое задача и как ее запускать, поэтому вместо этого можно было бы запустить задачу как другой поток в процессе выполнения, или просто стать элементом в очереди в однопользовательском режиме, поточный исполнитель.
- Назначение исполнителей: исполнитель распределяется через URI CommandInfo, как и любые двоичные файлы задач, поэтому их не нужно предварительно устанавливать на узлах. Mesos будет получать и запускать его для вас.
Ответ 3
Планировщики: - это стратегия принятия или отклонения предложения. Планировщики мы можем написать самостоятельно, или мы можем использовать некоторые существующие, например, хроносы. В планировщике мы должны оценить доступные ресурсы, а затем либо принять, либо отклонить.
Функциональность планировщика: Пример может быть похож, предположим, что у вас есть задача, для которой требуется 8 процессоров, но предложение от мезо может составлять 6 cpus, что не будет служить в этом случае u может отклоняться.
Функциональность исполнителя: Исполнитель обрабатывает информацию о состоянии вашей задачи. Набор API-интерфейсов, который необходимо реализовать, например, как статус назначенной задачи в ведомости mesos. Какое количество процессоров доступно в настоящее время в ведомости mesos, где выполняется исполнитель.
конкретный пример для исполнителя: chronos
устанавливается и выполняется динамически/на лету:. Это невозможно, вам нужно предварительно настроить исполнителей. Однако вы можете реплицировать исполнителей, используя автомасштабирование.