Горячий ключ в Redis
Вопрос
В распродажу один товар даёт 200 000 чтений в секунду, и узел Redis кластера с этим ключом перегружен. Что будете делать?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Диагностика: метрики по узлам, redis-cli --hotkeys при политике LFU
Локальный кеш в процессе на 1-5 секунд для горячих ключей
Копии ключа с суффиксом на разных узлах, чтение случайной копии
Реплики Redis для чтения
Остаток товара считать отдельно и атомарно, не через тот же кеш
Что могут спросить следом
- Как обновлять копии ключа согласованно?
- Что делать со счётчиком остатка?
Разбор
Сначала подтверждаю диагноз: нагрузка на один узел кластера, по метрикам видно ключ. Самое эффективное: локальный кеш в каждом экземпляре приложения на 1-5 секунд, тогда в Redis приходит по одному запросу в секунду от экземпляра, а не сотни тысяч. Если нужен общий кеш, делаю N копий ключа с суффиксом, product:42:1 ... product:42:10, они попадают на разные слоты и узлы, читаю случайную. Можно читать с реплик. Карточка товара допускает устаревание на секунды, а вот остаток нет: его уменьшаю атомарно (DECR или Lua) и при необходимости раскладываю квоту по нескольким ключам.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.