SlideShare a Scribd company logo
Основные принципы
микросервисов
и их реализации
Микросервисы
Что это такое?
Как это оценить?
Зачем это нужно?
Как это делать?
1
2
3
4
1Что такое микросервисы?
Определение микросервисов
Набор независимых, но связанных между собой сервисов
Построены вокруг бизнес-потребностей
Развертываются независимо
Имеют минимум централизованного управления
1
2
3
4
X axis – horizontal duplication
Scale by cloning
Y axis –
functional
decomposition
Scale by splitting
different things
Z
axis–
datapartitioning
Scale
bysplitting
sim
ilarthings
X axis – horizontal duplication
Scale by cloning
Y axis –
functional
decomposition
Scale by splitting
different things
Z
axis–
datapartitioning
Scale
bysplitting
sim
ilarthings
X axis – horizontal duplication
Scale by cloning
Y axis –
functional
decomposition
Scale by splitting
different things
Z
axis–
datapartitioning
Scale
bysplitting
sim
ilarthings
X axis – horizontal duplication
Scale by cloning
Y axis –
functional
decomposition
Scale by splitting
different things
Z
axis–
datapartitioning
Scale
bysplitting
sim
ilarthings
Обещания микросервисов
Инкапсуляция бизнес-логики
Независимость в выборе технологий
Независимость в развертывании отдельного сервиса
Независимое внесение изменений
Меньшее значение Time To Market
Быстрая адаптация к изменениям
1
2
3
4
5
6
Очевидные трудности
Распределенная система
Несогласованность данных
Сложность дизайна целой системы
1
2
3
2Что такое микросервисы?
Параметры оценки
Гибкость при разработке
Простота развертывания
Тестируемость
Масштабируемость
Простота разработки
Производительность
1
2
3
4
5
6
Гибкость при разработке, монолит
application
module #1 module #2
module #3
module #4 module #5
Гибкость при разработке, микросервисы
application
service #1
service #2
service #3
service #4
service #5
Простота развертывания, монолит
git ci cd prod
Простота развертывания, микросервисы
git ci cd prod
git ci cd prod
git ci cd prod
Тестируемость, монолит
module #1
module #1
module #2
module #3
module #4
module #5
module #2
module #3
module #4 module #5
Тестируемость, микросервисы
service #1 service #2
service #3 service #4
service #5
service #1
service #2
service #3
service #4
service #5
?
монолит
монолит
монолит
монолит монолит
Масштабируемость, монолит
service #1 service #2 service #3
service #1 service #2 service #3
service #1 service #2
service #1
Масштабируемость, микросервисы
Простота разработки, монолит
application
module #1
module #2
module #3
module #4
module #5
module #1 module #2
module #3
module #4 module #5
Простота разработки, микросервисы
application
service #1
service #2
service #3
service #4
service #5
?
service #1
service #2
service #3
service #4
service #5
Производительность
module #1 module #2
module #3
module #4 module #5
3Зачем нужны микросервисы?
Кто их использует
Когда их использовать
less complex
higher volume (”internet-scale”)
domain
scalability
complexity
lower volume (”enterprise-scale”)
more complex
micro
services
modular
monoliths
Когда еще их использовать
Необходимо выпускать новый функционал часто
Можно получить большие преимущества при написании
разных частей системы на разных языках
Есть необходимость использовать разные базы данных
для разных задач
1
2
3
Когда лучше не использовать
Не знаете зачем они
Нет соответствующей инфраструктуры
1
2
Андрей Матвеев "Основные принципы микросервисов и их реализации"
4Как строить микросервисы?
Как строить микросервисы
Функциональная декомпозиция
Взаимодействие с пользователями системы
Взаимодействие между сервисами
Обеспечение согласованности данных
Service discovery
Тестирование
Логирование
1
2
3
4
5
6
7
Функциональная декомпозиция
application
service #1
service #2
service #3
service #4
service #5
Cильная гранулярность
service #1
service #2
service #3
service #4
service #5
client
service service service
Взаимодействие с пользователями
Минусы прямого
взаимодействия
Больше сервисов — больше запросов
Протоколы могут отличаться от HTTP
Затрудняет рефакторинг
1
2
3
API Gateway
client
API gateway
service service service
Взаимодействие между сервисами
Синхронные запросы Асинхронные уведомления
service#2
service#1 service#2
service#1
service#3 service#n
HTTP
Akka.netе, MS Orleans
WCF
Protobuf
Apache Thrift
Linkerd
1
2
3
4
5
6
Синхронные запросы
Обеспечение согласованности
данных
После совершения пользователем операции в одном
из сервисов изменились данные и нужно эти изменения
отправить в другой сервис.
Нам необходимо построить отчет по неким показателям,
данные для составления отчета распределены по нескольким
микросервисам.
1
2
Apache Kafka
RabbitMQ
Akka.net, MS Orleans
1
2
3
Асинхронные уведомления
Service discovery
service #1 service #2
?
Тестирование
exploratory
end-to-end
component
integration
unit
Уникальные идентификаторы сервисов
Уникальный идентификатор для каждого запроса
Использование UTC timestamp
Агрегация логов
1
2
3
4
Логирование
Использование таймаутов при запросах
Частое переиспользование кода
Статичные контракты
Недоступность целого из-за отказа части
Микролитизация
1
2
3
4
5
Распространенные ошибки
Пример
Исходная позиция
интернет-
эквайринг
POS
в магазинах
терминалы
самообслуживания
Прием заявок
acquiring
landing
POS
landing
applicant
service
SST
landing
CRM
acquiring
landing
POS
landing
applicant
service
SST
landing
CRM
service
Интеграция сервисов
acquiring
landing
POS
landing
applicant
service
SST
landing
message
bus
CRM
service
Сервис для клиентов
CRM
service
message
bus
backoffice
service
web ui
Еще точки входа
acquiring
endpoint
POS
endpoint
SST
landing
Прием средств и переводов
acquiring
endpoint
POS
endpoint
SST
landing
acquiring
service
POS
service
SST
service
Связь с процессингом
acquiring
service
POS
service
message
bus
SST
service
processing
service
external
systems
Связь с клиентом
SST
service
POS
service
acquiring
service
processing
service
message
bus
backoffice
service
web ui
Объединение запросов
Запрос на списание
получен.
ID: xxxx-xxxx-xxxx-xxxx
Списание прошло
успешно.
ID: xxxx-xxxx-xxxx-xxxx
Средства переведены
клиенту.
ID: xxxx-xxxx-xxxx-xxxx
acquiring
landing
POS
landing
SST
landing
acquiring
endpoint
POS
endpoint
SST
endpoint
acquiring
service
POS
service
SST
service
applicant
service
web ui
CRM
service
message bus
processing
service
backoffice
service
external
systems
Итоговая архитектура
web ui
Что в итоге?
Pros&Сons
Распределенная система
Гибкая разработка
Легко масштабируются
Низкий TTM для нового
функционала
+
+
+
+
Распределенная система
Сложное проектирование
Проблемы при тестировании
-
-
-
You shouldn't start a new project with
microservices, even if you're sure your
application will be big enough to make it
worthwhile
Martin Fowler

