Microservices
Pros and cons.
Speaker Vyacheslav Mikhaylov (vmikhaylov@dataart.com)
IT Talks
1
О чем доклад?
• Что такое микросервисы?
• Немного теории
• За и против различных типов архитектур
• Способы взаимодействия сервисов
• Когда делать монолит, а когда микросервисы?
2
Монолит
3
Монолит
4
User Interface
Business Logic Layer
Data Access Layer
DataBase
Монолит
5
User Interface (App1)
Business Logic Layer
Data Access Layer
DataBase
User Interface (App2)
Business Logic Layer
Data Access Layer
Проблемы
6
• Растет сложность системы
• Сложно поддерживать
• Не разобраться
Проблемы
7
• Много багов
• Мало тестов
• Дорого вносить изменения
Проблемы
8
• Застревание на технологиях
Приходит он…
9
Развитие системы
10
• Как сделать систему доступной из разный регионов?
• Как обеспечить согласованность данных?
• Как ускорить систем в N раз?
CAP “теорема”
11
Согласованность
Доступность Разделяемость
CA – consistency + availability
• Данные во всех узлах согласованы
• Обеспечена доступность
• Жертвуем распадом на секции
• ACID
• классические монолиты
12
CP – consistency + partitioning
• Данные во всех узлах согласованы
• Способна разделяться на независимые секции
• Жертвуем отсутствием отклика
(долго согласуются транзакции)
• Монолиты, которым пришлось
скалироваться.
13
AP – availability + partitioning
• Система доступна с предсказуемым временем отклика
• Система распределена
• Отказ от целостности результата.
• Eventually consistent
• DNS
14
- Знаете как заинтересовать идиота?
- Как?
- Завтра расскажу
Развитие системы
15
• Как сделать систему доступной из разный регионов?
• Как обеспечить согласованность данных?
• Как ускорить систем в N раз?
НИКАК!
Что же делать?
16
CA
AP
CP
17
Scale Cube
18
Sharding
Mirroring
Microservices
19
20
Microservices & SOA
21
SOA
Microservices
Что такое Микросервисы?
Архитектурный паттерн в котором сервисы:
• Small
• Focused
• Loosely coupled
• Highly cohesive
22
Small
• Насколько маленький?
• Разрабатывается одной командой (7±2)
• Одна бизнес задача
• Один человек в состоянии понять сервис
23
Focused
• Что значит сфокусированный?
• Решает только одну бизнес задачу,
но решает ее хорошо
• Имеет смысл в отрыве от остальных
сервисов
24
Low coupled
• Что такое сильное зацепление и слабое зацепление?
• Изменения одного класса/модуля слабо влияет на необходимость
изменений другого
• IoC, DI
25
High cohesion
• Высокое сцепление (согласованность)
• Класс/компонент содержит все нужные
методы для решения поставленной задачи
26
High cohesion vs SRP
• У нас есть класс, отвечающий за управление кухней
• SRP – Класс содержит методы по управлению только КУХНЕЙ
• HC – Класс содержит ВСЕ методы по управлению кухней
27
Характеристики микросервисов
• Разделение на компоненты (сервисы)
• Группировка по бизнес задачам
• Сервисы имеют бизнес-смысл
• Умные сервисы & простые коммуникации
• Децентрализованное управление
• Децентрализованное управление данными
• Автоматизация развертывания и мониторинга
• Design for failure (Chaos Monkey)
28
Компоненты
29
Компонент
Библиотеки
Сервисы
Компоненты
30
Компонент
Независимо
заменяемый
Независимо
развертываемый
Характеристики микросервисов
• Разделение на компоненты (сервисы)
• Группировка по бизнес задачам
• Сервисы имеют бизнес-смысл
• Умные сервисы & простые коммуникации
• Децентрализованное управление
• Децентрализованное управление данными
• Автоматизация развертывания и мониторинга
• Design for failure (Chaos Monkey)
31
Группировка по бизнес задачам
32
UI
BL
DB
Order
Management
Order
Execution
Market Data
Характеристики микросервисов
• Разделение на компоненты (сервисы)
• Группировка по бизнес задачам
• Сервисы имеют бизнес-смысл
• Умные сервисы & простые коммуникации
• Децентрализованное управление
• Децентрализованное управление данными
• Автоматизация развертывания и мониторинга
• Design for failure (Chaos Monkey)
33
Умные сервисы & простые коммуникации
34
ESB
Умные сервисы & простые коммуникации
35
ESB
Характеристики микросервисов
• Разделение на компоненты (сервисы)
• Группировка по бизнес задачам
• Сервисы имеют бизнес-смысл
• Умные сервисы & простые коммуникации
• Децентрализованное управление
• Децентрализованное хранение
• Автоматизация развертывания и мониторинга
• Design for failure (Chaos Monkey)
36
Децентрализованное хранений
37
Service A Service B Service C Service C
Сетевое взаимодействие
38
Service A Service B Service C Service C
Автоматизация развертывания и
мониторинга
39
Chaos Monkey
40
Design for failure
41
Simple app
42
API Gateway
43
Разные типы архитектур
• Service Discovery (RPC Style)
• Message Bus (Event Driven)
• Hybrid
44
45
Service Discovery
46
Service Discovery (Server – Side)
Service Discovery (Client – Side)
47
Message Bus
• Нужно уметь готовить
• Нужно поддерживать
• Снижение производительности за счет появления брокера
48
Message Bus
49
ЗА ПРОТИВ
Диктует архитектуру Сложно менять контракты
Легко расширять Обычно асинхронны
Построена для скалируемости Нужна хорошая квалификация
Круто звучит  Сложности развертывания и поддержки
Есть готовые решения. Написано не нами 
Event Driven Architecture
50
Event Driven Architecture
51
Event Driven Architecture
52
Переход от монолита к микросервисам
• Ограниченный бизнес контекст
• Частота изменений
• Структура команды (Conway’s law)
• Меняем то, что сильнее болит
53
Как выбрать?
54
Монолит Микросервисы
Как выбрать?
55
Монолит Микросервисы
Новый домен, нет знаний домена
Прототипы, Быстрое решение
Низкая квалификация (все джуны)
Написал и забыл
Мало денег
Как выбрать?
56
Монолит Микросервисы
Новый домен, нет знаний домена Точно нужно будет скалировать линейно
Прототипы, Быстрое решение Мы можете обеспечить согласованность на бизнес уровне
Низкая квалификация (все джуны)
Высокая квалификация, есть опыт и пара загубленных
проектов в прошлом
Написал и забыл Готовы инвестировать в инфраструктуру
Мало денег Много денег
За и против
57
Микросервисы дают преимущества… За счет…
Strong Module Boundaries
Микросервисы усиливают модульную структуру, что
особенно важно для больших команд разработчиков.
Distribution
Тяжелее разрабатывать. Нужен опыт и хороший опыт.
Аvailability
Сервисы могут работать не все
Eventual Consistency
придется иметь дело со слабой (отложенной) целостностью
Technology Diversity
Легко менять технологии, пробовать что-то действительно
подходящее. Правильные инструменты
Operational Complexity
Опытная команда Devop’ов
Independent Deployment
Простые сервисы проще деплоить
Меньше вероятность отказа системы
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.
58
Источники
• 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
59
Thank you
To be continued…

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

Editor's Notes

  • #15 Большинство NoSQL-систем принципиально не гарантируют целостности данных, и ссылаются на теорему CAP как на мотив такого ограничения[5]. Задачей при построении AP-систем становится обеспечение некоторого практически целесообразного уровня целостности данных, в этом смысле про AP-системы говорят как о «целостных в конечном итоге» (англ. eventually consistent)[15] или как о «слабо целостных» (англ. weak consistent)[16].
  • #22 Большинство NoSQL-систем принципиально не гарантируют целостности данных, и ссылаются на теорему CAP как на мотив такого ограничения[5]. Задачей при построении AP-систем становится обеспечение некоторого практически целесообразного уровня целостности данных, в этом смысле про AP-системы говорят как о «целостных в конечном итоге» (англ. eventually consistent)[15] или как о «слабо целостных» (англ. weak consistent)[16].
  • #23 Набор правил, как одно приложение или компонет взаимодействует с другими. И механизм, который обеспечивает это взаимодействие Обычно это не про UI Взаимодействие виде Software-to-software (Component)
  • #24 Размер микросервисов – единственная вещь про которую программисты могут гордиться у кого меньше Two pizza team at amazon
  • #26 Проблема перевода
  • #33 Convey’s Law
  • #40 Есть три вещи которые все говорят что делают Подростковый секс DevOps ОЧЕНЬ ВАЖНО. Новый компы, развертывание, мониториг, отладка
  • #50 Строгие контракты
  • #51 Строгие контракты
  • #52 Строгие контракты
  • #53 Строгие контракты
  • #54 The law is based on the reasoning that in order for a software module to function, multiple authors must communicate frequently with each other. Therefore, the software interfaces structure of a system will reflect the social boundaries of the organization(s) that produced it, across which communication is more difficult. Conway's law was intended as a valid sociological observation, although sometimes it's taken in a humorous context.
  • #55 The law is based on the reasoning that in order for a software module to function, multiple authors must communicate frequently with each other. Therefore, the software interfaces structure of a system will reflect the social boundaries of the organization(s) that produced it, across which communication is more difficult. Conway's law was intended as a valid sociological observation, although sometimes it's taken in a humorous context.
  • #56 The law is based on the reasoning that in order for a software module to function, multiple authors must communicate frequently with each other. Therefore, the software interfaces structure of a system will reflect the social boundaries of the organization(s) that produced it, across which communication is more difficult. Conway's law was intended as a valid sociological observation, although sometimes it's taken in a humorous context.
  • #57 The law is based on the reasoning that in order for a software module to function, multiple authors must communicate frequently with each other. Therefore, the software interfaces structure of a system will reflect the social boundaries of the organization(s) that produced it, across which communication is more difficult. Conway's law was intended as a valid sociological observation, although sometimes it's taken in a humorous context.