Микросервисная архитектура стала мейнстримом, но часто ее выбирают «на вырост», не имея реальной потребности в десятках команд и языков. Расплата — рост задержек, распределенная сложность, каскадные отказы, невозможность запустить всё локально одной кнопкой. А если ваша команда одна, БД одна, а микросервисов больше, чем ядер CPU? Что, если код пишется на C#, а не на шести языках?
Выход есть — модульный монолит. Это одно приложение в одном процессе, но его внутренности разбиты на независимые модули с контролируемыми границами. Такой подход дает слабую связанность и высокую связность внутри модуля, но без сетевых вызовов, сериализации и распределенных транзакций. И главное: ASP.NET Core поддерживает его из коробки.
В докладе мы на реальном коде разберем:
- Как загружать модули выборочно с помощью IHostingStartup и HOSTINGSTARTUPASSEMBLIES, не меняя код программы.
- Как в каждом модуле регистрировать свои MVC-контроллеры, Minimal API, Razor Pages через ApplicationParts и IStartupFilter.
- Как строить модульную модель данных в EF Core: IEntityTypeConfiguration, сборка единого контекста, миграции и связи между сущностями разных модулей.
- Как не сломать архитектуру: Roslyn-анализаторы и проверка зависимостей в рантайме.
- Как упаковать всё в один Docker-образ с multi-stage build и запускать один или несколько модулей на выбор через переменные окружения.
Результат: вы получите готовую архитектуру, которая одинаково удобна для разработки (F5, отладка, юнит-тесты) и для эксплуатации (один контейнер, масштабирование по модулям). И главное — вы не платите «налог на микросервисы» с первой строчки кода.
Доклад будет полезен архитекторам и lead-разработчикам, которые хотят баланса между монолитом и микросервисами, используя только стандартные возможности .NET.