Ответ
Монолитная архитектура — это стиль, при котором все компоненты приложения (UI, бизнес-логика, доступ к данным) упакованы в единую deployable единицу (WAR/JAR) и работают в одном процессе.
Характеристики:
- Единая кодовая база и процесс сборки.
- Компоненты вызывают друг друга через прямые вызовы методов (в памяти).
- Общие библиотеки и модели данных.
- Развёртывается как одно целое.
Пример структуры Spring Boot монолита:
src/main/java/com.example.app/
├── Application.java # Главный класс с @SpringBootApplication
├── controller/ # REST-контроллеры (@RestController)
├── service/ # Бизнес-логика (@Service)
├── repository/ # Доступ к данным (@Repository)
└── model/ # Сущности JPA (@Entity)
Преимущества:
- Простота разработки и отладки: Запуск одного приложения, трассировка вызовов в одном процессе.
- Простота развёртывания: Нужно скопировать и запустить один артефакт.
- Согласованность транзакций: Легко обеспечить ACID через
@Transactional, так как всё работает с одной БД. - Меньше накладных расходов: Нет сетевых задержек на межсервисное взаимодействие (RPC/HTTP).
Недостатки:
- Сложность масштабирования: Можно масштабировать только целиком («горизонтально клонировать» весь монолит), а не отдельные нагруженные компоненты.
- Технологическая связанность: Сложно внедрить новые технологии (например, другой язык) для части функционала.
- Надёжность: Падение одного компонента может привести к падению всего приложения.
- Непрерывная интеграция: По мере роста кодовой базы полная сборка и прогон всех тестов становятся очень долгими.
- Понимание кода: Новичкам сложно разобраться в большой единой кодовой базе.
Когда выбирать: Для небольших проектов, команд или на старте продукта, когда важна скорость выхода на рынок и простота операций.