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

110
Микросервисная архитектура на базе CoreOS и Kubernetes Денис Измайлов 13 июля 2016

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

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

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

Денис Измайлов13 июля 2016

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

Денис Измайлов• 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

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

• Мы делаем web,

мобильные

приложения и DevOps

для наших клиентов

• Мы используем самые

передовые и

эффективные

технологии

• Более 20 талантливых

разработчиков

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

Микросервисы

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

“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”

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

Микросервисы не решают проблем

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

Микросервисы создают новый уровень проблем

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

Так ли это?

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

Монолитная архитектура

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

Хрупкость

Если падает, то падает всё

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

Хрупкость

Если падает, то падает всё

С учётом высокой связанности, падает всё часто

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

Низкая скорость поставки

Тяжелые процессы сборки и запуск

Необходимость выкатывать всё даже при небольших изменениях

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

Ментальная сложность изменений

• Slow IDE

• Ментальная нагрузка

• Высокая ответственность каждого

• Что я не должен делать?

• Высокие риски провала

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

Ментальная сложность изменений

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

Типичный монолит - человечное тело

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

Организационная сложность

Необходимость согласований и координации

Затягивание сроков

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

Дорогой технологический стэк

• Мы не можем его менять

• Необходимо брать с запасом, а это all-in-one и дорого

• Небольшой выбор средств

• Vendor lock-in

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

Медленно. Дорого. Высокие риски.

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

Монолитная архитектура

• Хрупкость

• Низкая скорость доставки

• Ментальная сложность изменений

• Организационная сложность

• Дорогой технологический стук

• Медленно. Дорого. Высокие риски.

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

Микросервисная архитектура

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

Устойчивость

Если падает один сервис, система продолжает работать

Fail-over. Сервисы взаимозаменяемы. Переключение.

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

Высокая скорость поставки

Быстрая сборка и запуск

Разработка и независимыевыкатка сервисов

Прогрессивное обновление UI

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

Ментальная легкость изменений

• Изолированность сервиса

• Низкие риски провала

• Точечные изменения

• Fast IDE

• Rollback

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

Свободный технологический стэк

• Agile Way

• Оптимальный для каждого сервиса инструмент

• Подходящий под экспертизу команды и каждого разработчика

• Open-Source Software

• SaaS

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

Быстро. Надёжно. Эффективно.

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

Микросервисная архитектура

• Устойчивость

• Высокая скорость поставки

• Ментальная легкость изменений

• Свободный технологический стэк

• Быстро. Надёжно. Эффективно.

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

The Art Of Scalability

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

Scale Cube

31

Monolith

Infinite Scaling

Y axis - functional

decomposition

X axis - horizontal duplication

Z axis

- re

sourc

es

partiti

oning

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

The Scale Cube

• X - добавление новых копий приложения

• Y - разделение приложение на сервисы

• Z - разделение данных или ресурсов (например, для платных пользователей)

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

X-Axis Scaling

33

Load

Balancer

Application

Application

ApplicationРеплицированиеприложения

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

Y-Axis Scaling

34

Load

Balancer

Chat

Catalog

Orders

/catalog

/chat

/orders

Разбиениеприложения

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

• За какую функцию отвечает? Что делает? - управление формами, отправка e-mail, мониторинг

• С какими данными работает? Кем используется? - пользовательский UI, менеджеры, отдел поддержки

• Комбинированный способ

• Single Responsibility Principle

Y-Axis Scaling

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

Z-Axis Scaling

36

Load

Balancer

[A - I]

[J - R]

[S - Z]

