Сейчас для
PersMarket приходится много где добавлять кэш. Есть файловый кэш на бэкенде, есть на фронтенде, и есть отдельный
Redis для этого дела.
И вот хочу напомнить, что кэш имеет свои нюансы.
Например, есть так называемая
проблема грохочущего стада (
Cache Stampede), это ситуация, когда протухает какой-то популярный ключ и много параллельных процессов пытаются его освежить одновременно, тем самым перегружая систему.
Есть вот такие способы решения проблемы:
▪️
Внешняя блокировка (
Mutex Lock) - один из процессов получает право идти за обновлением, остальные заблокированы и ждут.
▪️
Дедупликация запросов (
Singleflight) - запросы объединяются в один, идут за обновлением, результат получают все.
▪️Стратегия
Stale-While-Revalidate - кэш продолжает отдавать устаревшее (stale) значение, пока фоновый процесс ходит за обновлением.
▪️
Фоновый предрасчет (
Cache Warming / Background Refresh) - фоновый процесс обновляет ключи незадолго ДО их истечения.
▪️
Случайный TTL (
Jitter) - к времени жизни ключа (TTL) добавляется случайная погрешность (jitter), чтобы ключи с одинаковым TTL не истекали одновременно.
Чаще всего эти подходы не обязательно внедрять руками. Есть уже готовые решения для всех популярных языков, например, такие:
.NET,
Node.js,
Python,
Java,
PHP,
Go. И не одно решение, конечно.
Даже в вайбкодинге не забывайте про стадо! 🐂🐂🐂
#architecture