Какие преимущества монолитной архитектуры
Что проверяют
Понимаете ли вы монолит как осознанный выбор, а не как «легаси, которое пора распилить». Следом почти всегда спрашивают, в какой момент вы бы начали выделять сервисы и что для этого нужно подготовить заранее.
Как отвечать
Назовите преимущества с привязкой к .NET:
- одно развёртывание: одно приложение ASP.NET Core, один артефакт, один пайплайн. Откат это возврат одной версии, а не согласование десятка;
- транзакции без распределённости: изменения нескольких агрегатов сохраняются одним
SaveChangesвDbContextили в общей транзакции базы. В микросервисах ту же задачу решают сагой и outbox, с компенсациями и промежуточными состояниями; - вызовы в процессе: обращение к соседнему модулю это вызов метода, без сериализации, сети, таймаутов и повторов;
- рефакторинг и отладка: компилятор проверяет контракты между модулями, переименование в Rider или Visual Studio проходит по всему решению, а точка останова ловит сценарий целиком;
- меньше инфраструктуры: не нужны service discovery, API-шлюз, распределённая трассировка и отдельный мониторинг на каждый сервис.
Сильный ответ добавляет модульный монолит: модули как отдельные проекты в решении, наружу видны только публичные контракты, остальное internal, границы проверяются архитектурными тестами (NetArchTest, ArchUnitNET). Такой монолит проще резать потом, если какой-то модуль действительно потребует отдельного масштабирования или своего цикла релизов.
Цену тоже назовите: общий релизный цикл для всех команд, растущее время сборки, риск, что без дисциплины границы модулей размоются.
Где спотыкаются
Говорят, что монолит не масштабируется. Масштабируется: несколько одинаковых экземпляров за балансировщиком, если приложение не хранит состояние в памяти. Нельзя масштабировать отдельную часть, это другое утверждение.
Путают монолит с «большим комом грязи». Проблема запутанного кода в отсутствии границ, а не в числе процессов, и микросервисы её не лечат, а переносят в сеть.
Предлагают микросервисы команде из пяти человек «на вырост». Интервьюер ждёт, что вы свяжете архитектуру с размером команды и нагрузкой.