Как реализована масштабируемость в приложении
Что проверяют
Интервьюер хочет услышать не определение из учебника, а историю про ваш сервис: какая была нагрузка, где было узкое место и что вы с ним сделали. Следом обычно спрашивают, как вы убедились, что стало лучше, и что сломается первым при росте ещё в десять раз.
Как отвечать
Стройте ответ от своих цифр: сколько запросов в секунду, сколько экземпляров, какое время ответа по p95 или p99. Затем механизмы, которые реально применялись в .NET:
- stateless-экземпляры: ASP.NET Core за балансировщиком (Nginx, YARP, ingress в Kubernetes с HPA). Состояние вынесено наружу: сессии в
IDistributedCacheна Redis, ключи Data Protection в общем хранилище, иначе куки и antiforgery-токены одного экземпляра не расшифруются на другом; - асинхронный ввод-вывод:
async/awaitдо самой базы..Resultи.Wait()в обработчиках под нагрузкой приводят к голоданию пула потоков; - кэш:
IMemoryCacheдля локального, Redis для общего,HybridCacheиз .NET 9 объединяет оба уровня и защищает от одновременного промаха; для целых ответов есть middleware output caching; - база: чаще всего узкое место именно она. Индексы,
AsNoTrackingдля чтения, реплики для отчётов, пул соединений иAddDbContextPool; - очереди: тяжёлую работу выносят в фон через RabbitMQ или Kafka и
BackgroundService, а HTTP-ответ отдают сразу; - защита: встроенный rate limiter (
AddRateLimiter), таймауты и повторные попытки через Polly илиMicrosoft.Extensions.Http.Resilience.
Подтверждайте результат замерами: нагрузочный тест в k6 или NBomber, метрики через OpenTelemetry в Prometheus и Grafana. Если сами масштабированием не занимались, так и скажите и разберите, что и в каком порядке сделали бы в текущем проекте.
Где спотыкаются
Отвечают «перешли на микросервисы». Сами по себе они ничего не масштабируют, а сетевых вызовов добавляют.
Добавляют экземпляры, а состояние оставляют в памяти процесса: статические поля, локальный кэш, sticky sessions. На двух репликах пользователи начинают видеть разные данные.
Масштабируют приложение, когда тормозит база. Двадцать экземпляров только увеличат число соединений и ускорят её падение.