76
МИКРОСЕРВИСНАЯ АРХИТЕКТУРА В ТЕОРИИ И НА ПРАКТИКЕ: ОПЫТ «СКБ КОНТУР» Иван Бурмистров Иван Дашкевич Александр Казаков

DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Embed Size (px)

Citation preview

Page 1: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

МИКРОСЕРВИСНАЯ АРХИТЕКТУРА В ТЕОРИИ И НА

ПРАКТИКЕ: ОПЫТ «СКБ КОНТУР»

Иван Бурмистров

Иван Дашкевич

Александр Казаков

Page 2: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Agenda

• Стек: .NET, IIS, Windows

• Сервисы: EDI, Диадок, Экстерн

• Сложность архитектуры: S → M → L → XL

Page 3: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Микросервис: что это?

• То же, что буква S в аббревиатуре SOA

• Легковесное приложение, решающее ровно одну задачу

• Небольшая утилита из не более чем 100 строк кода

• Что угодно с публичным API через HTTP протокол

• Компонент системы, работу которого знает «от» и «до» хотя бы один разработчик в команде

• …

Page 4: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Микросервисы: опыт «СКБ Контур»

• Микросервис – это отдельный процесс

• От 1-2 до нескольких сотен микросервисов в продуктах

• Где 10, там и 20

• На разных этапах развития требуются разные подходы

Page 5: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Продукт размера S (ранний EDI)Некогда объяснять, нужно делать фичи. Срочно.

JavaScript, html

Front

Cassandra

Front

Nginx

Page 6: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

«Размер S»: must have

• Логирование: нужно знать, почему у пользователя ошибка. Используем стандартные средства логирования (в нашем случае log4net)

• Обновление схемы БД: помнить про возможные несовместимые изменения

Page 7: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

«S» → «M»

Page 8: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

«S» → «M»

Page 9: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

«S» → «M»

JavaScript, html

Front Cassandra

Front

Nginx

Page 10: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

«S» → «M»

JavaScript, html

Front Cassandra

Front

Nginx Index

Page 11: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

«S» → «M»

JavaScript, html

Front Cassandra

Front

Nginx

Письма Печать pdf

IndexQueue

Page 12: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

«Размер M»: ключевые цифры

• 4-6 разработчиков

• 1-6 Тб данных

• 10 микросервисов

• 10 физических серверов

Page 13: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Проблема: все время что-то «лежит»

Page 14: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Проблема: все время что-то «лежит»

• Решение: Мониторинг «живости» - достаточно простых скриптов

Page 15: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Проблема: ручное обновление – стресс

Page 16: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Проблема: ручное обновление – стресс

• Решение: Автоматизированный деплой (простые скрипты)

Page 17: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Проблема: все время заканчивается место

Page 18: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Проблема: все время заканчивается место

• Решение: Скрипт мониторинга свободного места, ручная очистка

Page 19: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Проблема: Service Discovery

Page 20: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Проблема: Service Discovery

• Решение: Достаточно файликов рядом с каждым микросервисом + голова при обновлениях

Page 21: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Проблема: протокол взамодействия

Page 22: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Проблема: протокол взамодействия

• Решение: Выбрать удобный сериализатор (например, protobuf) + голова при обновлениях

Page 23: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

«M» → «L»

Page 24: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Диадок

8 разработчиков70 микросервисов

Page 25: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Проблема: как искать, где ошибка?

JavaScript, html

FrontNginx

ПисьмаIndex

Page 26: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Решение: request-id

• Пробрасывать• Через Http

• В Rabbit-хэндлеры

• В порождаемые потоки

• Не забывать логировать• Log4net ThreadContext

Page 27: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Проблема: как искать, что случилось?

• Не ясно, за какой диапазон искать

• Не ясно, в логах какого сервиса искать

• Все это также очень долго

Page 28: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Решение: централизованное логирование

Page 29: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Проблема: а жив ли сервис?

• Мониторинг живости – маловато будет

• Нужен мониторинг адекватности

Page 30: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Решение: graphite, grafana, seyren

• Graphite – хранит факты, умеет строить графики

• Встроить запись в графит:• Http: сервер/клиент

• RabbitMQ: enqueue/dequeuer

• Периодические процессы (по расписанию или по таймауту)

• Grafana

• Seyren

Page 31: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Проблема: deployment

• Требуется:• Разливать новые версии

• Запускать/останавливать новые реплики

• Накат/откат новых версий

• Смотреть состояние

Page 32: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ
Page 33: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Проблема: service discovery

• Синхронизация

• Полнота

Page 34: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Решение: решать можно по разному

• Вариант: заточить свой инструмент деплоя

• Вариант: централизованное хранение• В Контур-Экстерне: ClusterConfig

Page 35: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Продукт размера XLБольшой продукт, несколько команд

Page 36: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Контур-Экстерн

70 разработчиков10 команд

250 TB основное хранилище

более 200 различных сервисовболее 1500 работающих экземпляров (реплик)

Page 37: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Team 2 Team 3

Team 1

Page 38: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Team 2 Team 3

Team 1

Page 39: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Team 2 Team 3

Team 1

Проблема: сложность взаимодействия с внешними сервисами

Page 40: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Team 2 Team 3

Team 1

API

API API

API API

API

Page 41: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Внешний API

• Версионность

Page 42: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Внешний API

• Версионность

• Документация

Page 43: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Внешний API

• Версионность

• Документация

• RESTful

Page 44: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

а внутренний ?

Внешний API

• Версионность

• Документация

• RESTful

Page 45: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

RESTful API — игрушка для девочек

Page 46: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

RESTful API — игрушка для девочек

Настоящий мужик напишет хорошего клиента

Page 47: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

R1

R2

R3

Page 48: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

R1

R2

R3

Page 49: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

timeout

R1

R2

R3

Page 50: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

R1

R2

R3

Page 51: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

timeout = 30 sec

30% requests > 30 sec

R1

R2

R3

Page 52: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

“Разумный” timeout

Желаемый отклик

Особенность сервиса

Page 53: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

timeout = 10 sec

t (sec)

0

Сервис 2Сервис 1

Page 54: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

timeout = 10 sec

request time ~ 12 sec

t (sec)

0

10

20

30

100

Сервис 2Сервис 1

ERR

Page 55: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Стратегии отправки запросов

Page 56: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Стратегии отправки запросов

Последовательная (линейная)

Page 57: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Стратегии отправки запросов

Последовательная (линейная)

Параллельная

Page 58: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Стратегии отправки запросов

Последовательная (линейная)

Параллельная

Адаптивная параллельность

Page 59: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

t0 T/3 2T/3 T

R1

R2

R3

Page 60: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

timeout=T

t0 T/3 2T/3 T

мы тут

R1

R2

R3

Page 61: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

t0 T/3 2T/3 T

мы тут

OK R1

R2

R3

Page 62: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

timeout=T

t0 T/3 2T/3 T

timeout=2T/3

мы тут

R1

R2

R3

Page 63: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

timeout=T

t0 T/3 2T/3 T

timeout=2T/3

timeout=T/3

мы тут

R1

R2

R3

Page 64: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

OK

timeout=T

t0 T/3 2T/3 T

timeout=2T/3

timeout=T/3

мы тут

R1

R2

R3

Page 65: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

t0 1 5 15 30

R1

R2

R3

R4

Page 66: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Написал сервис — напиши клиента

Page 67: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Сколько делать попыток?

Page 68: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

client.Call(attempts=3)

Page 69: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Количество попыток отправки запроса

Крайний случай № 1

Все 3 попытки сдохли за 10 мс

Page 70: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Количество попыток отправки запроса

Крайний случай № 2

Каждая из 3-х попыток зависла на 30 сек

Клиент отвалился через 15 секунд

Page 71: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

client.Call(timeout=5000)

Page 72: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Думайте сами, решайте сами…

Page 73: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Team NTeam 1 …

Ops

Page 74: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Team NTeam 1 …

Ops

Проблема: зоопарк технологий и подходов для деплоя и мониторинга

Page 75: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Team NTeam 1 …

Ops

Проблема: зоопарк технологий и подходов для деплоя и мониторинга

Решение: DevOps

DevOps

Page 76: DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров, Александр Казаков, СКБ

Итого

• Размер S: логирование, обновление схемы БД

• Размер M: скрипты для простого мониторинга, деплоя, думать при обновлениях

• Размер L: трассировка запросов, централизованные логи, продвинутый деплой, метрики

• Размер XL: RESTful API, версионность, SDK, отдел DevOps