More Related Content

PDF
Введение в сервис-ориентированную архитектуру
PPTX
"Пряники" - система мотивации и Microsoft Azure
PDF
Реализация api для мобильных приложений на Drupal
PPTX
«Microservices. Как правильно делать и когда применять?»
PDF
Микросервисные архитектуры и немного жизненного опыта
PPTX
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
PPTX
NodeJS микросервисная архитектура, Андрей Титарь
PPTX
Node.js microservices
Введение в сервис-ориентированную архитектуру
"Пряники" - система мотивации и Microsoft Azure
Реализация api для мобильных приложений на Drupal
«Microservices. Как правильно делать и когда применять?»
Микросервисные архитектуры и немного жизненного опыта
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
NodeJS микросервисная архитектура, Андрей Титарь
Node.js microservices

Similar to Андрей Матвеев "Основные принципы микросервисов и их реализации" (20)

PPTX
Архитектура масштабируемых приложений. Микросервисы, CQRS, ESB
PDF
Микросервисы: взгляд сверху и в бок
PPTX
06-mikhailik
PDF
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
PDF
микроСЕРВИСЫ: огонь, вода и медные трубы
PDF
Микросервисы на практике
PPTX
Software craftsmanship 17: Microservices interaction
PDF
Wild microservices and imaginary DevOps
PPTX
Павел Масс (IT2U) «Микросервисы»
PPT
Микросервисы: первая кровь
PPTX
Node .js microservices
PPTX
Потоковая обработка данных и Микросервисная архитектура
PDF
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
PPT
Барьеры микросервисной архитектуры
PDF
Микросервисы в бизнес-приложениях: Теория и практика
PDF
Вадим Мадисон "Опыт разработки через микросервисы"
PPTX
Software craftsmanship 14 online Splitting the Monolith
PDF
Разработка через микросервисы
PDF
Бизнес-гибкость через микросервисную архитектуру
PDF
Чему мы научились разрабатывая микросервисы?
Архитектура масштабируемых приложений. Микросервисы, CQRS, ESB
Микросервисы: взгляд сверху и в бок
06-mikhailik
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
микроСЕРВИСЫ: огонь, вода и медные трубы
Микросервисы на практике
Software craftsmanship 17: Microservices interaction
Wild microservices and imaginary DevOps
Павел Масс (IT2U) «Микросервисы»
Микросервисы: первая кровь
Node .js microservices
Потоковая обработка данных и Микросервисная архитектура
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
Барьеры микросервисной архитектуры
Микросервисы в бизнес-приложениях: Теория и практика
Вадим Мадисон "Опыт разработки через микросервисы"
Software craftsmanship 14 online Splitting the Monolith
Разработка через микросервисы
Бизнес-гибкость через микросервисную архитектуру
Чему мы научились разрабатывая микросервисы?
Ad

