Микросервисная
архитектура на базе
CoreOS и Kubernetes
Денис Измайлов
13 июля 2016
Денис Измайлов
• 16 лет опыта разработки ПО и web
• Последние 6 лет посвятил Front-end,
Node.js и архитектуре
• Более 15 проектов SPA, React.js и high-
load
• Коммиты в Redux, webpack и koa
• Спикер HighLoad++ 2015, AgileDays
2016, RIT 2016, DevConf 2016,
MoscowJS, React Amsterdam Meetup
• Статьи на Habrahabr и Medium
• Два года назад основал Startup Makers
• Мы делаем web,
мобильные
приложения и DevOps
для наших клиентов
• Мы используем самые
передовые и
эффективные
технологии
• Более 20 талантливых
разработчиков
Микросервисы
“Microservices allow engineering teams to move
quickly to grow a product… assuming they don’t
get bogged down by the complexity of operating a
distributed system”
Микросервисы не
решают проблем
Микросервисы создают
новый уровень проблем
Так ли это?
Монолитная
архитектура
Микросервисная архитектура на базе CoreOS и Kubernetes
Хрупкость
Если падает, то падает всё
Хрупкость
Если падает, то падает всё
С учётом высокой связанности, падает
всё часто
Низкая скорость поставки
Тяжелые процессы сборки и запуск

Необходимость выкатывать всё даже
при небольших изменениях
Ментальная сложность изменений
• Slow IDE
• Ментальная нагрузка
• Высокая ответственность
каждого
• Что я не должен делать?
• Высокие риски провала
Ментальная сложность изменений
Типичный монолит -

человечное тело
Организационная сложность
Необходимость согласований и
координации
Затягивание сроков
Дорогой технологический стэк
• Мы не можем его менять
• Необходимо брать с запасом,
а это all-in-one и дорого
• Небольшой выбор средств
• Vendor lock-in
Медленно. Дорого.
Высокие риски.
Монолитная архитектура
• Хрупкость
• Низкая скорость доставки
• Ментальная сложность изменений
• Организационная сложность
• Дорогой технологический стук
• Медленно. Дорого. Высокие риски.
Микросервисная
архитектура
Микросервисная архитектура на базе CoreOS и Kubernetes
Устойчивость
Если падает один сервис, система

продолжает работать
Fail-over. Сервисы взаимозаменяемы.
Переключение.
Высокая скорость поставки
Быстрая сборка и запуск
Разработка и независимые

выкатка сервисов
Прогрессивное обновление UI
Ментальная легкость изменений
• Изолированность сервиса
• Низкие риски провала
• Точечные изменения
• Fast IDE
• Rollback
Свободный технологический стэк
• Agile Way
• Оптимальный для каждого сервиса
инструмент
• Подходящий под экспертизу команды и
каждого разработчика
• Open-Source Software
• SaaS
Быстро. Надёжно.
Эффективно.
Микросервисная архитектура
• Устойчивость
• Высокая скорость поставки
• Ментальная легкость изменений
• Свободный технологический стэк
• Быстро. Надёжно. Эффективно.
Микросервисная архитектура на базе CoreOS и Kubernetes
The Art Of Scalability
Scale Cube
31
Monolith
Infinite Scaling
Y axis -
functional
decomposition
X axis -
horizontal duplication
Zaxis-resources
partitioning
The Scale Cube
• X - добавление новых копий
приложения
• Y - разделение приложение на сервисы
• Z - разделение данных или ресурсов
(например, для платных
пользователей)
X-Axis Scaling
33
Load
Balancer
Application
Application
Application
Реплицирование

приложения
Y-Axis Scaling
34
Load
Balancer
Chat
Catalog
Orders
/catalog
/chat
/orders
Разбиение

приложения
• За какую функцию отвечает? Что делает? -
управление формами, отправка e-mail, мониторинг
• С какими данными работает? Кем используется?
- пользовательский UI, менеджеры, отдел
поддержки
• Комбинированный способ
• Single Responsibility Principle
Y-Axis Scaling
Z-Axis Scaling
36
Load
Balancer
[A - I]
[J - R]
[S - Z]
/catalog/*
/catalog/*
/catalog/*
Разделение

данных
Z-Axis Scaling
37
Load
Balancer
Regular
Premium
Premium
/catalog/*
/catalog/*
/catalog/*
Разделение

ресурсов
Scale Cube
38
Monolith
Infinite Scaling
Y axis -
functional
decomposition
X axis -
horizontal duplication
Zaxis-resources
partitioning
- OK, Google. Как с этим
двигаться?
Процесс роста
• Новая версия - новый сервис
• 





Новая версия - новый сервис
Blue-Green Deployment
Процесс роста
• Новая версия - новый сервис
• Effortless data model versioning for
Javascript and Node.js

https://github.com/TechnologyAdvice/
Vers
Микросервисная архитектура на базе CoreOS и Kubernetes
Процесс роста
• Новая версия - новый сервис
• Effortless data model versioning for
Javascript and Node.js

https://github.com/TechnologyAdvice/
Vers
• GraphQL
GraphQL
Микросервисная архитектура на базе CoreOS и Kubernetes
Scale Cube
47
Monolith
Infinite Scaling
Y axis -
functional
decomposition
X axis -
horizontal duplication
Zaxis-resources
partitioning
- С чего начать?
Разбиваем монолит
1. Сборка и поставка сервисов
2. Взаимодействие сервисов
3. Масштабирование
Сборка и поставка
сервисов
Платформа Docker
Docker allows you to package an application
with all of its dependencies into a
standardized unit for software development.
Build
Приложение +
Зависимости = Image
Run
1. Image via LXC
2. Network
3. Environment
Dockerfile
Dockerfile
Dockerfile
Input
Output
Dockerfile
Input
Output
container = f(env)
Docker Image
Docker Image
• Запускается в отдельном контейнере
• Иногда - ещё и Volumes
• Взаимодействует с другими контейнерами
через сетевой интерфейс





Взаимодействие
сервисов
Микросервисное взаимодействие
• RESTful API, JSON API
• OAuth, JWT
• AMQ, WebSocket, JSON RPC,
WAMP, etc
• API Based Collaboration
• Database
Масштабирование
Микросервисная архитектура на базе CoreOS и Kubernetes
CoreOS
• Скоро будет 3 года
• Мини-дистрибутив на базе Chrome OS
• Нет пакетного менеджера
• Все приложения - через Docker
• Cloud Config
• Автоматические обновления
• Инфраструктура для кластеров
CoreOS
• Etcd
• Fleet
• Flannel
Etcd
• Распределённое key-value хранилище
• Назначение:
• Общая конфигурация
• Service Discovery
• Блокировка ресурсов
Etcd
Fleet
• Распределённый systemd
• Набор Unit-файлов
• Назначение:
• Запуск Docker-контейнеров
• Распределение их в кластере
• Планирование запуска
Fleet - планирование
• Global (можно запускать в любом месте
кластера)
• MachineMetadata (только на определённых
машинах)
• Conflicts (для избежания конфликта с
коллоцированием)
• MachineOf (запускать только там, где
запущены определённые Unit)
Микросервисная архитектура на базе CoreOS и Kubernetes
Fleet
Fleet
Как Load Balancer узнает про
адрес и порт контейнеров?
Service Discovery
• Fleet Unit
• MachineOf
• Определяет IP и порт целевого контейнера
• Записывает в etcd
• Через 5 секунд повторяет
• = Sidekick Pattern
Service Discovery
• Fleet Unit
• MachineOf
• Определяет IP и порт целевого контейнера
• Записывает в etcd
• Через 5 секунд повторяет
• = Sidekick Pattern
Микросервисная архитектура на базе CoreOS и Kubernetes
Как объединить Docker-
контейнеры в одну сеть?
Flannel
CoreOS
• Etcd - распределённое
хранилище данных
CoreOS
• Etcd - распределённое
хранилище данных
• Fleet - распределённый запуск
CoreOS
• Etcd - распределённое
хранилище данных
• Fleet - распределённый запуск
• Flannel - виртуальная сеть
CoreOS
Real World Example
Микросервисная архитектура на базе CoreOS и Kubernetes
Реальный проект
• Несколько сервисов (Y)
• Сервис + Service Discovery
• Несколько экземпляров (X)
• Несколько окружений: dev,
stage, production
Реальный проект
Несколько сервисов (Y)
Сервис + Service Discovery
Несколько экземпляров (X)
Несколько окружений: dev,
stage, production
3
2
6
3
Реальный проект
3
2
6
3
= 108 контейнеров
х

x

x
Микросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и Kubernetes
Kubernetes
• Следующий уровень абстракции
• Pods - группы контейнеров
• Labels - тэги для идентификации Pods
• ReplicationController - количество копий
• Deployment - roll-out, roll-back, BGD
• cAdvisor - анализ производительности и
потребления ресурсов контейнеров
• UI и прочее - про это всё в следующий раз
Микросервисная архитектура на базе CoreOS и Kubernetes
Stay tuned
О чём не рассказал?
Deployment Automation
Concourse CI
Resource Type
Resource
Resource
Concourse Pipeline
www.concourse.ci
Мониторинг производительности и ошибок
Уведомления при недоступности сервисов
• Интеграционные тесты
• Synthetic monitoring
• Отправка E-mail и SMS
Логирование и агрегация логов
DC/OS
Мы рассмотрели
• Монолитная архитектура
• Микросервисная архитектура
• Модель Scale Cube
• Docker
• CoreOS
• Kubernetes
• Concourse CI
Микросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и Kubernetes
Спасибо за
внимание
Денис Измайлов
@DenisIzmaylov
https://github.com/DenisIzmaylov
www.startup-makers.com
denis_izmaylov
izmaylov.dm@gmail.com
Полезные ссылки
• http://www.reactivemanifesto.org/
• http://12factor.net/
• https://www.infoq.com/articles/seven-uservices-
antipatterns
• https://www.quora.com/In-the-future-of-data-center-
architecture-who-will-be-the-main-orchestrator-
controller-of-containers-Mesos-or-Kubernetes-What-
will-be-the-division-of-responsibilities

More Related Content

PDF
Изоморфные React-приложения: производительность и масштабирование
PDF
Изоморфные react-приложения
PDF
webpack: 7 бед - один ответ
PDF
Актуальные технологии и тренды в веб-разработке
PDF
"Изоморфная разработка на javascript с помощью react.js" Максим Климишин
PDF
Денис Измайлов, JavaScript сегодня: React, Redux и новая реальность
PPTX
Redux и изоморфные приложения
PDF
#5 "React.js" Антон Артамонов
Изоморфные React-приложения: производительность и масштабирование
Изоморфные react-приложения
webpack: 7 бед - один ответ
Актуальные технологии и тренды в веб-разработке
"Изоморфная разработка на javascript с помощью react.js" Максим Климишин
Денис Измайлов, JavaScript сегодня: React, Redux и новая реальность
Redux и изоморфные приложения
#5 "React.js" Антон Артамонов

What's hot (19)

PPTX
Изоморфные React-приложения производительность и масштабирование / Денис Изма...
PDF
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
PPTX
Delivering Native User Experience In Client Side Java Applications
PDF
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...
PDF
React.js – intro
PDF
Максим Пугачев
PPTX
Test driven development in net
PDF
WebAssembly
PDF
"Посмотрим на Акку-Джаву" Дмитрий Мантула
PPTX
Sql server clr integration
PDF
React + Redux. Опыт использования
PDF
Sergey Cherebedov. Node.js+Drupal
PPTX
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
PPTX
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
PPTX
Александр Кириллов. Веб разработка: Что такое Ruby On Rails. РИФ-Воронеж 2016
PDF
"Web Vitals monitoring & optimizations", Erik Himiranov
PPT
Владимир Никонов "Вызовы при разработке enterprise продукта"
PDF
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
PPTX
selenium stack in python
Изоморфные React-приложения производительность и масштабирование / Денис Изма...
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
Delivering Native User Experience In Client Side Java Applications
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...
React.js – intro
Максим Пугачев
Test driven development in net
WebAssembly
"Посмотрим на Акку-Джаву" Дмитрий Мантула
Sql server clr integration
React + Redux. Опыт использования
Sergey Cherebedov. Node.js+Drupal
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
Александр Кириллов. Веб разработка: Что такое Ruby On Rails. РИФ-Воронеж 2016
"Web Vitals monitoring & optimizations", Erik Himiranov
Владимир Никонов "Вызовы при разработке enterprise продукта"
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
selenium stack in python
Ad

Viewers also liked (20)

PDF
JavaScript сегодня: React, Redux и новая реальность
PDF
PreJSS: the final point in the CSS war
PDF
Performance and Scalability Art of Isomorphic React Applications
PDF
Isomorphic React Applications: Performance And Scalability
PDF
redux: the best for isomorphic apps
PDF
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
PDF
Масштабирование сервисов с помощью Apache Mesos
PDF
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
PPTX
Tina Turner The Queen of Rock and Roll
PPTX
La Regina del Rock and Roll
PPTX
Tina Turner La Regina del Rock and Roll
PPTX
Tina Turner La Reina del Rock and Roll
PDF
Idc business-value-of-openshift
PPTX
La Reina del Rock and Roll
PPTX
Tina Turner A Rainha do Rock and Roll
PDF
PPTX
The Queen of Rock and Roll
PPTX
Slideshare
PPTX
Die Königin Rock and Roll
PPTX
Tina Turner La Regina del Rock and Roll
JavaScript сегодня: React, Redux и новая реальность
PreJSS: the final point in the CSS war
Performance and Scalability Art of Isomorphic React Applications
Isomorphic React Applications: Performance And Scalability
redux: the best for isomorphic apps
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
Масштабирование сервисов с помощью Apache Mesos
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Tina Turner The Queen of Rock and Roll
La Regina del Rock and Roll
Tina Turner La Regina del Rock and Roll
Tina Turner La Reina del Rock and Roll
Idc business-value-of-openshift
La Reina del Rock and Roll
Tina Turner A Rainha do Rock and Roll
The Queen of Rock and Roll
Slideshare
Die Königin Rock and Roll
Tina Turner La Regina del Rock and Roll
Ad

Similar to Микросервисная архитектура на базе CoreOS и Kubernetes (20)

PPTX
Микросервисы в .NET Core
PPTX
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
PDF
Борис Павлович - Производительность и масштабируемость OpenStack
PDF
IT-инфраструктура. FAQ для разработчика
PPTX
Jelastic для разработчиков ПО
PDF
The impact of the cloud on development by Alexander Klimov, Igor Sukharev
PDF
The impact of the cloud on development by Alexander Klimov, Igor Sukharev
PPT
Backendless BaaS. Dinosaurus for Jeeconf 2013
PDF
Проектирование архитектуры крупных веб-систем
PDF
Точка кипения: проектирование крупных веб-систем
PDF
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
PDF
Javascript-фреймворки:
 должен остаться только один
PDF
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
PDF
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
PPTX
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
PDF
Обзор перспективных баз данных для highload / Юрий Насретдинов
PPTX
Jelastic PaaS for DevOps: Hybrid Cloud based on Microsoft Azure
PDF
Онлайн миграция контейнеров. Взгляд изнутри
PDF
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
PDF
Чему мы научились разрабатывая микросервисы?
Микросервисы в .NET Core
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Борис Павлович - Производительность и масштабируемость OpenStack
IT-инфраструктура. FAQ для разработчика
Jelastic для разработчиков ПО
The impact of the cloud on development by Alexander Klimov, Igor Sukharev
The impact of the cloud on development by Alexander Klimov, Igor Sukharev
Backendless BaaS. Dinosaurus for Jeeconf 2013
Проектирование архитектуры крупных веб-систем
Точка кипения: проектирование крупных веб-систем
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Обзор перспективных баз данных для highload / Юрий Насретдинов
Jelastic PaaS for DevOps: Hybrid Cloud based on Microsoft Azure
Онлайн миграция контейнеров. Взгляд изнутри
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
Чему мы научились разрабатывая микросервисы?

Микросервисная архитектура на базе CoreOS и Kubernetes