Video Thumbnail

5 секретов, которые изменят ваш подход к backend-разработке // Курс «Microservice Architecture»

OTUS IT Онлайн - образование01:48:36
https://www.youtube.com/watch?v=DJU21O8KEi0

Содержание

Краткое резюме

  • Микросервисная архитектура является следующим этапом развития ПО после монолитных систем и сервис-ориентированных архитектур (SOA).
  • Основные преимущества микросервисов: гибкость, масштабируемость, модульность, кроссплатформенность и локализация ошибок.
  • Недостатки: технологическая сложность, сложность координации, расходы на инфраструктуру, тестирование и безопасность.
  • Взаимодействия между микросервисами бывают синхронными (блокирующими), асинхронными (неблокирующими), через общие данные, запрос-ответ и событийные.
  • Каждый стиль взаимодействия имеет свои плюсы и минусы, выбор зависит от конкретных бизнес-задач и требований.
  • Использование брокеров сообщений и паттернов проектирования помогает строить отказоустойчивые и масштабируемые системы.
  • В учебном курсе Вебинара OTUS по микросервисной архитектуре разбираются эти темы на практике с примерами, домашними заданиями и проектной работой.

Введение в микросервисную архитектуру

Первоначально программные системы создавались по монолитному принципу: два слоя — интерфейс пользователя и бизнес-логика с хранилищем данных — работали в одном приложении. Масштабирование такого приложения достигалось путем увеличения мощности одного сервера. Однако с ростом бизнеса и появлением новых требований монотонный монолит стал неэффективен: усложнилась поддержка, расширение и интеграция с новыми функциональностями и партнёрами.

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

Для цифрового рынка с высокими пиковыми нагрузками появилась микросервисная архитектура, где большое приложение разбивается на множество небольших автономных сервисов с чётко определённой функцией. Каждый микросервис независим, взаимодействует по API и может разрабатываться разными командами на разных стековых технологиях.

«Микросервис — небольшой автономно работающий сервис с чётко определённой функцией.»


Преимущества и недостатки микросервисной архитектуры

Преимущества:

  • Гибкость. Изменения в одном микросервисе не влияют на другие.
  • Кроссплатформенность. Разные сервисы могут использовать разные языки и технологии.
  • Модульность. Система делится на независимые компоненты, которые можно разрабатывать и поддерживать отдельно.
  • Масштабируемость. Возможность горизонтального масштабирования — запуск нескольких копий сервиса.
  • Безопасность. Разделение позволяет контролировать зависимости и локализовать ошибки.
  • Стабильность. Ошибки в одном сервисе обычно не влияют на всю систему.

Недостатки:

  • Технологическая сложность. Использование разнообразных технологий требует от команд широких знаний.
  • Сложность координации. Регулирование взаимодействия между сервисами и управление сетью — сложная задача.
  • Рост затрат на инфраструктуру. Каждому сервису необходима своя инфраструктура и мониторинг.
  • Сложность тестирования. Нужно учитывать множество состояний и порядок взаимодействия.
  • Проблемы безопасности. В микросервисах увеличивается число точек передачи данных по сети, что повышает риск кибератак.

Вызовы межпроцессного взаимодействия

Взаимодействия между микросервисами — это межпроцессные вызовы, которые требуют передачи данных по сети, сериализации/десериализации и сопровождаются задержками. В отличие от внутрипроцессных вызовов, межпроцессные требуют дополнительных ресурсов и порой вызывают проблемы производительности.

Для оптимизации межпроцессных вызовов рекомендуется:

  • Уменьшать объём передаваемых данных, исключая избыточные поля.
  • Использовать эффективные бинарные форматы сериализации (Protobuf, MessagePack вместо JSON).
  • Применять асинхронные вызовы и пакетную передачу сообщений (batching).

«Если количество вызовов между микросервисами слишком велико, вероятно, возникла ошибка в архитектуре и стоит пересмотреть гранулярность сервисов.»


Стили взаимодействия микросервисов

1. Синхронная блокировка

  • Микросервис делает вызов другому и ожидает ответ, блокируя выполнение.
  • Прост в реализации, распространён в традиционных запросах (HTTP, SQL).
  • Минусы: высокая связанность, замедление всей цепочки при сбое одного сервиса.
  • Используется в простых случаях или при переходе от монолита к микросервисам.
  • Улучшение: перевод долгих операций и вспомогательных процессов в фоновые задачи.