More from MskDotNet Community (19)

PPTX
Антон Сысоев «IIoT: на границе HW и .NET»
PPTX
Николай Гусев «Функциональное программирование для C# разработчиков»
PDF
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
PDF
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
PPTX
Владимир Кочетков "OWASP TOP 10 для.NET"
PDF
Дмитрий Сошников Искусственный интеллект и нейросети для .NET-разработчиков
PPTX
Викторина MskDotNet Субботник
PDF
Елизавета Голенок Переходим на mono или как это было
PDF
Иван Кочуркин. Теория и практика парсинга формальных языков
PPTX
Дмитрий Тежельников «Разработка вэб-решений с использованием Asp.NET.Core и ...
PDF
Павел Притчин "Конфигурации в.NET"
PPTX
Андрей Кирпичев "Гибкая модульность инструментами АОП"
PPTX
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
PDF
Александр Сурков «Вещи» в «Интернете вещей»
PDF
Петр Тимошевский «Industrial IoT на практике»
PDF
Стас Павлов «Построение безопасной архитектуры IoT решений на примере Azure I...
PDF
Илья Ефимов «IoC/DI на примере Autofac»
PDF
Кирилл Маурин «Проектирование и разработка модульных приложений»
PDF
Владимир Кошелев «Автоматический поиск ошибок»
Антон Сысоев «IIoT: на границе HW и .NET»
Николай Гусев «Функциональное программирование для C# разработчиков»
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Владимир Кочетков "OWASP TOP 10 для.NET"
Дмитрий Сошников Искусственный интеллект и нейросети для .NET-разработчиков
Викторина MskDotNet Субботник
Елизавета Голенок Переходим на mono или как это было
Иван Кочуркин. Теория и практика парсинга формальных языков
Дмитрий Тежельников «Разработка вэб-решений с использованием Asp.NET.Core и ...
Павел Притчин "Конфигурации в.NET"
Андрей Кирпичев "Гибкая модульность инструментами АОП"
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
Александр Сурков «Вещи» в «Интернете вещей»
Петр Тимошевский «Industrial IoT на практике»
Стас Павлов «Построение безопасной архитектуры IoT решений на примере Azure I...
Илья Ефимов «IoC/DI на примере Autofac»
Кирилл Маурин «Проектирование и разработка модульных приложений»
Владимир Кошелев «Автоматический поиск ошибок»
Ad

Андрей Матвеев "Основные принципы микросервисов и их реализации"