Apache Mesos
Apache Mesos — это программное обеспечение с открытым исходным кодом, предназначенное для управления ресурсами (CPU, память, дисковое пространство, сетевые порты) в кластере серверов и предоставления их распределённым приложениям. Mesos абстрагирует физические или виртуальные машины в единый пул ресурсов, позволяя запускать на одном кластере разнородные рабочие нагрузки, такие как долгоживущие сервисы, пакетные задачи и контейнеризированные приложения. Разработка проекта была начата в Калифорнийском университете в Беркли, а в 2013 году он стал проектом Apache Software Foundation.
История
Проект Mesos был создан в 2009 году группой исследователей из Лаборатории AMPLab Калифорнийского университета в Беркли под руководством Бенджамина Хиндмана, Энди Конвински и Иона Стойки. Первоначальная цель заключалась в разработке платформы, которая могла бы эффективно управлять ресурсами для различных фреймворков обработки данных (например, Hadoop и MPI) на общем кластере. В отличие от традиционных планировщиков, Mesos предложил двухуровневую архитектуру планирования, где центральный менеджер ресурсов (Mesos master) принимает решения о распределении ресурсов, а сами фреймворки (через специальные компоненты — планировщики) решают, какие задачи и когда запускать.
В 2011 году Mesos был передан в инкубатор Apache Software Foundation, а в 2013 году получил статус проекта верхнего уровня (Top-Level Project). Крупными ранними пользователями стали Twitter (признан нежелательной организацией в РФ), Airbnb и Netflix, которые использовали Mesos для управления своими масштабными инфраструктурами. В 2014 году компания Mesosphere (позднее переименованная в D2iQ) выпустила коммерческую платформу DC/OS (Data Center Operating System), основанную на Mesos. Однако к концу 2010-х годов популярность Mesos снизилась из-за роста экосистемы Kubernetes, который предложил более удобный API и более широкую поддержку сообщества. В 2021 году проект был переведён в статус «спящего» (dormant) в инкубаторе Apache, что означало прекращение активной разработки, хотя код остаётся доступным.
Архитектура
Основные компоненты
Система Mesos состоит из четырёх ключевых компонентов:
- Mesos master (менеджер ресурсов): Центральный узел, который управляет состоянием кластера. Он получает информацию о доступных ресурсах от агентов, принимает предложения ресурсов (resource offers) и передаёт их фреймворкам. Для обеспечения отказоустойчивости используется несколько мастеров (обычно 3 или 5), один из которых активен (leader), а остальные находятся в режиме ожидания, используя ZooKeeper для выбора лидера и хранения состояния.
- Mesos agent (агент): Демон, работающий на каждом узле кластера. Он сообщает мастеру о своих свободных ресурсах, получает от мастера команды на запуск задач (executors) и управляет их жизненным циклом. Агент изолирует задачи с помощью контейнеров (по умолчанию — Mesos containerizer, также поддерживается Docker).
- Framework (фреймворк): Распределённое приложение, которое состоит из двух частей:
- Scheduler (планировщик): Компонент, который регистрируется в Mesos master, получает предложения ресурсов и принимает решения о том, какие задачи запускать.
- Executor (исполнитель): Компонент, запускаемый агентом для выполнения конкретной задачи (например, запуск контейнера с Hadoop-задачей).
- ZooKeeper: Сервис координации, используемый для выбора лидера среди мастеров и хранения конфигурации кластера.
Двухуровневое планирование
Ключевая особенность Mesos — двухуровневая архитектура планирования. В отличие от монолитных планировщиков (например, в Hadoop YARN), где центральный планировщик сам решает, куда и когда ставить задачи, Mesos работает следующим образом:
- Агенты сообщают мастеру о свободных ресурсах.
- Мастер формирует «предложение ресурсов» (resource offer) — список доступных ресурсов (например, 4 CPU, 8 ГБ RAM) на конкретном агенте.
- Мастер отправляет это предложение одному из зарегистрированных планировщиков фреймворков.
- Планировщик фреймворка анализирует предложение и либо принимает его (запуская задачу на указанном агенте), либо отклоняет.
- Если предложение отклонено, мастер может перенаправить его другому планировщику.
Такой подход позволяет фреймворкам реализовывать собственную логику планирования (например, учёт локальности данных, приоритеты задач), не перегружая центральный мастер. Mesos использует механизм «отрицательных приоритетов» (weighted fair sharing) для распределения ресурсов между фреймворками.
Классификация и типы фреймворков
Mesos поддерживает широкий спектр фреймворков, которые можно разделить на несколько категорий:
- Фреймворки для обработки данных: Apache Hadoop (через специальный планировщик), Apache Spark, Apache Flink, Apache Storm. Эти фреймворки используют Mesos для динамического выделения ресурсов под задачи MapReduce или потоковой обработки.
- Фреймворки для долгоживущих сервисов: Apache Aurora (разработка Twitter), Marathon (разработка Mesosphere). Marathon является одним из самых популярных фреймворков для Mesos, позволяющим запускать и управлять долгоживущими приложениями (например, веб-серверами, микросервисами), обеспечивая автоматическое восстановление после сбоев.
- Фреймворки для пакетной обработки: Jenkins (через плагин Mesos), Chronos (распределённый планировщик заданий, похожий на cron).
- Фреймворки для контейнеризации: Docker (Mesos может напрямую запускать Docker-контейнеры через Docker containerizer), Kubernetes (в ранних версиях, до того как Kubernetes стал самодостаточным, существовала интеграция kube-mesos, но она была признана устаревшей).
Применение
Управление ресурсами дата-центров
Основное применение Mesos — создание «единого пула ресурсов» (resource pool) из нескольких серверов. Это позволяет повысить коэффициент использования оборудования (utilization rate) за счёт динамического перераспределения ресурсов между разными типами задач. Например, в ночное время, когда нагрузка на веб-сервисы падает, освободившиеся ресурсы могут быть отданы под пакетную обработку данных (ETL-задачи, аналитика).
Платформы для микросервисов
С помощью фреймворка Marathon Mesos использовался для развёртывания и управления микросервисными архитектурами. Marathon предоставлял API для запуска, остановки и масштабирования контейнеров, а также поддерживал балансировку нагрузки через интеграцию с HAProxy или Marathon-LB.
Образовательные и исследовательские проекты
Благодаря открытому коду и гибкой архитектуре, Mesos использовался в академических исследованиях для экспериментов с новыми алгоритмами планирования и распределёнными вычислениями. Проект также применялся в учебных курсах по распределённым системам.
Критика и ограничения
Несмотря на инновационность, Mesos имел ряд недостатков, которые способствовали снижению его популярности:
- Сложность развёртывания и обслуживания: Настройка кластера Mesos требовала значительных усилий, включая конфигурацию ZooKeeper, управление несколькими мастерами и агентами, а также настройку сетевой изоляции.
- Ограниченная экосистема: По сравнению с Kubernetes, экосистема Mesos была значительно меньше. Существовало меньше готовых инструментов для мониторинга, логирования, управления секретами и CI/CD.
- Проблемы с сетевым моделированием: Встроенные механизмы сетевой изоляции (например, IP-per-container) были менее развиты, чем в Kubernetes, что усложняло работу с сетевыми политиками и сервис-мешами.
- Снижение активности сообщества: После того как Mesosphere переключилась на продвижение D2iQ Kubernetes Platform (основанной на Kubernetes), а Twitter и другие крупные пользователи начали мигрировать на Kubernetes, разработка Mesos практически остановилась.
Интересные факты
- Название «Mesos» происходит от греческого слова «μέσος» (mesos), что означает «средний» или «промежуточный», отражая роль системы как посредника между ресурсами и приложениями.
- Mesos стал основой для создания коммерческой платформы DC/OS (Data Center Operating System), которая предлагала единый интерфейс для управления кластером, включая каталог пакетов (пакетный менеджер) для установки фреймворков.
- В 2015 году проект Mesos получил награду «Лучший проект с открытым исходным кодом» (Best Open Source Project) на конференции OSCON.
Источники
- Hindman, B., Konwinski, A., Zaharia, M., Ghodsi, A., Joseph, A. D., Katz, R., ... & Stoica, I. (2011). Mesos: A Platform for Fine-Grained Resource Sharing in the Data Center. Proceedings of the 8th USENIX Symposium on Networked Systems Design and Implementation (NSDI).
- Apache Mesos Documentation. Apache Software Foundation.
- Burns, B., Grant, B., Oppenheimer, D., Brewer, E., & Wilkes, J. (2016). Borg, Omega, and Kubernetes. Communications of the ACM, 59(5), 50-57.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →