«Microservices. Как правильно делать и когда применять?»

60
Microservices Pros and cons. Speaker Vyacheslav Mikhaylov ([email protected] ) IT Talks 1

Transcript of «Microservices. Как правильно делать и когда применять?»

Page 1: «Microservices. Как правильно делать и когда применять?»

1

MicroservicesPros and cons.

Speaker Vyacheslav Mikhaylov ([email protected])

IT Talks

Page 2: «Microservices. Как правильно делать и когда применять?»

2

О чем доклад?• Что такое микросервисы?• Немного теории• За и против различных типов архитектур• Способы взаимодействия сервисов• Когда делать монолит, а когда микросервисы?

Page 3: «Microservices. Как правильно делать и когда применять?»

3

Монолит

Page 4: «Microservices. Как правильно делать и когда применять?»

4

МонолитUser Interface

Business Logic Layer

Data Access Layer

DataBase

Page 5: «Microservices. Как правильно делать и когда применять?»

5

МонолитUser Interface (App1)

Business Logic Layer

Data Access Layer

DataBase

User Interface (App2)

Business Logic Layer

Data Access Layer

Page 6: «Microservices. Как правильно делать и когда применять?»

6

Проблемы• Растет сложность системы• Сложно поддерживать• Не разобраться

Page 7: «Microservices. Как правильно делать и когда применять?»

7

Проблемы• Много багов• Мало тестов• Дорого вносить изменения

Page 8: «Microservices. Как правильно делать и когда применять?»

8

Проблемы• Застревание на технологиях

Page 9: «Microservices. Как правильно делать и когда применять?»

9

Приходит он…

Page 10: «Microservices. Как правильно делать и когда применять?»

10

Развитие системы• Как сделать систему доступной из разный регионов?• Как обеспечить согласованность данных?• Как ускорить систем в N раз?

Page 11: «Microservices. Как правильно делать и когда применять?»

11

CAP “теорема”Согласованность

Доступность Разделяемость

Page 12: «Microservices. Как правильно делать и когда применять?»

12

CA – consistency + availability• Данные во всех узлах согласованы• Обеспечена доступность• Жертвуем распадом на секции

• ACID• классические монолиты

Page 13: «Microservices. Как правильно делать и когда применять?»

13

CP – consistency + partitioning• Данные во всех узлах согласованы• Способна разделяться на независимые секции • Жертвуем отсутствием отклика

(долго согласуются транзакции)

• Монолиты, которым пришлось скалироваться.

Page 14: «Microservices. Как правильно делать и когда применять?»

14

AP – availability + partitioning• Система доступна с предсказуемым временем отклика• Система распределена • Отказ от целостности результата.

• Eventually consistent• DNS

- Знаете как заинтересовать идиота?- Как?- Завтра расскажу

Page 15: «Microservices. Как правильно делать и когда применять?»

15

Развитие системы• Как сделать систему доступной из разный регионов?• Как обеспечить согласованность данных?• Как ускорить систем в N раз?

НИКАК!

Page 16: «Microservices. Как правильно делать и когда применять?»

16

Что же делать?

CA

APCP

Page 17: «Microservices. Как правильно делать и когда применять?»

17

Page 18: «Microservices. Как правильно делать и когда применять?»

18

Scale Cube

Sharding

Mirroring

Microservices

Page 19: «Microservices. Как правильно делать и когда применять?»

19

Page 20: «Microservices. Как правильно делать и когда применять?»

20

Page 21: «Microservices. Как правильно делать и когда применять?»

21

Microservices & SOA

SOA

Microservices

Page 22: «Microservices. Как правильно делать и когда применять?»

22

Что такое Микросервисы?Архитектурный паттерн в котором сервисы:• Small• Focused• Loosely coupled• Highly cohesive

Page 23: «Microservices. Как правильно делать и когда применять?»

23

Small• Насколько маленький?• Разрабатывается одной командой (7±2)• Одна бизнес задача• Один человек в состоянии понять сервис

Page 24: «Microservices. Как правильно делать и когда применять?»

24

Focused• Что значит сфокусированный?• Решает только одну бизнес задачу,

но решает ее хорошо• Имеет смысл в отрыве от остальных

сервисов

Page 25: «Microservices. Как правильно делать и когда применять?»

25

Low coupled• Что такое сильное зацепление и слабое зацепление?• Изменения одного класса/модуля слабо влияет на необходимость

изменений другого• IoC, DI

Page 26: «Microservices. Как правильно делать и когда применять?»

26

High cohesion• Высокое сцепление (согласованность)• Класс/компонент содержит все нужные

методы для решения поставленной задачи

Page 27: «Microservices. Как правильно делать и когда применять?»

27

High cohesion vs SRP• У нас есть класс, отвечающий за управление кухней

• SRP – Класс содержит методы по управлению только КУХНЕЙ• HC – Класс содержит ВСЕ методы по управлению кухней

Page 28: «Microservices. Как правильно делать и когда применять?»

28

Характеристики микросервисов• Разделение на компоненты (сервисы)• Группировка по бизнес задачам• Сервисы имеют бизнес-смысл• Умные сервисы & простые коммуникации• Децентрализованное управление • Децентрализованное управление данными• Автоматизация развертывания и мониторинга• Design for failure (Chaos Monkey)

Page 29: «Microservices. Как правильно делать и когда применять?»

29

Компоненты

Компонент

Библиотеки

Сервисы

Page 30: «Microservices. Как правильно делать и когда применять?»

30

Компоненты

Компонент

Независимо заменяемый

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

Page 31: «Microservices. Как правильно делать и когда применять?»

31

Характеристики микросервисов• Разделение на компоненты (сервисы)• Группировка по бизнес задачам• Сервисы имеют бизнес-смысл• Умные сервисы & простые коммуникации• Децентрализованное управление • Децентрализованное управление данными• Автоматизация развертывания и мониторинга• Design for failure (Chaos Monkey)

Page 32: «Microservices. Как правильно делать и когда применять?»

32

Группировка по бизнес задачам

UI

BL

DB

Order Management

Order Execution

Market Data

Page 33: «Microservices. Как правильно делать и когда применять?»

33

Характеристики микросервисов• Разделение на компоненты (сервисы)• Группировка по бизнес задачам• Сервисы имеют бизнес-смысл• Умные сервисы & простые коммуникации• Децентрализованное управление • Децентрализованное управление данными• Автоматизация развертывания и мониторинга• Design for failure (Chaos Monkey)

Page 34: «Microservices. Как правильно делать и когда применять?»

34

Умные сервисы & простые коммуникации

ESB

Page 35: «Microservices. Как правильно делать и когда применять?»

35

Умные сервисы & простые коммуникации

ESB

Page 36: «Microservices. Как правильно делать и когда применять?»

36

Характеристики микросервисов• Разделение на компоненты (сервисы)• Группировка по бизнес задачам• Сервисы имеют бизнес-смысл• Умные сервисы & простые коммуникации• Децентрализованное управление • Децентрализованное хранение• Автоматизация развертывания и мониторинга• Design for failure (Chaos Monkey)

Page 37: «Microservices. Как правильно делать и когда применять?»

37

Децентрализованное хранений

Service A Service B Service C Service C

Page 38: «Microservices. Как правильно делать и когда применять?»

38

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

Service A Service B Service C Service C

Page 39: «Microservices. Как правильно делать и когда применять?»

39

Автоматизация развертывания и мониторинга

Page 40: «Microservices. Как правильно делать и когда применять?»

40

Chaos Monkey

Page 41: «Microservices. Как правильно делать и когда применять?»

41

Design for failure

Page 42: «Microservices. Как правильно делать и когда применять?»

42

Simple app

Page 43: «Microservices. Как правильно делать и когда применять?»

43

API Gateway

Page 44: «Microservices. Как правильно делать и когда применять?»

44

Разные типы архитектур• Service Discovery (RPC Style)• Message Bus (Event Driven)• Hybrid

