scaling services with apache mesos (and docker)

Post on 22-Jan-2018

282 Views

Category:

Software

10 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

Автор: Иван А. Кудрявцев mailto: kudryavtsev_ia@bw-sw.comwww: 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

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

top related