2015-07-25 2 views
1

Я немного играл с кластером Mesos и думал об использовании кластера Mesos в нашей производственной среде. Одна из проблем, на которые я, похоже, не могу найти ответ: как правильно планировать приложения с длительным сроком службы, которые будут иметь разную нагрузку?Как выбрать параметр CPU для приложений Marathon, запущенных на Mesos?

У марафона есть свойство «ЦП», где вы можете установить вес для распределения ЦП в конкретное приложение. (Я планирую запуск контейнеров Docker). Но из того, что я прочитал, это только вес, а не резервирование, распределение или ограничение, которые я настраиваю для приложения. Он по-прежнему может использовать 100% процессора на сервере, если это единственное, что работает. Проблема в том, что для приложений с длительным сроком действия потребности в ресурсах меняются со временем. Например, веб-сервер прямо пропорционален трафику. В сочетании с Mesos, рассматривающим этот параметр как «резервирование», я выбираю между двумя зол: слишком низкий уровень, и он может запускать слишком много процессов на одном и том же хосте, и все они будут страдать, а процессор ЦП пройдет 100%. Установите его слишком высоко, и CPU будет работать бездействия, поскольку резервирование сделано (или, как думает Мезос), но нет ничего, что использовало бы эти ресурсы.

Как вы подходите к этой проблеме? Мне что-то не хватает в том, как Мезос и Марафон обрабатывают ресурсы?

Я думал идеальный способ сделать это:

  • Specify вес для CPU для различных приложений (по порядку, скажем, 0,1 через 1), так что, когда прижмет, с более высоким приоритетом получает больше (так же, как сейчас)
  • Имеет ведомое сообщение Mesos «Доступный LA» со своим статусом (например, если 10 минут LA равен 2, доступно 8 процессоров, отчет 6 «Доступный LA»)
  • Настройте марафон, требующий «Доступный LA» ресурс на подчиненном устройстве для планирования задачи (например, не запускаться на конкретном хосте, если доступен LA < 2)
  • Когда доступно LA переходит в 0 (из-за притока трафика одновременно с запуском какой-либо работы на том же сервере до притока) - переместите задания Marathon в другое подчиненное устройство, которое имеет более «Доступный LA»

Есть ли способ достичь этого?

До сих пор я понимаю, что могу написать собственный модуль-изолятор, который будет работать на подчиненных устройствах и сообщать мастер-метку эту настраиваемую метрику. Тогда я могу использовать его в переговорах с ресурсами. Это правда?

Я не смог найти что-либо в задачах ретрансляции марафона на разных узлах, если один из них перегружен. Какие-либо предложения?

ответ

0

Для того, чтобы динамически выполнять выделение, вы можете использовать Mesos slave metrics вместе с API-интерфейсом Marathon HTTP для масштабирования, например, как я сделал here, в другом контексте. Мой коллега Никлас проделал работу с nibbler, что также может помочь.

Смежные вопросы