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

YOUTUBE · 16.12.2025 04:50

Ключевые темы и таймкоды

Введение и организационные моменты

0:03
  • Приветствие участников первой сессии первого модуля.
  • Важные организационные моменты: использование чата, вопросы и ответы, реакция на сессию.
  • Представление докладчика Александра Бармина.

Введение в доклад

1:00
  • Александр Бармин, инженер в компании EPAM, рассказывает о проектировании микросервисов.
  • Дисклеймер: нет единственно правильного решения для проектирования микросервисов.
  • Важность разнообразия подходов и паттернов.

Проблемы монолитного проектирования

3:56
  • Проблемы, возникающие при переходе от монолитного приложения к микросервисам.
  • Трудности в разделении приложения на микросервисы и их взаимодействии.
  • Введение в стратегии декомпозиции и паттерны.

Определение сервиса

5:53
  • Сервис включает запросы, команды, публикации и ивенты.
  • Важность определения системных операций и требований.
  • Начало проектирования с чтения требований и определения системных операций.

Стратегии декомпозиции

9:48
  • Три шага: чтение требований, разделение на сервисы, определение взаимодействия между сервисами.
  • Стратегии разделения по бизнес-функциям и саб-доменам.
  • Важность разделения по бизнес-побити для одного сервиса.

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

12:42
  • Организация надежного взаимодействия между сервисами.
  • Классический request-response и асинхронное взаимодействие.
  • Примеры и паттерны для организации взаимодействия.

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

13:41
  • Синхронное взаимодействие требует уникального идентификатора для каждого запроса.
  • Пример: запрос баланса у мобильного оператора.
  • Недостаток: все клиенты и серверы должны быть доступны одновременно.

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

14:40
  • Асинхронное взаимодействие использует очереди или промежуточные хранилища.
  • Пример: клиенты отправляют запросы в очередь, а серверы забирают их по мере необходимости.
  • Плюсы: масштабируемость и независимость от доступности всех сервисов.
  • Минусы: усложнение обработки ошибок и непредсказуемость времени обработки запросов.

Гексагональная архитектура

18:32
  • Гексагональная архитектура использует прокси для вызова удаленных процедур.
  • Прокси позволяет обрабатывать частичные отказы и реализовывать паттерны.
  • Пример: обработка заказов и повторные попытки при недоступности сервиса.

Масштабирование и сервис Discovery

21:29
  • Масштабирование: запуск нескольких экземпляров сервиса для обработки запросов.
  • Паттерн сервис Discovery: регистрация сервисов на уровне приложений или инфраструктуры.
  • Application Level Service Discovery: балансировка нагрузки и тестирование.
  • Platform Level Service Discovery: избавление от головной боли, но ограниченные возможности.

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

27:22
  • Асинхронное взаимодействие предпочтительнее синхронного.
  • Используйте готовые решения, такие как Spring Cloud Streams или Quarkus.
  • Важно не изобретать велосипеды и использовать проверенные решения.

Архитектура с брокером

28:22
  • Архитектура с брокером позволяет сервисам не знать друг о друге.
  • Брокер буферизирует сообщения и может временно хранить их.
  • Брокер добавляет сложность и может стать узким местом.

Архитектура без брокера

30:19
  • Архитектура без брокера позволяет сервисам отправлять сообщения быстрее.
  • Сервисы должны знать друг о друге для отправки сообщений.
  • Брокер не гарантирует стопроцентную надежность и может привести к повторной доставке сообщений.

Надежность и повторная доставка

32:18
  • Для решения проблемы повторной доставки используйте транзакции или записывайте идентификаторы обработанных сообщений.
  • Сообщения должны отправляться в промежуточное хранилище для надежности.

Синхронное взаимодействие и его недостатки

34:16
  • Синхронное взаимодействие снижает доступность системы.
  • Используйте очереди для асинхронного взаимодействия с внешними сервисами.
  • Клиенты могут быть недовольны длительным ожиданием ответов.

Репликация данных

36:12
  • Используйте репликацию данных для снижения нагрузки на внешние сервисы.
  • Репликация может привести к дополнительным затратам и проблемам с лагами.

Service Discovery

37:12
  • Service Discovery полезен при миграции приложений и для обработки запросов.
  • Spring Cloud предоставляет множество стратегий для выбора подходящего клиента.

Рекомендации при недоступности сервиса

40:05
  • Используйте стратегии деградации производительности или возвращайте заготовленные значения из кэша.
  • Подбирайте стратегии, подходящие для вашей конкретной ситуации.

Репликация и транзакционная отправка сообщений

42:03
  • Репликация может не успевать за изменениями данных.
  • Транзакционная отправка сообщений позволяет мониторить таблицы и базы данных.
  • Разделение запросов на получение и изменение данных помогает повысить доступность.

Запросы в распределенном приложении

44:00
  • В монолитной архитектуре запросы обрабатываются контроллером.
  • В микросервисной архитектуре запросы могут быть сложными и требуют разделения.
  • Паттерн пей композитор объединяет ответы от разных сервисов.

Проблемы пей композитора

45:57
  • Пей композитор может не справляться с запросами на получение списков.
  • Разделение запросов на CRUD и поиск помогает оптимизировать работу.
  • Использование текстовых баз данных для поиска улучшает производительность.

Сравнение пей композитора и секвест

50:51
  • Пей композитор прост, но усложняет архитектуру.
  • Секвест позволяет разделить запросы, но добавляет дополнительные базы данных.
  • Репликация данных остается важной проблемой.

Внешние клиенты и P2P

51:50
  • Внешние клиенты могут быть мобильными приложениями.
  • P2P-гейтплей решает проблему множественных запросов.
  • P2P может кэшировать запросы, выполнять аутентификацию и логирование.

Организационные паттерны

54:45
  • Использование паттерна BF для разработки P2P-гейтплей.
  • Каждая команда разрабатывает P2P для своих клиентов.
  • Общий слой обеспечивает взаимодействие между командами.

Организационные паттерны и надежность микросервисов

55:45
  • Команды разделяются и работают независимо.
  • Надежность микросервисов зависит от управления конфигурациями и обермобилити.
  • Важно понимать, как сделать микросервисы надежными.

Внешние сервисы и управление конфигурациями

56:42
  • Внешние сервисы, такие как Kafka, рассматриваются как ресурсы.
  • Для подключения к внешним сервисам нужны параметры, зависящие от окружения.
  • Управление конфигурациями помогает определить, где живут сервисы.

Подходы к управлению конфигурациями

57:41
  • Первый подход: инфраструктура предоставляет переменные окружения.
  • Второй подход: использование сторонних сервисов для управления конфигурациями.
  • Spring Cloud Config и Amazon Parameter Store помогают реализовать этот подход.

Важность мониторинга и трассировки

59:40
  • Мониторинг помогает отслеживать состояние сервисов.
  • Трассировка помогает понять, как запросы проходят через систему.
  • Метрики позволяют оценить производительность и ресурсы.

Проблемы и решения в микросервисных приложениях

1:01:34
  • Важно обеспечить надежность коммуникаций и обработки запросов.
  • Необходимо учитывать проблемы, такие как Middleware, Discovery, и разделение данных.
  • Рекомендуется использовать шаблоны для генерации микросервисов.

Вопросы и рекомендации по литературе

1:05:31
  • Вопросы можно задавать по почте или в телеграме.
  • Рекомендована книга "12 факторов для построения мобильных приложений".
  • Для конфигурации в разных фреймворках стоит изучить Google Books.