Вопрос проверяет умение выявлять bottlenecks в архитектуре и оценивать систему на этапе проектирования.
Узкие места определяют через анализ потоков данных, нагрузки, скорости операций, сетевых задержек, структуры БД, точек синхронизации, последовательных операций и конкурирующих ресурсов. Используются профилирование, метрики, трейсинг и моделирование поведения при росте нагрузки.
Bottlenecks — это компоненты, которые ограничивают пропускную способность системы. Их поиск — критический шаг при проектировании и оптимизации архитектуры.
Нужно составить полную цепочку обработки:
клиент → gateway → сервисы → БД → очередь → воркер.
Узкие места часто появляются:
там, где данные проходят через единственную точку;
там, где операции выполняются строго последовательно;
там, где один сервис знает слишком много о других.
Для каждого компонента важно понимать:
частоту вызовов (QPS/RPS);
размеры данных;
пиковые нагрузки;
распределение нагрузки по времени.
Узкие места часто скрываются в “горячих” путях.
Базы — самый частый bottleneck:
медленные запросы;
отсутствие индексов;
lock-и;
запись в один master;
слишком большие таблицы.
Также важны:
количество соединений;
пропускная способность диска;
лимиты реплик.
Проблемы возникают:
между датацентрами;
при N запросах между сервисами;
при передаче больших payloads;
из-за очередей TCP.
Сеть — один из главных источников неожиданной деградации.
Узкими местами могут становиться:
CPU;
RAM;
сетевые интерфейсы;
медленный диск;
лимиты контейнеров (requests/limits в Kubernetes).
Особенно важно отслеживать CPU throttling.
Проблемы:
транзакции, которые удерживают lock-и;
глобальные блокировки;
shared state;
serialization bottlenecks.
Это приводит к резкому падению производительности под нагрузкой.
Используются:
метрики (p95/p99 latency);
трейсинг (смотрим, где “горит”);
профилирование;
flame graphs.
Эти инструменты дают фактическую картину узких мест.
Перед запуском системы важно:
выполнять нагрузочные тесты;
проверять стресс-сценарии;
симулировать падение зависимостей;
тестировать разные объёмы данных.
Это позволяет поймать bottlenecks до реального трафика.
Узкие места определяют через анализ потоков данных, нагрузок, хранилищ, сети, блокировок, аппаратных лимитов и метрик. Использование трейсинга, профилирования и нагрузочного тестирования позволяет выявлять и устранять bottlenecks до выхода в прод.