exam

Виды архитектуры программного обеспечения.

Разберу основные виды архитектур ПО — их суть, плюсы, минусы и сценарии применения.

1. Монолитная архитектура

Суть: всё приложение — единый блок с общей кодовой базой, включающей интерфейс, бизнес‑логику и доступ к данным.

Компоненты:

  • пользовательский интерфейс;
  • бизнес‑логика;
  • слой доступа к данным;
  • единая база данных.

Плюсы:

  • простота разработки и развёртывания;
  • единое хранилище данных;
  • низкая задержка внутри системы;
  • минимальные накладные расходы на инфраструктуру.

Минусы:

  • сложность масштабирования (масштабируется вся система целиком);
  • высокая связанность компонентов (изменения в одной части могут повлиять на другие);
  • долгий цикл релизов (полная пересборка и передеплой при любом изменении);
  • риск «эффекта домино» при сбоях.

Когда применять:

  • MVP и прототипы;
  • небольшие проекты с ограниченной функциональностью;
  • системы с низкой нагрузкой;
  • команды с ограниченными ресурсами DevOps.

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

Суть: приложение разбито на независимые сервисы, каждый со своей бизнес‑функцией, кодовой базой и базой данных. Сервисы взаимодействуют через API (REST, gRPC) или асинхронные сообщения.

Компоненты:

  • отдельные сервисы (например, «аутентификация», «каталог товаров», «корзина»);
  • API‑шлюз (API Gateway);
  • сервисная шина (Service Bus) или брокер сообщений (Kafka, RabbitMQ);
  • контейнеры (Docker) и оркестратор (Kubernetes).

Плюсы:

  • независимое масштабирование сервисов;
  • изоляция сбоев (сбой одного сервиса не ломает всю систему);
  • возможность использовать разные технологии для разных сервисов;
  • параллельная разработка несколькими командами.

Минусы:

  • высокая сложность координации и мониторинга;
  • накладные расходы на межсервисное взаимодействие;
  • проблемы распределённых транзакций;
  • высокие требования к DevOps и инфраструктуре;
  • усложнённое тестирование.

Когда применять:

  • крупные проекты с множеством функций;
  • высоконагруженные системы;
  • продукты с чётким разделением бизнес‑областей;
  • зрелые команды с опытом работы с распределёнными системами.

3. Многослойная (многоуровневая) архитектура (Layered/Tiered)

Суть: разделение приложения на горизонтальные слои (уровни), каждый со своей ответственностью. Обычно выделяют:

  • слой представления (UI, API);
  • слой бизнес‑логики (бизнес‑правила, алгоритмы);
  • слой доступа к данным (работа с БД, кэшами).

Варианты:

  • двухуровневая (клиент + сервер);
  • трёхуровневая (клиент + сервер приложений + сервер БД);
  • n‑уровневая (добавление промежуточных уровней).

Плюсы:

  • чёткое разделение ответственности;
  • простота понимания и поддержки;
  • возможность тестировать слои отдельно;
  • стандартизация интерфейсов между слоями.

Минусы:

  • жёсткая зависимость слоёв (верхний слой зависит от всех нижних);
  • возможное снижение производительности (данные проходят через все слои);
  • ограниченная гибкость при сложных сценариях.

Когда применять:

  • корпоративные приложения;
  • системы с чёткой структурой бизнес‑правил;
  • проекты, где важна стандартизация и простота сопровождения.

4. Событийно‑ориентированная архитектура (Event‑Driven Architecture, EDA)

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

Компоненты:

  • издатели событий (Producers);
  • брокеры событий (Event Brokers, например, Kafka, RabbitMQ);
  • подписчики/обработчики событий (Consumers).

Плюсы:

  • слабая связанность компонентов;
  • высокая масштабируемость и отказоустойчивость;
  • гибкость добавления новых обработчиков событий;
  • поддержка реального времени и потоковой обработки данных.

Минусы:

  • сложность отладки и трассировки (цепочки событий);
  • риск потери событий без надёжной шины;
  • необходимость проектирования идемпотентных обработчиков;
  • задержки в обработке событий.

Когда применять:

  • системы реального времени (чаты, IoT, трейдинг);
  • сложные бизнес‑процессы с множеством участников;
  • интеграция разнородных систем;
  • потоковая обработка данных (аналитика, логи).

5. Бессерверная архитектура (Serverless)

Суть: код выполняется в облаке как функции по запросу (Function‑as‑a‑Service, FaaS). Инфраструктура управляется провайдером (AWS Lambda, Azure Functions, Google Cloud Functions).

Компоненты:

  • функции (короткие, stateless‑операции);
  • триггеры (HTTP‑запросы, события из очередей, таймеры);
  • облачные сервисы (хранилища, БД, очереди).

Плюсы:

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

Минусы:

  • «холодный старт» функций (задержка при первом вызове);
  • ограничения по времени выполнения и ресурсам;
  • зависимость от провайдера облака;
  • сложности с состоянием (stateless‑функции).

Когда применять:

  • нерегулярные или пиковые нагрузки;
  • вспомогательные сервисы (обработка изображений, отправка email);
  • прототипы и MVP;
  • IoT и мобильные бэкенды.

6. Сервис‑ориентированная архитектура (SOA — Service Oriented Architecture)

Суть: система состоит из слабосвязанных сервисов с унифицированными интерфейсами. Часто используется Enterprise Service Bus (ESB) для маршрутизации и трансформации сообщений.

Типы сервисов:

  • атомарные (базовые функции);
  • композиционные (объединяют несколько атомарных).

Плюсы:

  • переиспользование сервисов в разных проектах;
  • стандартизация интеграции;
  • независимость разработки сервисов.

Минусы:

  • высокая сложность ESB;
  • потенциальные узкие места в шине;
  • избыточность для небольших систем.

Когда применять:

  • интеграция унаследованных систем в крупных корпорациях;
  • долгосрочные проекты с многократным переиспользованием сервисов;
  • экосистемы с множеством разнородных приложений.

7. Клиент‑серверная архитектура

Суть: чёткое разделение на клиентскую часть (UI) и серверную (логика, данные). Клиенты обращаются к серверу за услугами.

Варианты:

  • тонкий клиент (вся логика на сервере);
  • толстый клиент (часть логики на клиенте).

Плюсы:

  • централизованное управление данными и безопасностью;
  • простота обновлений сервера;
  • масштабирование серверов под нагрузку.

Минусы:

  • зависимость клиентов от сети;
  • возможная перегрузка сервера при росте числа клиентов;
  • сложность оффлайн‑режима.

Когда применять:

  • веб‑приложения;
  • мобильные приложения с бэкендом;
  • корпоративные системы с централизованной БД.

Сравнительная таблица видов архитектуры

Вид архитектурыМасштабируемостьСложностьГибкостьЛучший сценарий
МонолитНизкаяНизкаяНизкаяMVP, небольшие проекты
МикросервисыВысокаяВысокаяВысокаяКрупные, сложные системы
МногослойнаяСредняяСредняяСредняяКорпоративные приложения
EDAВысокаяВысокаяОчень высокаяРеальное время, IoT
ServerlessАвтоматическаяНизкаяСредняяНерегулярные нагрузки
SOAСредняяВысокаяСредняяИнтеграция в корпорациях
Клиент‑серверСредняяНизкаяНизкаяВеб‑ и мобильные приложения

Как выбрать архитектуру?

При выборе учитывайте:

  • Размер проекта: монолит для старта, микросервисы для роста.
  • Нагрузку: EDA и Serverless для пиков, монолит для стабильной нагрузки.
  • Сроки: монолит быстрее запустить, микросервисы требуют времени на настройку.
  • Команду: микросервисы и EDA требуют опытных DevOps и архитекторов.
  • Бюджет: Serverless экономит на серверах, но может быть дорог при высокой нагрузке.
  • Требования к отказоустойчивости: микросервисы и EDA лучше переносят сбои.