50
Микросервисные архитектуры и немного жизненного опыта Елена Румянцева апрель 2015

Микросервисные архитектуры и немного жизненного опыта

Embed Size (px)

Citation preview

Page 1: Микросервисные архитектуры и немного жизненного опыта

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

и немного жизненного опытаЕлена Румянцева

апрель 2015

Page 2: Микросервисные архитектуры и немного жизненного опыта

О чем доклад?Что такое микросервисы и зачем они нужны

SOA и MSOA: сходства и различия

Предусловия для перехода на (M)SOA

Как выделить микросервисы из монолита?

Бонус: что читать для погружения в тему

2

Page 3: Микросервисные архитектуры и немного жизненного опыта

Что такое микросервисы?

Page 4: Микросервисные архитектуры и немного жизненного опыта

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

«Маленькие»

Автономные

Работают вместе

4

Page 5: Микросервисные архитектуры и немного жизненного опыта

Принцип единственной обязанности

How small is small?

Переписать за две недели

Организация кода и опыт

5

Размер

Page 6: Микросервисные архитектуры и немного жизненного опыта

Отдельные «приложения» на разных машинах?

«-»: Накладные расходы

«+»: Проще строить распределенные системы

6

Автономные

Page 7: Микросервисные архитектуры и немного жизненного опыта

Сервис должен уметь разворачиваться самостоятельно вне зависимости от наличия или отсутствия по соседству других сервисов и без изменений в других сервисах.

7

«Золотое правило»

Page 8: Микросервисные архитектуры и немного жизненного опыта

Максимальная толерантность к изменениям соседних сервисов

Слабая связанность

Коммуникация по сети

Использование разных технологий и языков программирования

8

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

Page 9: Микросервисные архитектуры и немного жизненного опыта

SOA и MSOA

Page 10: Микросервисные архитектуры и немного жизненного опыта

10

SOA MSOA

ESB Простые очереди и запросы

Бизнес-логика в ESB Бизнес-логика на стороне потребителей данных

Сложные стандарты Простые интерфейсы

Page 11: Микросервисные архитектуры и немного жизненного опыта

Зачем нужны микросервисы?

Page 12: Микросервисные архитектуры и немного жизненного опыта

Чтобы быстро!

Page 13: Микросервисные архитектуры и немного жизненного опыта

Зачем нужны микросервисы?

Быстро реализовать новую фичу

Быстро интегрировать ее в существующую систему

Быстро протестировать

Быстро порелизить

13

Page 14: Микросервисные архитектуры и немного жизненного опыта

Профит от сервиса как отдельностоящего приложенияНе надо копаться в чужих задачах из очереди на релиз

Меньше вероятности зааффектить другие сервисы из-за глупых ошибок

Проще выделить зоны ответственности конкретных людей за конкретный код

14

Page 15: Микросервисные архитектуры и немного жизненного опыта

Некоторые свойства микросервисов

Page 16: Микросервисные архитектуры и немного жизненного опыта

Асинхронность и событийность

Не более одного синхронного действия за один вызов

Реакция на события, генерируемые другими микросервисами

16

Page 17: Микросервисные архитектуры и немного жизненного опыта

Доступ к данным

Сервис не меняет данные другого сервиса напрямую

Использование API для изменения данных в соседнем сервисе

Использование очередей

17

Page 18: Микросервисные архитектуры и немного жизненного опыта

Request - Response (пример)

18

E

Requestor

Q

Replier

EQ

Page 19: Микросервисные архитектуры и немного жизненного опыта

Проектирование на отказ (Design for failure)

Вся система в целом должна работать так, как будто в любой момент любой из микросервисов может оказаться не доступен.

19

Page 20: Микросервисные архитектуры и немного жизненного опыта

«Интерфейсы» vs «Кишки»

«Интерфейсы» важны

«Кишки» не важны

20

Page 21: Микросервисные архитектуры и немного жизненного опыта

Как выделить микросервисы на практике

Page 22: Микросервисные архитектуры и немного жизненного опыта

Понимание предметной области

Построение микросервисов вокруг бизнес-услуг

DDD в помощь

22

Page 23: Микросервисные архитектуры и немного жизненного опыта

«Эволюционная архитектура»

Выделяем сервисы так, чтобы их можно было безболезненно переписать с нуля

23

Page 24: Микросервисные архитектуры и немного жизненного опыта

Взаимопонимание

Владельцы сервисов и ответственные лица

