SlideShare a Scribd company logo
Software craftsmanship 17: Microservices interaction
Ждем всех до 19:35
2
Software Craftsmanship
meetup #17
Взаимодействие между
микросервисами
Павел Вейник
CEO @ Hard & Soft Skills
Мы снова online
●Зарегистрировались 207
человека
●Наш 17-й митап online
●При поддержке Sam Solutions
●Информационные партнеры
dev.by, tproger.ru
4
О митапах
● Часть проекта Hard & Soft Skills
● Поделиться и пообщаться
● Подобрать материал для курсов:
○ Технический лидер
○ От middle developer к senior
engineer, SDET, teamlead...
5
План митапов
16. ML Operations for engineers
17. Взаимодействие
микросервисов
17. Kafka как идеально
горизонтально масштабируемая
система
18. hardsoftskills.by/next_meetups
6
Сегодня не будет
Рассказа что такое
микросервисы и для чего
Критики микросервисной
архитектуры и подходов
CI/CD для микросервисов,
разбиения на сервисы
7
Цель этого митапа
Рассмотреть подходы к
построению взаимодействия
между микросервисами.
Шаблоны, транзакции,
целостность данных...
8
План этого митапа
1.Типы мс архитектур
2.Взаимодействие между мс
3.Сага и другие шаблоны
4.Event sourcing, CQRS
5.Команда и мс
6.Вопросы при регистрации
9
Типы мс архитектур
● распределенный монолит
● слои микросервисов
● domain-based мс
● stateles vs statefull мс
10
Распределенный монолит
● возникает как только вы
начинаете пилить ваш
существующий монолит
● сильная зависимость между
разными сервисами
11
Распределенный монолит
Все проблемы монолита:
● изменения расползаются по
сервисам
● сложно масштабировать
● во всех мс много общего кода
и понятий
12
Распределенный монолит
Признаки распределенного
монолита:
● болтливые сервисы
● разные сервисы пользуются
общей бд
● при изменениях одного мс
нужно редеплоить другие
13
Слои микросервисов
Слой domain API
Слой business API
Слой backend for fronted
Слой клиентского web-app
14
15
Слои микросервисов
Улучшенная версия
распределенного монолита
● более управляемая
● сервисы больше
инкапсулируют
● пригодна для команды
большого размера
16
Feature-based ms
Каждой фиче по микросервису.
Еще более независимые
сервисы чем при слоях.
Без централизованной
архитектуры скатывается в
монолит.
17
Domain-based ms
Domain-driven подход
Контекст каждого мс ограничен
(bounded context)
Инструменты для разбиения:
DDD, bounded contexts, context
maps, events/commands
18
19
Domain-based ms
Требуют формальной и более
продуманной работы при
разделении.
Все равно требуют общего кода
и общих данных, но в меньшей
степени чем распр. монолит
20
Stateless vs stateful ms
База нужна каждому
приложению, но state нужен не
каждому мс:
● persistent storage
● сессия
● кэши
21
Stateless vs stateful ms
22
Подходы к взаимодействию
Обмен файлами
Общая бд
Синхронные вызовы
Очередь сообщений
23
Оркестрация
Оркестрация - есть центр
координации всех вызовов
между мс
● Параллельная
● Последовательная
24
Оркестрация посл.
25
Оркестрация посл.
26
Хореография
Оркестрация - каждый мс
вызывает нужные ему мс в
нужном ему порядке
● Параллельно
● Последовательно
27
Хореография паралл.
28
Sync vs async
Оркестрация и хореография
могут быть синхронными и
асинхронными
● через HTTP, gRPC…
● через очередь сообщений
29
Оркестрация и wf engines
Слой domain API
CRUD + search + triggers
Слой business API
бизнес-процессы
вызовы domain API
30
Оркестрация и wf engines
● Сложная последовательность
вызовов domain API
● Может прерваться ошибкой или
неверным состоянием
● Нужно сохранять состояние
самой последовательности
● Много таких
последовательностей
31
Оркестрация и wf engines
Могут помочь wf движки:
● Декларативное описание
процесса (BPMN)
● Хранят состояние процесса
● Предоставляют мониторинг и
другие инструменты
● Подходят если много процессов
32
Оркестрация и wf engines
● Camunda
● KissFlow
● Netflix conductor
● Workflowy
● Tallyfy
● Luigi
● ...
33
Шаблоны
● Message bus
● Saga
● Transactional outbox
● Retry, timeout, circuit breaker…
● API gateway, reverse proxy
● Load balancer
● CQS, CQRS
● Service per team
34
Шаблоны
35
https://www.enterpriseintegrationpatterns.com/
Message bus
● Зависимость только по формату
сообщений
● Удобно когда много сервисов
могут реагировать на триггер
● Требует общей
модели/формата данных
36
Saga
● “транзакция”,
распространяющаяся по
многим мс
● последовательность локальных
транзакций
● когда 2pc не вариант
● sequence id
37
Transactional outbox
38
39
Retry, timeout, circuit breaker
www.slideshare.net/veinik/software-
craftsmanship-15-online-reliability-
and-resiliency
40
API Gateway
41
Вопросы при регистрации
42
CQS vs CQRS
● Command-Query Separation
○ get-set
● Command-Query Responsibility
Segregation
○ архитектурный подход в
распределенных системах
○ иногда с event sourcing
43
CQRS
44
Service per team
45
Service per Team
● закон Конвея
○ архитектура повторяет
оргструктуру
● поэтому строить оргструктуру
так, чтобы она индуцировала
хорошую архитектуру
46
Контракты
● req-res: Владеет контрактом
запроса тот, кто предоставляет
“сервер”
○ параметры, заголовки, тело
○ валидации
○ формат ответа, HTTP коды
47
Контракты
● command (prod-cons, queue):
Владеет контрактом команды тот,
кто предоставляет сервис,
который ее выполняет
○ очередь команд (кому)
○ формат команды
48
Контракты
● event (pub-sub): Владеет
контрактом команды тот, кто
генерирует событие
○ тема (подписка) (кому)
○ формат события
49
Пример взаимодействия
50
Поддержание контракта
Владелец контракта:
● документация (код, swagger,
спеки)
● версии (breaking vs non-breaking
changes)
● способ деплоя (stoppage)
● service discovery
51
Поддержание контракта
52
Поддержание контракта
Пример контракта:
● https://opensource.zalando.com/r
estful-api-guidelines
53
Поддержание контракта
Contract testing:
● pact.io
● Postman
54
Курс microservices foundations
● Основы
● Шаблоны и подходы
● Взаимодействие
● Мониторинг и ops
● 3 месяца по 2р в неделю
hardsoftskills.by/microservices
55
Ссылки
общее
● https://techrocks.ru/2019/11/13/micro-service-architecture/
● http://agilemindset.ru/%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80-
%D0%BC%D0%B8%D0%BA%D1%80%D0%BE%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%B0/
● https://habr.com/ru/post/249183/
● https://martinfowler.com/articles/microservices.html
● https://docs.microsoft.com/en-us/dotnet/architecture/microservices/architect-microservice-container-applications/communication-in-
microservice-architecture
распределенный монолит
● https://habr.com/ru/company/piter/blog/453470/
● https://www.gremlin.com/blog/is-your-microservice-a-distributed-monolith/
● https://blog.newrelic.com/engineering/distributed-monolith-vs-microservices/
слои микросервисов
● https://medium.com/microservices-in-practice/microservices-layered-architecture-88a7fc38d3f1
domain-driven микросервисы
● https://medium.com/walmartglobaltech/building-domain-driven-microservices-af688aa1b1b8
● https://eng.uber.com/microservice-architecture/
stateless vs stateful
● https://www.proud2becloud.com/stateful-vs-stateless-the-good-the-bad-and-the-ugly/
56
Ссылки
шаблоны
● https://www.enterpriseintegrationpatterns.com/patterns/messaging/MessageBus.html
● https://microservices.io/patterns/data/saga.html
● https://microservices.io/patterns/data/transactional-outbox.html
● https://dzone.com/articles/implementing-the-outbox-pattern
● https://microservices.io/patterns/apigateway.html
команда
● https://microservices.io/patterns/decomposition/service-per-team.html
контракты
● https://www.cognizantsoftvision.com/blog/managing-service-contracts-in-microservice-architectures/
● https://cloud.google.com/appengine/docs/standard/java/designing-microservice-api
● https://www.redhat.com/en/blog/achieving-promise-microservices-one-contract-time
contract testing
● https://docs.pact.io/
● https://saucelabs.com/blog/intro-to-contract-testing-getting-started-with-postman
57
Задайте мне вопрос
58

More Related Content

PPTX
Software craftsmanship 15 online: Reliability and Resiliency
PPTX
Software craftsmanship 14 online Splitting the Monolith
PPTX
ПиАПС, Лекция №1б - Представление архитектуры
PPTX
Переход от монолитной архитектуры к распределенной
PPTX
Software craftsmanship 2
PPTX
Software craftsmanship 10: распределенные транзакции
PPTX
модуль 01 введение в платформу microsoft .net
PPTX
«Microservices. Как правильно делать и когда применять?»
Software craftsmanship 15 online: Reliability and Resiliency
Software craftsmanship 14 online Splitting the Monolith
ПиАПС, Лекция №1б - Представление архитектуры
Переход от монолитной архитектуры к распределенной
Software craftsmanship 2
Software craftsmanship 10: распределенные транзакции
модуль 01 введение в платформу microsoft .net
«Microservices. Как правильно делать и когда применять?»

Similar to Software craftsmanship 17: Microservices interaction (20)

PPTX
Опыт построения микросервисной архитектуры в цифровом банке
PPTX
Software craftsmanship meetup #4
PPTX
Архитектура масштабируемых приложений. Микросервисы, CQRS, ESB
PDF
Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий...
PDF
Микросервисы на практике
PPTX
Impress Application Server for node.js (ru)
PDF
Микросервисный фронтенд
PDF
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
PDF
Wild microservices and imaginary DevOps
PPT
Микросервисы: первая кровь
PDF
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
PDF
Микросервисы: взгляд сверху и в бок
PPTX
Три истории микросервисов
PDF
Микросервисы, чистый PaaS и конкурс Мисс Россия
PPTX
разработка бизнес приложений (9)
PDF
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
PPT
Архитектура CompanyMedia next
PPTX
04 Архитектура информационных систем. Архитектурные модели и стили
PPT
8 создание приложений по технологии windows communications foundation
PDF
Преимущества и недостатки микросервисной архитектуры в HeadHunter / Антон Ива...
Опыт построения микросервисной архитектуры в цифровом банке
Software craftsmanship meetup #4
Архитектура масштабируемых приложений. Микросервисы, CQRS, ESB
Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий...
Микросервисы на практике
Impress Application Server for node.js (ru)
Микросервисный фронтенд
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Wild microservices and imaginary DevOps
Микросервисы: первая кровь
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
Микросервисы: взгляд сверху и в бок
Три истории микросервисов
Микросервисы, чистый PaaS и конкурс Мисс Россия
разработка бизнес приложений (9)
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
Архитектура CompanyMedia next
04 Архитектура информационных систем. Архитектурные модели и стили
8 создание приложений по технологии windows communications foundation
Преимущества и недостатки микросервисной архитектуры в HeadHunter / Антон Ива...
Ad

