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

Post on 17-Jul-2015

260 views 0 download

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

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

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

апрель 2015

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

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

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

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

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

2

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

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

«Маленькие»

Автономные

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

4

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

How small is small?

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

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

5

Размер

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

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

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

6

Автономные

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

7

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

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

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

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

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

8

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

SOA и MSOA

10

SOA MSOA

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

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

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

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

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

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

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

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

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

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

13

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

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

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

14

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

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

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

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

16

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

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

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

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

17

Request - Response (пример)

18

E

Requestor

Q

Replier

EQ

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

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

19

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

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

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

20

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

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

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

DDD в помощь

22

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

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

23

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

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

Коллеги из DEVOPS

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

24

Microservice way

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

25

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

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

27

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

28

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

29

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

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

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

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

30

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

31

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

32

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

33

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

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

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

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

34

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

Закон Конвея

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

36

Вывод

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

«Фичатим»

37

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

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

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

38

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

«DEVOPS — наше всё»

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

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

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

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

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

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

41

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

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

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

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

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

43

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

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

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

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

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

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

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

44

Что читать?

James LewisMartin Fowler

Microservices

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

46

Sam Newman

Building Microservices

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

47

SoundCloud

Dealing with the Monolith

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

48

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

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

49

Вопросы?

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

vk.com/devngs