Вступить в клуб →
сложнаявопросКэш, очереди и фоновые задачи

Всплеск latency в момент истечения TTL популярного ключа

Расчёт свободных слотов записи кэшируется в Redis на 10 минут, ручку дёргают около 500 раз в секунду. Ровно каждые 10 минут p95 подскакивает с 80 мс до 2 секунд, а в мониторинге БД видно короткий всплеск одинаковых тяжёлых запросов.

Что происходит и как это лечат?

  • Проблема в сети до Redis: раз в 10 минут соединения переустанавливаются и запросы встают в очередь; помогают постоянные соединения и конвейеризация команд
  • В момент промаха все параллельные запросы уходят считать одно и то же в БД. Пересчёт должен выполнять один процесс под блокировкой по ключу, либо значение обновляют заранее, до истечения TTL
  • Достаточно увеличить TTL до суток: всплеск станет реже, данные почти не устареют, а редкий скачок p95 раз в сутки укладывается в допустимый уровень обслуживания
  • Нужно кэшировать не в Redis, а в памяти PHP-процесса: обращение к локальному массиву быстрее сетевого вызова, промахов не будет и всплеск исчезнет

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела