Разработка высоконагруженных проектов
Когда сайт падает под нагрузкой, первое желание — купить сервер помощнее. Иногда это помогает, но чаще проблема не в мощности, а в одном тяжёлом запросе, который выполняется на каждой странице и который никто не замечал, пока посещаемость была втрое ниже.
Поэтому мы начинаем с профилирования под нагрузкой, а не с апгрейда. Найденное узкое место обычно оказывается дешевле исправить, чем оплачивать вдвое больший сервер каждый месяц.
Обсудить задачуКак работаем
- 01
Воспроизводим нагрузку
Нагрузочное тестирование на копии с реальными данными. Без воспроизведения оптимизация делается вслепую.
- 02
Ищем узкое место
Профилируем приложение и базу. В большинстве проектов основное время уходит на несколько конкретных запросов.
- 03
Чиним самое дорогое
Индексы, лишние запросы в циклах, кеширование того, что не меняется. Обычно это даёт основной выигрыш.
- 04
Добавляем слои
Кеш, очереди для тяжёлых операций, вынос статики. Только после того, как код перестал быть проблемой.
- 05
Проверяем повторно
Тот же нагрузочный тест. Разница должна быть в цифрах, а не в ощущениях.
Типичные узкие места
- Запросы в циклеКаталог, который на каждый товар делает отдельный запрос к базе. На сотне позиций это сотня запросов вместо одного.
- Отсутствие индексовПоиск по полю, по которому база вынуждена перебирать всю таблицу. Заметно только при росте объёма.
- Тяжёлые операции в запросе пользователяФормирование отчёта или отправка письма внутри обработки нажатия кнопки вместо фоновой задачи.
- Кеш, который не работаетНастроен, но сбрасывается при каждом изменении любого товара, и потому бесполезен.
Что обычно спрашивают
Поможет ли просто увеличить сервер?
Иногда да, как временная мера перед известным пиком. Но если проблема в коде или запросах, рост железа даёт линейный выигрыш при экспоненциальном росте расходов.
Как понять, какую нагрузку нужно держать?
От планов: рекламная кампания, сезон, рассылка по базе. Проектировать «на всякий случай под миллион» дорого и обычно не нужно.
Можно ли протестировать до запуска рекламы?
Нужно. Нагрузочный тест на копии перед кампанией стоит несопоставимо дешевле, чем упавший сайт в день старта.
Что если проблема в хостинге?
Скажем прямо и предложим переезд. Иногда самое честное решение — сменить площадку, а не оптимизировать код под её ограничения.
Сколько стоит?
Диагностика — понятный по объёму этап, дальше зависит от найденного. Мы сначала находим причину, потом оцениваем исправление.
