scaling services with apache mesos (and docker)

16
Масштабирование сервисов с помощью Apache Mesos Введение в систему управления пулом ресурсов Mesos и ее использование для создания масштабируемых приложений с помощью фреймворков Marathon, Chronos, Singularity Автор: Иван А. Кудрявцев mailto: [email protected] www: http://bw-sw.com/

Upload: ivan-kudryavtsev

Post on 22-Jan-2018

282 views

Category:

Software


10 download

TRANSCRIPT

Page 1: Scaling services with apache mesos (and docker)

Масштабирование сервисов с помощью Apache MesosВведение в систему управления пулом ресурсов Mesos и ее использование для создания масштабируемых приложений с помощью фреймворков Marathon, Chronos, Singularity

Автор: Иван А. Кудрявцев mailto: [email protected]: http://bw-sw.com/

Page 2: Scaling services with apache mesos (and docker)

В чем проблема

1. Как осуществить “запуск множества экземпляров сервиса на выделенных серверах”?

2. Как управлять запущенными экземплярами (останавливать, масштабировать, перезапускать, удалять)?

Page 3: Scaling services with apache mesos (and docker)

Источники проблемы (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

Тренд: построение систем за счет избыточного масштабирования на обычных компонентах

Page 4: Scaling services with apache mesos (and docker)

Источники проблемы (2)

1. Архитектура, основанная на микросервисах

дизайн подразумевает запуск и контроль множества разнородных сервисов и организацию взаимодействия между ними с использованием открытых интерфейсов

2. Широкое изменение рабочей нагрузки на сервис в течение дня:a. ядро сервиса на собственной инфраструктуре

b. арендованная инфраструктура (Cloud) по запросу (автоматизированное подключение и отключение мощностей внешних поставщиков по API)

Page 5: Scaling services with apache mesos (and docker)

Проблемы управления инфраструктурой

1. Добавление и удаление новых ресурсов инфраструктуры2. Аккаунтинг использования ресурсов3. Планирование использования ресурсов4. Справедливое распределение ресурсов между задачами5. Мониторинг задач и обеспечение их работоспособности6. Обнаружение в комплексных сервисах (Discovery)7. Обеспечение безопасности и множественного доступа к пулу

ресурсов

Page 6: Scaling services with apache mesos (and docker)

Методы управления инфраструктурой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

Page 7: Scaling services with apache mesos (and docker)

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/

Page 8: Scaling services with apache mesos (and docker)
Page 9: Scaling services with apache mesos (and docker)

Marathon Framework

● Каркас для запуска и управления долгоживущими процессами в Mesos:○ Mesos native containerizer○ Mesos docker containerizer

● Интерфейс○ SPA UI○ REST API

● Стабильная реализация (production-ready)● Язык реализации: Java

Page 10: Scaling services with apache mesos (and docker)

Chronos Framework

● Каркас для запуска и управления долгоживущими процессами в Mesos по расписанию (Cron-like):○ Mesos native containerizer○ Mesos docker containerizer

● Интерфейс○ SPA UI○ REST API

● Стабильная реализация (production-ready)● Язык реализации: Java

Page 11: Scaling services with apache mesos (and docker)

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. }

Page 12: Scaling services with apache mesos (and docker)

Mesos run command via REST

$ curl -i -H 'Content-Type: application/json' -d "@Docker.json" localhost:5052/v2/apps

Page 13: Scaling services with apache mesos (and docker)

Сложности

1. Выбор узлов, на которых можно развертывать сервис. Проблема решаема заданием узлам tag-ов и указанием совместимых tag-ов при создании задачи.

2. Обнаружение сервисов. Заранее не известно где запустится экземпляр, поэтому необходима интеграция с сервисом конфигурации (Zookeeper, Etcd, Consul)a. внешняя интеграция (через API Mesos, Marathon)b. внутренняя интеграция (подготовка контейнеров)

Page 14: Scaling services with apache mesos (and docker)

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)

Page 15: Scaling services with apache mesos (and docker)
Page 16: Scaling services with apache mesos (and docker)

© Bitworks Ltd., 2015

Спасибо за внимание