More from Pavel Veinik (19)

PDF
Software craftsmanship meetup 22. engineering excellence
PPTX
Software craftsmanship meetup 21: CQRS что такое и для чего
PPTX
Software craftsmanship meetup 20. транзакции и data constistency в микросерви...
PPTX
System Engineering Webinar
PPTX
Software craftsmanship online meetup 18: Kafka как пример идеально горизонтал...
PPTX
Software craftsmanship 16: online building ml pipeline
PPTX
Software craftsmanship 12 online highload systems
PPTX
Software craftsmanship 11 online: мотивация и эффектисность разработчика
PPTX
Software craftsmanship meetup #9. Логирование, мониторинг, оповещение
PPTX
Software craftsmanship 8
PPTX
Software craftsmanship 7
PPTX
Software craftsmanship фиксит проблемы Agile
PPTX
Software craftsmanship #5 кэши и микросервисы
PPTX
Software craftsmanship 3
PPTX
Software craftsmanship 1
PPTX
Women in technology_week-women_leadership
PPTX
Career day 2019
PPTX
Программирование и лингвистика: как понять язык и извлечь знания из текстов
ODP
Человеческий фактор в разработке, или ORM на noSql через JPA.
Software craftsmanship meetup 22. engineering excellence
Software craftsmanship meetup 21: CQRS что такое и для чего
Software craftsmanship meetup 20. транзакции и data constistency в микросерви...
System Engineering Webinar
Software craftsmanship online meetup 18: Kafka как пример идеально горизонтал...
Software craftsmanship 16: online building ml pipeline
Software craftsmanship 12 online highload systems
Software craftsmanship 11 online: мотивация и эффектисность разработчика
Software craftsmanship meetup #9. Логирование, мониторинг, оповещение
Software craftsmanship 8
Software craftsmanship 7
Software craftsmanship фиксит проблемы Agile
Software craftsmanship #5 кэши и микросервисы
Software craftsmanship 3
Software craftsmanship 1
Women in technology_week-women_leadership
Career day 2019
Программирование и лингвистика: как понять язык и извлечь знания из текстов
Человеческий фактор в разработке, или ORM на noSql через JPA.
Ad

Software craftsmanship 17: Microservices interaction