![Page 1: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/1.jpg)
Микросервисные архитектуры
и немного жизненного опытаЕлена Румянцева
апрель 2015
![Page 2: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/2.jpg)
О чем доклад?Что такое микросервисы и зачем они нужны
SOA и MSOA: сходства и различия
Предусловия для перехода на (M)SOA
Как выделить микросервисы из монолита?
Бонус: что читать для погружения в тему
2
![Page 3: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/3.jpg)
Что такое микросервисы?
![Page 4: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/4.jpg)
Микросервисы
«Маленькие»
Автономные
Работают вместе
4
![Page 5: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/5.jpg)
Принцип единственной обязанности
How small is small?
Переписать за две недели
Организация кода и опыт
5
Размер
![Page 6: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/6.jpg)
Отдельные «приложения» на разных машинах?
«-»: Накладные расходы
«+»: Проще строить распределенные системы
6
Автономные
![Page 7: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/7.jpg)
Сервис должен уметь разворачиваться самостоятельно вне зависимости от наличия или отсутствия по соседству других сервисов и без изменений в других сервисах.
7
«Золотое правило»
![Page 8: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/8.jpg)
Максимальная толерантность к изменениям соседних сервисов
Слабая связанность
Коммуникация по сети
Использование разных технологий и языков программирования
8
Взаимодействие
![Page 9: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/9.jpg)
SOA и MSOA
![Page 10: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/10.jpg)
10
SOA MSOA
ESB Простые очереди и запросы
Бизнес-логика в ESB Бизнес-логика на стороне потребителей данных
Сложные стандарты Простые интерфейсы
![Page 11: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/11.jpg)
Зачем нужны микросервисы?
![Page 12: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/12.jpg)
Чтобы быстро!
![Page 13: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/13.jpg)
Зачем нужны микросервисы?
Быстро реализовать новую фичу
Быстро интегрировать ее в существующую систему
Быстро протестировать
Быстро порелизить
13
![Page 14: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/14.jpg)
Профит от сервиса как отдельностоящего приложенияНе надо копаться в чужих задачах из очереди на релиз
Меньше вероятности зааффектить другие сервисы из-за глупых ошибок
Проще выделить зоны ответственности конкретных людей за конкретный код
14
![Page 15: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/15.jpg)
Некоторые свойства микросервисов
![Page 16: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/16.jpg)
Асинхронность и событийность
Не более одного синхронного действия за один вызов
Реакция на события, генерируемые другими микросервисами
16
![Page 17: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/17.jpg)
Доступ к данным
Сервис не меняет данные другого сервиса напрямую
Использование API для изменения данных в соседнем сервисе
Использование очередей
17
![Page 18: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/18.jpg)
Request - Response (пример)
18
E
Requestor
Q
Replier
EQ
![Page 19: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/19.jpg)
Проектирование на отказ (Design for failure)
Вся система в целом должна работать так, как будто в любой момент любой из микросервисов может оказаться не доступен.
19
![Page 20: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/20.jpg)
«Интерфейсы» vs «Кишки»
«Интерфейсы» важны
«Кишки» не важны
20
![Page 21: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/21.jpg)
Как выделить микросервисы на практике
![Page 22: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/22.jpg)
Понимание предметной области
Построение микросервисов вокруг бизнес-услуг
DDD в помощь
22
![Page 23: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/23.jpg)
«Эволюционная архитектура»
Выделяем сервисы так, чтобы их можно было безболезненно переписать с нуля
23
![Page 24: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/24.jpg)
Взаимопонимание
Владельцы сервисов и ответственные лица
Коллеги из DEVOPS
Клиентские приложения
24
![Page 25: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/25.jpg)
Microservice way
Соответствует ли то, что я собираюсь делать, идеи микросервисов?
25
![Page 26: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/26.jpg)
Несколько примеров про использование микросервисов
![Page 27: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/27.jpg)
«Оркестровка» и «хореография»
27
![Page 28: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/28.jpg)
«Оркестровка»
28
![Page 29: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/29.jpg)
«Хореография»
29
![Page 30: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/30.jpg)
Пример про импорт данных
Основную информацию импортируем синхронно из основного сервиса
Фотки загружает и импортирует другой сервис
Анализом данных занимается третий сервис
30
![Page 31: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/31.jpg)
Клиентские приложения и сервисы
31
![Page 32: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/32.jpg)
Монолитный API-шлюз
32
![Page 33: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/33.jpg)
Специальные бэкэнды для фронтендов
33
![Page 34: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/34.jpg)
Начинать с монолита — проще!
Откалываем по кусочкам
Начинаем там, где от микросервисов будет больше пользы
Уменьшаем количество коммуникаций между модулями
34
Разбиваем монолит
![Page 35: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/35.jpg)
Закон Конвея
![Page 36: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/36.jpg)
«Организации, занимающиеся проектированием систем, неизбежно производят системы, повторяющие структуру их коммуникаций»
36
![Page 37: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/37.jpg)
Вывод
Чтобы успешно проектировать микросервисы, команда сама должна взаимодействовать как совокупность микросервисов
«Фичатим»
37
![Page 38: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/38.jpg)
Когда есть смысл переходить на (микро-) сервисы
Команда разработчиков уже большая или планируется ее расширение
Нужно реализовать много новых крупных фич, в т.ч. новых сущностей
38
![Page 39: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/39.jpg)
Необходимые инструментыдля перехода на микросервисы
![Page 40: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/40.jpg)
«DEVOPS — наше всё»
![Page 41: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/41.jpg)
Необходимые инструментыдля перехода на микросервисы
или несколько слов на «авто-»Автокопирование базовых файлов из шаблона
Авторазвервертвание (и автосвертывание) микросервисов на боевых и любых окружениях
Автодокументация фронтендов
Автомониторинг фронтендов
Автоокументирование и автомониторинг взаимодействия микросервисов между собой
41
![Page 42: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/42.jpg)
Немного жизненного опыта
![Page 43: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/43.jpg)
Не ждите чуда, чудите самирелизьте без тестирования
Релизьте сырое!
Релизьте с багами!
Релизьте то, что еще никто не собирается использовать!
43
![Page 44: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/44.jpg)
Другие важные темы
Как всё это тестировать?
Как разворачивать микросервисы на любом окружении?
Как масштабировать?
Как мониторить?
SLA и метрики на сервисы
Аутентификация и авторизация
44
![Page 45: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/45.jpg)
Что читать?
![Page 46: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/46.jpg)
James LewisMartin Fowler
Microservices
http://martinfowler.com/articles/microservices.html
46
![Page 47: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/47.jpg)
Sam Newman
Building Microservices
http://info.thoughtworks.com/building-microservices-book.html
47
![Page 48: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/48.jpg)
SoundCloud
Dealing with the Monolith
https://developers.soundcloud.com/blog/building-products-at-soundcloud-part-1-dealing-with-the-monolith
48
![Page 49: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/49.jpg)
Микросервисы — не бесплатный обед
http://highscalability.com/blog/2014/4/8/microservices-not-a-free-lunch.html
49
![Page 50: Микросервисные архитектуры и немного жизненного опыта](https://reader036.vdocuments.net/reader036/viewer/2022081513/55a87e9a1a28ab41058b4605/html5/thumbnails/50.jpg)
Вопросы?
Елена Румянцеваtwitter.com/webdeva
vk.com/devngs