Upload
ivan-kudryavtsev
View
282
Download
10
Embed Size (px)
Citation preview
Масштабирование сервисов с помощью Apache MesosВведение в систему управления пулом ресурсов Mesos и ее использование для создания масштабируемых приложений с помощью фреймворков Marathon, Chronos, Singularity
Автор: Иван А. Кудрявцев mailto: [email protected]: http://bw-sw.com/
В чем проблема
1. Как осуществить “запуск множества экземпляров сервиса на выделенных серверах”?
2. Как управлять запущенными экземплярами (останавливать, масштабировать, перезапускать, удалять)?
Источники проблемы (1)
1. Горизонтально масштабируемые сервисыa. две единицы обычного серверного оборудования с 2мя процессорами дешевле чем
1 единица с 4мя:i. Supermicro 4xXeon E7530 / 256 GB RAM = 927 000
ii. Supermicro 2xE5-2603v3 / 128 GB RAM = 220 000iii. Supermicro 1xE3-1231v3 / 32 GB RAM = 131 000
b. 10 серверов Supermicro дешевле чем 5 серверов HP при равной мощности (STSS.ru):i. HP ProLiant DL60 Gen9 2xE5-2603v3 / 128 GB RAM = 425 000ii. Supermicro 2xE5-2603v3 / 128 GB RAM = 220 000
Тренд: построение систем за счет избыточного масштабирования на обычных компонентах
Источники проблемы (2)
1. Архитектура, основанная на микросервисах
дизайн подразумевает запуск и контроль множества разнородных сервисов и организацию взаимодействия между ними с использованием открытых интерфейсов
2. Широкое изменение рабочей нагрузки на сервис в течение дня:a. ядро сервиса на собственной инфраструктуре
b. арендованная инфраструктура (Cloud) по запросу (автоматизированное подключение и отключение мощностей внешних поставщиков по API)
Проблемы управления инфраструктурой
1. Добавление и удаление новых ресурсов инфраструктуры2. Аккаунтинг использования ресурсов3. Планирование использования ресурсов4. Справедливое распределение ресурсов между задачами5. Мониторинг задач и обеспечение их работоспособности6. Обнаружение в комплексных сервисах (Discovery)7. Обеспечение безопасности и множественного доступа к пулу
ресурсов
Методы управления инфраструктурой1. Управление вычислительными узлами
a. IPMI (IaaS) - включение и отключение аппаратных узловb. Amazon EC2 API (IaaS) - выделение и освобождение виртуальных машин в Amazonc. Openstack/Cloudstack API - выделение и освобождение виртуальных машин в частных и
публичных облаках (например, Rackspace)2. Управление конфигурациями
a. Chefb. Puppetc. Ansible
3. Управление пулом процессоров и памяти:a. Apache Mesos (generic resource planner) - matureb. Hadoop YARN (batch resource planner) - maturec. Docker Swarm (docker specific) - rookie
Apache Mesos: экосистема
1. Apache Zookeeper: 1-N шт (DLM, конфигурация).2. Apache Mesos Master: 1 - M шт (управление планированием ресурсов)3. Apache Mesos Slave: M+ (агент на узле исполнения)4. Каркасы Mesos: Marathon, Chronos, Singularity, etc.
a. http://mesos.apache.org/documentation/latest/mesos-frameworks/
Marathon Framework
● Каркас для запуска и управления долгоживущими процессами в Mesos:○ Mesos native containerizer○ Mesos docker containerizer
● Интерфейс○ SPA UI○ REST API
● Стабильная реализация (production-ready)● Язык реализации: Java
Chronos Framework
● Каркас для запуска и управления долгоживущими процессами в Mesos по расписанию (Cron-like):○ Mesos native containerizer○ Mesos docker containerizer
● Интерфейс○ SPA UI○ REST API
● Стабильная реализация (production-ready)● Язык реализации: Java
1. {2. "id": "bridged-webapp",3. "cmd": "python3 -m http.server 8080",4. "cpus": 0.5,5. "mem": 64.0,6. "instances": 2,7. "container": {8. "type": "DOCKER",9. "docker": {
10. "image": "python:3",11. "network": "BRIDGE",12. "portMappings": [13. { "containerPort": 8080, "hostPort": 0, "servicePort": 9000, "protocol": "tcp" },14. { "containerPort": 161, "hostPort": 0, "protocol": "udp"}15. ]16. }17. },18. "healthChecks": [19. {20. "protocol": "HTTP",21. "portIndex": 0,22. "path": "/",23. "gracePeriodSeconds": 5,24. "intervalSeconds": 20,25. "maxConsecutiveFailures": 326. }27. ]28. }
Mesos run command via REST
$ curl -i -H 'Content-Type: application/json' -d "@Docker.json" localhost:5052/v2/apps
Сложности
1. Выбор узлов, на которых можно развертывать сервис. Проблема решаема заданием узлам tag-ов и указанием совместимых tag-ов при создании задачи.
2. Обнаружение сервисов. Заранее не известно где запустится экземпляр, поэтому необходима интеграция с сервисом конфигурации (Zookeeper, Etcd, Consul)a. внешняя интеграция (через API Mesos, Marathon)b. внутренняя интеграция (подготовка контейнеров)
What’s next
1. Singularity от HubSpot - all-in-one framework более продвинутый чем Marathon:a. Marathon + Chronos в одном флаконеb. Различные типы запуска:
i. serviceii. workeriii. CRON-typeiv. on-demand
c. embedded load-balancing (using Baragon + HAProxy + Nginx)
© Bitworks Ltd., 2015
Спасибо за внимание