Как начать решать проблему медленной загрузки данных в монолитной системе
Что проверяют
Умеете ли вы начинать с диагностики, а не с готового решения. Интервьюеру важно, чтобы вы не предложили сразу распилить систему на микросервисы, а выяснили, что именно медленно и почему. Следом обычно спрашивают, как вы поймёте, что проблема решена.
Как отвечать
Стройте ответ как последовательность шагов:
- уточнить симптом: какой экран, отчёт или метод API, у каких пользователей, с какого момента, при каком объёме данных. «Медленно» у заказчика и «медленно» в логах часто разные вещи;
- зафиксировать метрику: не среднее время, а перцентили p95 и p99. Отсюда же рождается нефункциональное требование, например «список заказов открывается быстрее двух секунд для 95% запросов»;
- найти слой: трассировка показывает, где уходит время: в базе, в коде, во внешнем вызове или на фронтенде. Инструменты: APM-системы, OpenTelemetry с Jaeger или Grafana Tempo, вкладка Network в браузере;
- база: чаще всего виновата она. Медленные запросы находят через
pg_stat_statementsили slow query log, план разбирают черезEXPLAIN ANALYZE. Типичные находки: нет индекса, ORM порождает N+1 запросов, отчёт тянет всю таблицу без пагинации; - быстрые меры: индекс, пагинация, выборка только нужных полей, кэш справочников, а тяжёлую выгрузку в фоновую задачу с уведомлением о готовности;
- проверка результата: замер тех же перцентилей до и после на сопоставимых данных, затем мониторинг и алерт на регрессию.
Про архитектуру стоит сказать в конце. Монолит сам по себе не медленный, и выделять сервис имеет смысл, только если узкое место в модуле, который нужно масштабировать отдельно. Это месяцы работы, а индекс ставится за день.
Задача аналитика здесь: превратить жалобу в измеримое требование и расставить узкие места по влиянию на бизнес.
Где спотыкаются
Сразу предлагают микросервисы или кэш в Redis, не выяснив причину. Кэш поверх неэффективного запроса прячет проблему и добавляет устаревшие данные.
Опираются на среднее время отклика. Среднее выглядит прилично, пока каждый двадцатый пользователь ждёт по десять секунд.
Не фиксируют исходный замер. Без него нельзя доказать, что изменения помогли, и спор идёт на уровне ощущений.