Задача: есть endpoint getWeather, который возвращает температуру в городе. На него большая нагрузка. Как реализовать кэширование? Что происходит при cache miss под высокой нагрузкой (50k RPS)?

Кешируйте погоду по нормализованному городу, единицам измерения и нужным параметрам с допустимым TTL. При массовом промахе объединяйте обновление одного ключа, иначе 50k RPS обрушатся на источник.

Короткий ответ

Что ответить на собеседовании

Кешируйте погоду по нормализованному городу, единицам измерения и нужным параметрам с допустимым TTL. При массовом промахе объединяйте обновление одного ключа, иначе 50k RPS обрушатся на источник.

Подробный разбор

Ответ с пояснениями

Кешируйте погоду по нормализованному городу, единицам измерения и нужным параметрам с допустимым TTL. При массовом промахе объединяйте обновление одного ключа, иначе 50k RPS обрушатся на источник.

Часто используют небольшой локальный кеш и общий распределённый кеш. Если данные слегка устаревают допустимо, stale-while-revalidate позволяет отдать прошлое значение и обновить его в фоне одним исполнителем.

Для холодного ключа нужны single-flight, ограничение ожидания и лимит обращений к погодному провайдеру. Разброс TTL уменьшает одновременное истечение разных ключей. Ошибки и «город не найден» кешируют по отдельной короткой политике; произвольные ключи ограничивают, чтобы не заполнить память мусором.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее