Современные приложения часто требуют гибкости, масштабируемости и быстрой адаптации к изменениям. Традиционные монолитные системы могут не справляться с этими задачами, поэтому всё чаще приложения собирают из независимых и слабосвязанных компонентов.
Композитная архитектура — это подход к проектированию ПО, при котором приложение строится из набора слабосвязанных, независимо разрабатываемых, развёртываемых и масштабируемых компонентов. Эти компоненты взаимодействуют только через чётко определённые интерфейсы (чаще всего API).
В отличие от монолита, где все компоненты тесно связаны, композитный подход позволяет собирать систему как конструктор, комбинируя готовые блоки в разных конфигурациях без необходимости переписывать всю кодовую базу.

Композитная и микросервисная архитектура
Важно понимать, что микросервисная архитектура — это лишь один из возможных стилей в рамках более широкой концепции композитной архитектуры. Ключевой принцип композитной архитектуры — независимое развёртывание модулей, а не их обязательно малый размер.
В композитную архитектуру также входят:
Крупные сервисы (макросервисы) — более крупные, чем микросервисы, но автономные компоненты.
Packaged Business Capabilities (PBC) — готовые решения, которые объединяют несколько связанных бизнес-возможностей (часто включая в себя несколько сервисов и интерфейсов) в единый, легко интегрируемый модуль.
Serverless-функции — идеальны для эпизодических задач (генерации отчётов, обработки файлов) или создания легковесных API.
Ключевое отличие микросервисной архитектуры от других стилей в рамках композитного подхода — степень детализации (гранулярность) и автономии компонентов. В микросервисах делают акцент на высокой гранулярности, когда каждый сервис отвечает за одну чётко определённую бизнес-способность.
Таким образом, композитная архитектура охватывает сборку системы из слабосвязанных, независимо развёртываемых модулей любого типа: отдельный микросервис, PBC или serverless-функцию.
Техническая реализация композитной архитектуры
Каждый компонент управляет своей частью бизнес-логики, имеет независимую кодовую базу и жизненный цикл. Взаимодействие компонентов происходит через API и механизмы обмена событиями, формируя коммуникационную инфраструктуру. Для прямых запросов и ответов используют синхронные протоколы (REST, gRPC, GraphQL). Когда нужна гибкость и устойчивость, прибегают к асинхронной связи через брокеры сообщений (Kafka, RabbitMQ).
API-шлюзы выполняют критически важные функции:
направляют входящие запросы к соответствующим сервисам;
обеспечивают безопасность (контроль доступа, аутентификация, TLS-шифрование);
преобразуют и объединяют данные из нескольких источников;
ограничивают частоту запросов (rate limiting);
кешируют ответы и предоставляют метрики для анализа работы системы.
Headless-подход строго разделяет backend (бизнес-логику, данные и API) и frontend (любой пользовательский интерфейс). Это позволяет независимо развивать интерфейсы и бэкенд, используя универсальные форматы данных (JSON, Protobuf) для совместимости. Один бэкенд обслуживает разные клиенты: веб, мобильные приложения, IoT.

Событийно-ориентированная архитектура (EDA) увеличивает гибкость и слабую связанность системы. Сервисы создают события, например, «Пользователь зарегистрирован», и отправляют их в центральный брокер (Kafka, RabbitMQ). Другие сервисы, которые подписаны на эти события, получают их и выполняют свои задачи, например, отправляют приветственное письмо.
Основные принципы композитной архитектуры
1. Модульность (независимость компонентов). Каждый компонент системы:
имеет отдельную кодовую базу;
разрабатывается, тестируется, развёртывается и масштабируется независимо от других;
может использовать оптимальные для своей задачи технологии (языки программирования, базы данных, фреймворки). Однако избыточная полиглотность (множество разных технологий без необходимости) может усложнить поддержку и интеграцию, особенно для PBC или макросервисов.
2. Слабая связанность. Компоненты взаимодействуют только через чётко определённые интерфейсы (API или события), без прямых зависимостей. Для этого используются:
синхронные запросы (REST, gRPC, GraphQL);
асинхронные события (Kafka, RabbitMQ);
унифицированные форматы данных (JSON, Protocol Buffers).
3. Сервис-ориентированность. Каждый компонент инкапсулирует и предоставляет через API законченную бизнес-функцию (например, обработку платежей или управление пользователями). Для успешной работы компонента необходимы:
подробная и актуальная документация его API;
механизмы автоматического обнаружения (Service Discovery) и стандартизированного взаимодействия (часто через Service Mesh);
чёткие метаданные, описывающие его функциональность и требования к интеграции.
Правильная изоляция позволяет обновлять компонент без перетестирования всей системы и локализует сбой, предотвращая полный отказ.

Преимущества композитной архитектуры
Бизнес получает гибкость: можно тестировать новые функции и процессы с минимальными рисками для всей системы. Новые функции добавляются без переписывания всего приложения. Например, чтобы внедрить чат-бот в интернет-магазин, можно создать отдельный сервис и подключить его через API.
Компоненты, разработанные с учётом повторного использования и чётких контрактов, можно применять в разных проектах. Например, универсальный сервис аутентификации можно подключить к другим проектам компании с минимальными изменениями.
Отпадает необходимость каждый раз создавать с нуля однотипные функции (платежи, уведомления, аналитику). Компания формирует библиотеку готовых решений, ускоряя разработку, новых продуктов.
С технической точки зрения разработчики получают возможность выбирать оптимальные инструменты для решения конкретных задач. Для разных компонентов системы могут быть использованы различные языки программирования, фреймворки, базы данных и т. д. Это позволяет распределить работу между автономными командами, ускорить разработку и чётко распределить ответственность.
С экономической точки зрения такой подход позволяет оптимизировать бюджет. Гранулярное масштабирование позволяет точно выделять ресурсы нуждающимся компонентам, избегая избыточных затрат.
Недостатки композитной архитектуры
Сложность проектирования. Главная трудность — высокие требования к проектированию. Неправильное разбиение ведёт к «распределённому монолиту»: плохо организованным модулям, сочетающим недостатки монолита и сложности распределённой системы. Это происходит, если:
модули слишком мелкие (например, разбиение на десятки сервисов для простой функциональности);
границы между компонентами размыты (сервисы постоянно обращаются друг к другу, создавая запутанные зависимости);
нет чёткой доменной модели (сервисы дублируют логику или данные).
Сложность эксплуатации. Распределённая система требует дополнительных инструментов и опыта:
платформы для оркестрации нужны для управления множеством независимых сервисов;
мониторинг и журналирование — диагностические данные распределены между сервисами, что требует внедрения комплексных решений для их сбора и анализа;
сетевые накладные расходы — взаимодействие между сервисами приводит к дополнительным задержкам. В событийно-ориентированных системах возрастает риск лавинообразного роста трафика.
Повышенные требования к безопасности. В распределённой системе растёт количество уязвимых мест, ведь каждый API может стать точкой входа для атаки. Основные проблемы:
Больше поверхностей атаки: злоумышленник может попытаться взломать не только внешний API, но и внутренние сервисы.
Нужно контролировать права для сотен микросервисов.
Согласованность политик: если в одном сервисе включено шифрование, а в другом нет — это создаёт риски.
Нужен комплексный подход: Service Mesh-и для управления безопасностью на уровне сети, API-шлюзы для защиты периметра и централизованные системы управления идентификацией и доступом (IAM).
Когда выбирать композитную архитектуру
Для крупных, долгоживущих систем (SaaS, корпоративных платформ).
Когда нужно быстро адаптироваться к меняющимся требованиям и часто обновлять функциональность.
Для интеграции с внешними сервисами (платежами, аналитикой).
Если команды распределены географически или работают автономно, чтобы минимизировать зависимости и сократить издержки на координацию.
Заключение
Выбор между монолитной и композитной архитектурой зависит от требований, размера команды, бюджета и долгосрочных целей проекта. Композитная даёт гибкость, масштабируемость и скорость для сложных систем и команд, но требует зрелых процессов и мощной DevOps-культуры. Монолит проще на старте для небольших проектов, но может стать тормозом при росте и необходимости изменений. Решение зависит от масштаба, сроков, команды и долгосрочных целей проекта.
Комментарии (2)
SolidSnack
05.08.2025 17:38В отличие от монолита, где все компоненты тесно связаны
Да хоспаде, если хорошо спроектировать систему то нету такой проблемы, проблема связанности компонентов давно обсуждается. Ну и микросервис это не решение, а те же проблемы только в профиль
Dhwtj
Подход является разновидностью / настройками микросервисов и не выходит за их рамки