Направление из блока корпоративного развития: подключается по мере того, как продукт из MVP превращается в MMP и MLP. Стоимость направления: $4700.
Когда система замедляется, первый импульс: добавить ресурсов. Это работает, пока проблема в нехватке мощности, и не работает никогда, если проблема в запросе, который читает всю таблицу.
Медленная система стоит денег каждый день. Менеджер ждёт загрузки списка сделок и успевает обработать меньше заявок. Клиент уходит со страницы каталога, не дождавшись товаров. Отчёт для собственника строится так долго, что его перестают открывать. А счёт за сервер растёт, хотя пользователи разницы не замечают. Оптимизация сервера возвращает скорость без бесконечной покупки железа.
Что входит
- Оптимизация БД (индексы).
- Кэширование.
- Оптимизация алгоритмов.
- Повышение производительности сервера.
Оптимизация базы данных
Находим запросы, которые выполняются дольше всего или чаще всего, и разбираем, как база их исполняет. Добавляем недостающие индексы, переписываем запросы, которые тянут лишние данные, убираем повторяющиеся обращения к базе в циклах. В стеке Ingello это MySQL, и оптимизация запросов заложена ещё на этапе серверной бизнес-логики.
Кэширование
Результаты тяжёлых и редко меняющихся вычислений сохраняются в кэше (в нашем стеке это Memcached), чтобы не считать их на каждый запрос. Для каждого кэша заранее определяется, когда он сбрасывается, иначе пользователь увидит устаревшие данные.
Алгоритмы и сервер
Иногда медленная не база, а логика: перебор там, где нужен поиск, пересчёт всего там, где изменилась одна запись. Отдельно настраивается сам сервер: фоновые процессы выносятся из пользовательских запросов, тяжёлые задачи уходят в очередь.
Порядок действий важнее набора приёмов
Сначала измерение, потом изменение. Без замера оптимизация превращается в украшение кода: время уходит, а пользователь разницы не замечает, потому что чинили не то место.
Замеряем то, что чувствует бизнес: время ответа ключевых экранов и операций, самые медленные и самые частые запросы к базе, загрузку сервера в часы пик. Эти же цифры повторяем после изменений, чтобы было видно, что именно дала оптимизация.
Кэш стоит последним, а не первым. Он прячет симптом и легко становится источником новых ошибок: устаревшие данные выглядят страшнее медленной страницы.
Ещё до разработки на брифинге мы спрашиваем, сколько людей будет работать одновременно и какой объём данных ожидается через год. Нагрузка определяет архитектуру: то, что работает на 10 пользователях, ломается на 500.
Чего оптимизация не лечит
Неверную модель данных. Если связи спроектированы плохо на этапе технического задания, никакой индекс не спасёт: потребуется рефакторинг и миграция.
Что получает бизнес
- Замер до и после: какие страницы и операции были медленными и что изменилось.
- Быстрые экраны, с которыми сотрудники работают каждый день.
- Расходы на сервер, которые растут вместе с бизнесом, а не вместе с ошибками в запросах.
- Список мест, где проблема в модели данных, а не в производительности, с оценкой рефакторинга.
Сколько стоит и от чего зависит
Направление стоит $4700 по фиксированной цене: оптимизация базы, кэширование, оптимизация алгоритмов и производительности сервера. На консультации определяем, какие операции критичны для бизнеса и какую нагрузку система должна выдерживать. Если систему писала другая команда, сначала проводится аудит существующей системы: $800 за текстовый отчёт или $2400 с ранним прототипом доработки.
Что ломается, если сэкономить
- Бюджет уходит на более дорогой сервер, а медленный запрос остаётся медленным.
- Кэш, добавленный без правил сброса, показывает клиентам старые цены и остатки.
- Система держится, пока данных мало, и падает в самый загруженный день сезона.
- Оптимизацию делают «на глаз» и чинят не то место, которое тормозит.
Примеры из практики
Собственный пример. При аудите нашего блога выяснилось, что у 36 записей текст весит свыше 100 000 знаков, потому что картинки вшиты прямо в текст статьи в виде закодированной строки. Такие страницы почти невозможно проиндексировать из-за скорости загрузки. Мощный сервер здесь не помог бы: проблема была в том, как хранятся данные. Мы перенесли изображения в отдельные файлы, и сегодня ни одна из 1700 статей блога не содержит вшитых картинок.
В проектах с потоковой обработкой данных в реальном времени производительность видна особенно наглядно. Если обработка не успевает за потоком, данные копятся в очередях, задержка растёт, и через минуту разговор идёт с отставанием в десять секунд. Правильная система умеет вовремя выбросить лишнее, а не копить его.
Куда дальше
Смежные направления: кэширование и офлайн и рефакторинг. Карта собрана в стратегии разработки приложения.
Если Ваша система тормозит, а покупка сервера помогает всё меньше, запишитесь на бесплатную консультацию с архитектором. Разберём, где искать причину, и после консультации пришлём расчёт цены и сроков по этапам.