Бюджет вместо слова медленно
Разложите время ответа на очередь, PHP, запросы к базе, внешние вызовы и передачу тела. P95 и P99 показывают хвост распределения лучше среднего. Сравнивайте одинаковый маршрут и объём данных до и после изменения.
Локальный быстрый запрос на пустой базе не доказывает production-план. Нужны реалистичная кардинальность и холодный сценарий кеша.
Сначала количество операций
N+1 возникает, когда список из N элементов запускает дополнительный запрос для каждого. Исправление может быть JOIN, пакетная загрузка по id или заранее спроектированная read model. Счётчик запросов в тесте помогает заметить регрессию до production.
Чтение файла целиком и сбор огромного массива создают сходную проблему памяти. Генератор и потоковая обработка полезны, когда результат можно потреблять последовательно.
Кеш — копия с политикой
Что кешировать
Кешируйте дорогой и достаточно стабильный результат, а не случайный фрагмент кода. Ключ включает все параметры, влияющие на ответ, включая пользователя и язык, если результат различается. Не кладите приватный ответ в общий публичный кеш.
Cache stampede ограничивают lock, stale-while-revalidate или случайным разбросом TTL. Ошибка источника не должна бесконечно продлевать некорректные данные без наблюдаемого сигнала.
Фоновые задачи
Отправку письма, генерацию отчёта и тяжёлый импорт можно вынести из HTTP-ответа. Очередь меняет контракт: сообщение может прийти повторно, задержаться или не обработаться с первой попытки. Worker должен быть идемпотентным, иметь retry с backoff и dead-letter наблюдаемость.
Пользователь получает идентификатор операции и способ узнать состояние, а не обещание мгновенного завершения.
Наблюдаемость и приватность
Метрика отвечает сколько и как долго, лог — что произошло в конкретном событии, trace — где ушло время между компонентами. Не превращайте наблюдаемость в скрытый сбор пользовательского содержимого. Названия операций и технические размеры обычно полезнее тела сообщения.
Analytics продукта и operational telemetry имеют разные цели и политики согласия. На этом сервисе внешняя аналитика не загружается до accepted.
Практика главы
Возьмите список проектов с количеством задач. Предположите N+1, добавьте измерение числа SQL-запросов, предложите read query и кеш. Опишите ключ, TTL и инвалидирование.
Закрепите материал
Отметка, заметка, чек-лист и ответы остаются в localStorage этого браузера и не отправляются в аналитику.
Перелинковка со справочником
Проверка актуальности
- dev.mysql.comhttps://dev.mysql.com/doc/refman/8.4/en/Первичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
Текст и схемы созданы для этого самоучителя без воспроизведения страниц, иллюстраций и листингов приложенной книги. Проверено: .