Коллеги из DEVOPS

Клиентские приложения

24

Page 25: Микросервисные архитектуры и немного жизненного опыта

Microservice way

Соответствует ли то, что я собираюсь делать, идеи микросервисов?

25

Page 26: Микросервисные архитектуры и немного жизненного опыта

Несколько примеров про использование микросервисов

Page 27: Микросервисные архитектуры и немного жизненного опыта

«Оркестровка» и «хореография»

27

Page 28: Микросервисные архитектуры и немного жизненного опыта

«Оркестровка»

28

Page 29: Микросервисные архитектуры и немного жизненного опыта

«Хореография»

29

Page 30: Микросервисные архитектуры и немного жизненного опыта

Пример про импорт данных

Основную информацию импортируем синхронно из основного сервиса

Фотки загружает и импортирует другой сервис

Анализом данных занимается третий сервис

30

Page 31: Микросервисные архитектуры и немного жизненного опыта

Клиентские приложения и сервисы

31

Page 32: Микросервисные архитектуры и немного жизненного опыта

Монолитный API-шлюз

32

Page 33: Микросервисные архитектуры и немного жизненного опыта

Специальные бэкэнды для фронтендов

33

Page 34: Микросервисные архитектуры и немного жизненного опыта

Начинать с монолита — проще!

Откалываем по кусочкам

Начинаем там, где от микросервисов будет больше пользы

Уменьшаем количество коммуникаций между модулями

34

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

Page 35: Микросервисные архитектуры и немного жизненного опыта

Закон Конвея

Page 36: Микросервисные архитектуры и немного жизненного опыта

«Организации, занимающиеся проектированием систем, неизбежно производят системы, повторяющие структуру их коммуникаций»

36

Page 37: Микросервисные архитектуры и немного жизненного опыта

Вывод

Чтобы успешно проектировать микросервисы, команда сама должна взаимодействовать как совокупность микросервисов

«Фичатим»

37

Page 38: Микросервисные архитектуры и немного жизненного опыта

Когда есть смысл переходить на (микро-) сервисы

Команда разработчиков уже большая или планируется ее расширение

Нужно реализовать много новых крупных фич, в т.ч. новых сущностей

38

Page 39: Микросервисные архитектуры и немного жизненного опыта

Необходимые инструментыдля перехода на микросервисы

Page 40: Микросервисные архитектуры и немного жизненного опыта

«DEVOPS — наше всё»

Page 41: Микросервисные архитектуры и немного жизненного опыта

Необходимые инструментыдля перехода на микросервисы

или несколько слов на «авто-»Автокопирование базовых файлов из шаблона

Авторазвервертвание (и автосвертывание) микросервисов на боевых и любых окружениях

Автодокументация фронтендов

Автомониторинг фронтендов

Автоокументирование и автомониторинг взаимодействия микросервисов между собой

41

Page 42: Микросервисные архитектуры и немного жизненного опыта

Немного жизненного опыта

Page 43: Микросервисные архитектуры и немного жизненного опыта

Не ждите чуда, чудите самирелизьте без тестирования

Релизьте сырое!

Релизьте с багами!

Релизьте то, что еще никто не собирается использовать!

43

Page 44: Микросервисные архитектуры и немного жизненного опыта

Другие важные темы

Как всё это тестировать?

Как разворачивать микросервисы на любом окружении?

Как масштабировать?

Как мониторить?

SLA и метрики на сервисы

Аутентификация и авторизация

44

Page 45: Микросервисные архитектуры и немного жизненного опыта

Что читать?

Page 46: Микросервисные архитектуры и немного жизненного опыта

James LewisMartin Fowler

Microservices

http://martinfowler.com/articles/microservices.html

46

Page 47: Микросервисные архитектуры и немного жизненного опыта

Sam Newman

Building Microservices

http://info.thoughtworks.com/building-microservices-book.html

47

Page 48: Микросервисные архитектуры и немного жизненного опыта

SoundCloud

Dealing with the Monolith

https://developers.soundcloud.com/blog/building-products-at-soundcloud-part-1-dealing-with-the-monolith

48

Page 49: Микросервисные архитектуры и немного жизненного опыта

Микросервисы — не бесплатный обед

http://highscalability.com/blog/2014/4/8/microservices-not-a-free-lunch.html

49

Page 50: Микросервисные архитектуры и немного жизненного опыта

Вопросы?

Елена Румянцеваtwitter.com/webdeva

vk.com/devngs