Истёк TTL горячего ключа — лавина запросов в базу
Главная страница отдаёт подборку, которая собирается тяжёлым запросом (около 800 мс) и кэшируется в Redis с TTL 5 минут. Трафик — 2000 RPS. Раз в пять минут графики показывают всплеск: CPU базы уходит в полку, p99 подскакивает до нескольких секунд, часть запросов отваливается по таймауту, потом всё нормализуется до следующего цикла.
Что происходит и как это лечится?
- Redis блокируется при удалении ключа по TTL и на это время перестаёт отвечать клиентам; нужно несколько инстансов Redis
- TTL слишком мал: если поставить сутки, всплески исчезнут, а данные всё равно обновятся при следующем деплое сервиса
- В момент истечения ключа сотни запросов разом промахиваются и идут в базу за одним и тем же; пересчитывать должен один
- Проблема в сериализации: `JSON.parse` больших объектов блокирует event loop и создаёт очередь необслуженных запросов
