SOA vs Микросервисы: в чем разница?

Сервис-ориентированная архитектура (SOA) и микросервисная архитектура – два популярных подхода к разработке программного обеспечения. Хотя оба разделяют приложение на отдельные сервисы, между ними существуют фундаментальные различия, определяющие их применимость в различных ситуациях.

Сервис-ориентированная архитектура (SOA)

В основе SOA лежат повторное использование сервисов и корпоративная шина (ESB). Система разбивается на сервисы, используемые повторно в разных частях приложения. Взаимодействие и маршрутизация осуществляются через ESB.

Типичная SOA-архитектура включает:

  • Шина (ESB): Посредник при взаимодействии, управляет передачей сообщений и координацией вызовов.
  • Инфраструктурные сервисы: Группа часто используемых сервисов (аутентификация, авторизация, отправка SMS и т.д.).
  • Прикладные сервисы: Ограничены определенным контекстом, но могут быть встроены в более высокоуровневые сервисы.
  • Сервисы предприятия: Реализуют крупные части бизнес-процессов компании, потребляя более низкоуровневые сервисы. Они являются бэкендом, предоставляющим API для сайтов и мобильных приложений.

Проектирование в стиле SOA характеризуется многослойностью, что приводит к сложной распределённой архитектуре, напоминающей монолитную систему, но с значительно большей сложностью. Любой запрос проходит через множество систем.

Микросервисная архитектура

В отличие от SOA, микросервисная архитектура избегает повторного использования, предпочитая независимость сервисов. Система разбивается на сервисы с ограниченным контекстом, отражающим конкретные бизнес-области.

Ключевые особенности микросервисной архитектуры:

  • Каждый сервис обладает всеми необходимыми для функционирования компонентами (включая собственную базу данных).
  • Каждый сервис – независимый процесс.
  • Сервисы физически разделены и самодостаточны (архитектура без разделения ресурсов).
  • Взаимодействие между сервисами осуществляется обменом данными через брокер сообщений, без сложной логики (фактически – просто проксирование API).

Микросервисная архитектура характеризуется небольшим количеством слоёв, но большим количеством сервисов и команд, которые ими владеют. Основная сложность – правильное определение ограниченного контекста и разделение сервисов между командами.

Сравнение SOA и микросервисной архитектуры

Характеристика SOA Микросервисная архитектура
Внесение изменений Сложно, требует согласований между командами. Просто, осуществляется командой, владеющей сервисом.
Повторное использование Стремится к повторному использованию, но часто приводит к сложностям. Предпочтительно дублирование.
Команды и поддержка Команды разделены, сложная координация. Команды кросс-функциональны, владеют процессом от начала до конца.
Взаимодействие Через корпоративную шину (ESB), может стать узким местом. Обмен данными через брокер сообщений.
Автоматизация и развертывание Сложно. Просто, каждый сервис развертывается независимо.
Тестирование Затруднено из-за множества взаимосвязей. Просто, каждый сервис тестируется изолированно.
Масштабируемость Менее масштабируема Высоко масштабируема

Выбор между SOA и микросервисной архитектурой зависит от контекста проекта. SOA была оптимальным решением 10 лет назад, в эпоху дорогих серверов и коммерческих лицензий, где повторное использование ресурсов было критично. Сейчас, с открытым исходным кодом, DevOps и системами непрерывной интеграции и доставки, микросервисная архитектура часто предпочтительнее благодаря своей гибкости и масштабируемости. Различие между подходами – скорее концептуальное, чем техническое. Стремление к повторному использованию и множеству зависимостей между сервисами, даже при отсутствии ESB, указывает на архитектуру, отличную от микросервисной. Микросервисы ориентированы на выполнение одной бизнес-задачи, а SOA – на выполнение множества задач, что сказывается на хранении данных (независимое хранилище в микросервисах против совместного в SOA).

Что будем искать? Например,программа