Я немного играл с кластером 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»
Есть ли способ достичь этого?
До сих пор я понимаю, что могу написать собственный модуль-изолятор, который будет работать на подчиненных устройствах и сообщать мастер-метку эту настраиваемую метрику. Тогда я могу использовать его в переговорах с ресурсами. Это правда?
Я не смог найти что-либо в задачах ретрансляции марафона на разных узлах, если один из них перегружен. Какие-либо предложения?