Page 45: «Microservices. Как правильно делать и когда применять?»

45

Service Discovery

Page 46: «Microservices. Как правильно делать и когда применять?»

46

Service Discovery (Server – Side)

Page 47: «Microservices. Как правильно делать и когда применять?»

47

Service Discovery (Client – Side)

Page 48: «Microservices. Как правильно делать и когда применять?»

48

Message Bus• Нужно уметь готовить• Нужно поддерживать• Снижение производительности за счет появления брокера

Page 49: «Microservices. Как правильно делать и когда применять?»

49

Message BusЗА ПРОТИВ

Диктует архитектуру Сложно менять контракты

Легко расширять Обычно асинхронны

Построена для скалируемости Нужна хорошая квалификация

Круто звучит Сложности развертывания и поддержки

Есть готовые решения. Написано не нами

Page 50: «Microservices. Как правильно делать и когда применять?»

50

Event Driven Architecture

Page 51: «Microservices. Как правильно делать и когда применять?»

51

Event Driven Architecture

Page 52: «Microservices. Как правильно делать и когда применять?»

52

Event Driven Architecture

Page 53: «Microservices. Как правильно делать и когда применять?»

53

Переход от монолита к микросервисам• Ограниченный бизнес контекст• Частота изменений• Структура команды (Conway’s law)• Меняем то, что сильнее болит

Page 54: «Microservices. Как правильно делать и когда применять?»

54

Как выбрать?Монолит Микросервисы

Page 55: «Microservices. Как правильно делать и когда применять?»

55

Как выбрать?Монолит Микросервисы

Новый домен, нет знаний домена

Прототипы, Быстрое решение

Низкая квалификация (все джуны)

Написал и забыл

Мало денег

Page 56: «Microservices. Как правильно делать и когда применять?»

56

Как выбрать?Монолит Микросервисы

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

Прототипы, Быстрое решение Мы можете обеспечить согласованность на бизнес уровне

Низкая квалификация (все джуны) Высокая квалификация, есть опыт и пара загубленных проектов в прошлом

Написал и забыл Готовы инвестировать в инфраструктуру

Мало денег Много денег

Page 57: «Microservices. Как правильно делать и когда применять?»

57

За и противМикросервисы дают преимущества… За счет…

Strong Module BoundariesМикросервисы усиливают модульную структуру, что особенно важно для больших команд разработчиков.

DistributionТяжелее разрабатывать. Нужен опыт и хороший опыт.

АvailabilityСервисы могут работать не все

Eventual Consistencyпридется иметь дело со слабой (отложенной) целостностью

Technology DiversityЛегко менять технологии, пробовать что-то действительно подходящее. Правильные инструменты

Operational ComplexityОпытная команда Devop’ов

Independent DeploymentПростые сервисы проще деплоитьМеньше вероятность отказа системы

Page 58: «Microservices. Как правильно делать и когда применять?»

58

Jeff Bezos Manifesto• All teams will henceforth expose their data and functionality through service

interfaces.• Teams must communicate with each other through these interfaces.

• no direct linking• no direct reads of another team’s data store• no shared-memory model• no back-doors whatsoever. • The only communication allowed is via service interface calls over the network.

• It doesn’t matter what technology they use.• All service interfaces, without exception, must be designed from the ground up to be

externalizable. • No exceptions.

Page 59: «Microservices. Как правильно делать и когда применять?»

59

Источники• https://www.nginx.com/blog/

• https://www.nginx.com/blog/introduction-to-microservices/

• https://www.nginx.com/blog/building-microservices-inter-process-communication/

• http://plainoldobjects.com/presentations/decomposing-applications-for-deployability-and-scalability/

• http://highscalability.com/blog/2016/2/10/how-to-build-your-property-management-system-integration-usi.html

• https://lostechies.com/gabrielschenker/2016/01/27/service-discovery/

• http://microservices.io/

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

Page 60: «Microservices. Как правильно делать и когда применять?»

Thank youTo be continued…