2. Асинхронная неблокирующая связь

  • Отправитель вызывает сервис и продолжает работу, не ожидая немедленного ответа.
  • Подходит для длительных процессов (например, обработка и доставка товара).
  • Повышает устойчивость к недоступности сервисов.
  • Сложнее в реализации из-за множества вариантов и выбора технологий.
  • Используется для слабосвязанных процессов с разными временными интервалами.

3. Связь через общие данные

  • Сервисы обмениваются данными через общее хранилище (базы данных, файловые системы).
  • Асинхронный характер, сервисы сами проверяют наличие новых данных.
  • Проста в реализации, подходит при ограничениях технологий.
  • Минус — возможные задержки из-за пулинга и риск несоответствия схем данных.
  • Используется для развязывания блокировок между компонентами.

4. Запрос-ответ

  • Один сервис посылает запрос, ждёт и получает ответ.
  • Может быть реализовано и в синхронном, и в асинхронном формате.
  • Требует организации порядка и контроля транзакций.
  • Используется, когда результат нужен для продолжения обработки или для компенсации ошибок.

5. Событийное взаимодействие

  • Сервис публикует события, которые потребляются другими сервисами.
  • Взаимодействие асинхронное и слабосвязное.
  • Сервис-издатель не знает о потребителях событий.
  • Обеспечивает масштабируемость и отказоустойчивость.
  • Используются брокеры сообщений (Kafka, RabbitMQ).
  • Применяется для широкого уведомления застав и реакции на состояние.

«Событийный стиль снижает степень связанности, что критично для масштабируемых и отказоустойчивых систем.»


Особенности событийной модели

  • Событие — утверждение о факте (изменение состояния).
  • Содержит идентификатор и необходимые данные (например, ID клиента, email).
  • Возможны проблемы с избыточной связанностью, если сервисы требуют дополнительного обогащения данных.
  • Баланс между слабой связанностью и объёмом передаваемой информации — ключевой момент при проектировании.
  • Для надёжности доставки сообщений применяются механизмы гарантии типа «exactly once».

Заключение и курс OTUS по микросервисам

  • Микросервисная архитектура требует глубокого понимания стилей взаимодействия и паттернов проектирования.
  • OTUS предлагает онлайн-курс, стартующий 25 июня, длительностью 4 месяца, ориентированный на архитекторов, разработчиков и аналитиков.
  • Программа курса охватывает: микросервисные паттерны, контейнеризацию, брокеры сообщений, принципы CICD, observability (мониторинг, алертинг), канвасы хранения и проектную работу.
  • Обучение проводится на русском языке, с практическими заданиями и поддержкой наставников.
  • После завершения выдается сертификат или диплом о переподготовке, возможен налоговый вычет.
  • Курс подойдет слушателям с базовыми знаниями программирования (Java, Python и др.) и опытом работы с IT.

«Микросервисы — это не про конкретный язык, а про архитектурные решения для гибкости и масштабируемости.»


Резюме по выбору стилей взаимодействия

Стиль взаимодействияПлюсыМинусыРекомендации к применению
Синхронная блокировкаПростота, понятностьВысокая связанность, проблемы масштабируемостиПростые сценарии, первые этапы миграции
Асинхронная неблокирующаяОтсутствие блокировок, масштабируемостьСложность реализации и поддержкиДлительные процессы, слабосвязные операции
Через общие данныеПростота реализацииЗадержки, риск несогласованности данныхОграниченные технические условия
Запрос-ответКонтроль результата, упрощение управления ошибкамиВозможные задержки, сложности согласованияКогда нужен результат для дальнейшей обработки
Событийный стильСлабая связанность, масштабируемостьСложности организации и поддержкиМассовая асинхронная коммуникация

Итоги

Вебинар предоставляет основу по пониманию микросервисной архитектуры и стилей взаимодействия между сервисами. Глубокое освоение темы требует практики и систематического изучения паттернов. Для этого предлагает помощь курс OTUS, объединяющий теорию и практику, позволяющий освоить построение современных распределённых систем.


Спасибо за внимание!