/catalog/*

/catalog/*

/catalog/*

Разделениеданных

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

Z-Axis Scaling

37

Load

Balancer

Regular

Premium

Premium

/catalog/*

/catalog/*

/catalog/*

Разделениересурсов

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

Scale Cube

38

Monolith

Infinite Scaling

Y axis - functional

decomposition

X axis - horizontal duplication

Z axis

- re

sourc

es

partiti

oning

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

- OK, Google. Как с этим двигаться?

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

Процесс роста

• Новая версия - новый сервис

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

Новая версия - новый сервис

Blue-Green Deployment

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

Процесс роста

• Новая версия - новый сервис

• Effortless data model versioning for Javascript and Node.jshttps://github.com/TechnologyAdvice/Vers

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

Процесс роста

• Новая версия - новый сервис

• Effortless data model versioning for Javascript and Node.jshttps://github.com/TechnologyAdvice/Vers

• GraphQL

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

GraphQL

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

Scale Cube

47

Monolith

Infinite Scaling

Y axis - functional

decomposition

X axis - horizontal duplication

Z axis

- re

sourc

es

partiti

oning

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

- С чего начать?

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

Разбиваем монолит

1. Сборка и поставка сервисов

2. Взаимодействие сервисов

3. Масштабирование

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

Сборка и поставка сервисов

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

Платформа Docker

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

Docker allows you to package an application with all of its dependencies into a

standardized unit for software development.

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

Build

Приложение + Зависимости = Image

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

Run

1. Image via LXC 2. Network 3. Environment

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

Dockerfile

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

Dockerfile

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

Dockerfile

Input

Output

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

Dockerfile

Input

Output

container = f(env)

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

Docker Image

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

Docker Image

• Запускается в отдельном контейнере

• Иногда - ещё и Volumes

• Взаимодействует с другими контейнерами через сетевой интерфейс

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

Взаимодействие сервисов

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

Микросервисное взаимодействие

• RESTful API, JSON API

• OAuth, JWT

• AMQ, WebSocket, JSON RPC, WAMP, etc

• API Based Collaboration

• Database

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

Масштабирование

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

CoreOS• Скоро будет 3 года

• Мини-дистрибутив на базе Chrome OS

• Нет пакетного менеджера

• Все приложения - через Docker

• Cloud Config

• Автоматические обновления

• Инфраструктура для кластеров

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

CoreOS

• Etcd

• Fleet

• Flannel

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

Etcd

• Распределённое key-value хранилище

• Назначение:

• Общая конфигурация

• Service Discovery

• Блокировка ресурсов

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

Etcd

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

Fleet

• Распределённый systemd

• Набор Unit-файлов

• Назначение:

• Запуск Docker-контейнеров

• Распределение их в кластере

• Планирование запуска

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

Fleet - планирование

• Global (можно запускать в любом месте кластера)

• MachineMetadata (только на определённых машинах)

• Conflicts (для избежания конфликта с коллоцированием)

• MachineOf (запускать только там, где запущены определённые Unit)

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

Fleet

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

Fleet

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

Как Load Balancer узнает про адрес и порт контейнеров?

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

Service Discovery• Fleet Unit

• MachineOf

• Определяет IP и порт целевого контейнера

• Записывает в etcd

• Через 5 секунд повторяет

• = Sidekick Pattern

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

Service Discovery• Fleet Unit

• MachineOf

• Определяет IP и порт целевого контейнера

• Записывает в etcd

• Через 5 секунд повторяет

• = Sidekick Pattern

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

Как объединить Docker-контейнеры в одну сеть?

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

Flannel

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

CoreOS

• Etcd - распределённое хранилище данных

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

CoreOS

• Etcd - распределённое хранилище данных

• Fleet - распределённый запуск

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

CoreOS

• Etcd - распределённое хранилище данных

• Fleet - распределённый запуск

• Flannel - виртуальная сеть

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

CoreOS

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

Real World Example

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

Реальный проект

• Несколько сервисов (Y)

• Сервис + Service Discovery

• Несколько экземпляров (X)

• Несколько окружений: dev, stage, production

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

Реальный проект

Несколько сервисов (Y)

Сервис + Service Discovery

Несколько экземпляров (X)

Несколько окружений: dev, stage, production

3

2

6

3

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

Реальный проект

3

2

6

3

= 108 контейнеров

х

x

x

Page 89: Микросервисная архитектура на базе CoreOS и Kubernetes
Page 90: Микросервисная архитектура на базе CoreOS и Kubernetes
Page 91: Микросервисная архитектура на базе CoreOS и Kubernetes

Kubernetes• Следующий уровень абстракции

• Pods - группы контейнеров

• Labels - тэги для идентификации Pods

• ReplicationController - количество копий

• Deployment - roll-out, roll-back, BGD

• cAdvisor - анализ производительности и потребления ресурсов контейнеров

• UI и прочее - про это всё в следующий раз

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

Stay tuned

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

О чём не рассказал?

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

Deployment Automation

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

Concourse CI

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

Resource Type

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

Resource

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

Resource

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

Concourse Pipeline

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

www.concourse.ci

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

Мониторинг производительности и ошибок

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

Уведомления при недоступности сервисов

• Интеграционные тесты

• Synthetic monitoring

• Отправка E-mail и SMS

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

Логирование и агрегация логов

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

DC/OS

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

Мы рассмотрели• Монолитная архитектура

• Микросервисная архитектура

• Модель Scale Cube

• Docker

• CoreOS

• Kubernetes

• Concourse CI

Page 107: Микросервисная архитектура на базе CoreOS и Kubernetes
Page 108: Микросервисная архитектура на базе CoreOS и Kubernetes
Page 109: Микросервисная архитектура на базе CoreOS и Kubernetes

Спасибо за вниманиеДенис Измайлов

@DenisIzmaylov

https://github.com/DenisIzmaylov

www.startup-makers.com

denis_izmaylov

[email protected]

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

Полезные ссылки• 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