Просто о кэшировании 🔥
Я боялся кэширования, думал, что это сложно😱. В действительности все не так трудно, но есть нюансы. Давайте разберемся.
➡️ Что такое кэширование?
🏠 Представьте кладовку в доме, где мы храним часто используемые вещи. Мы не везем их в гараж за тридевять земель, потому что эти вещи должны быть под рукой. В IT это называется кэшированием – способ хранения часто используемых данных в быстродоступном месте. Но, в отличие от вещей, через какое-то время этих данных не станет.
➡️ Для чего?
Если вещи дома под рукой, не нужно будет ехать в тот же гараж и тратить время. 💡 Основная идея кэширования – ускорение работы системы, мы получаем нужные данные быстрее, чем если бы ходили в БД. Также снижается нагрузка, а в случае отказа компонента мы все равно получим данные.
➡️ Какие данные кэшируются?
Зависит от частоты их изменения:
– Меняются часто, буквально каждую секунду: кэширование бессмысленно. Пример: биржевые котировки
– Меняются нечасто, раз в несколько минут или часов: нужно обсудить целесообразность. Пример: курс валют, рейтинг товаров
– Меняются редко, раз в несколько дней, недели, месяцы: можно спокойно кэшировать. Пример: коды регионов РФ, список стран и городов
➡️ Где хранится кэш?
Варианты:
– Клиентский кэш (браузер, мобильное приложение)
– Серверный кэш (in-memory cache, Redis)
– Распределенный кэш (CDN)
Если говорить про сервер, то различают внутреннее и внешнее кэширование:
➡Внутреннее (in memory) кэширование происходит внутри сервиса (внутри его оперативной памяти, хеш-таблице). ➕ Высокая скорость обращения за счет того, что не нужно выполнять запросы к чему-то извне, но ⚠ при горизонтальном масштабировании (создании копий сервиса) требуется синхронизация
➡Внешнее кэширование происходит на стороне (например, в Redis).⚠Работает медленнее внутреннего, зато можно хранить большие объемы данных, легче масштабировать➕
Чаще всего используют внешнее кэширование, если нет требования к скорости работы
❓ Что это за буквы?
– TTL (Time To Live)⏱ – время жизни кэша в секундах
– Cache miss – промах кэша, запрошенный ключ не был найден
– Cache hit – попадание в кэш, запрошенный ключ найден
– Hit ratio – процент попаданий запросов в кэш, характеризует эффективность кэширования
– Горячий ключ🔥 – ключ, на который приходится большая часть запросов
– Прогрев кэша – процесс наполнения кэша данными
– Инвалидация🗑 – удаление кэшированных данных
➡️ Как работает?
Смотрите картинки к посту
– Cache Aside (кэширование на стороне) – сервис координирует запросы в кэш и БД и сам решает, куда и в какой момент обращаться. Достоинство➕: простота, минимум рисков
– Cache Through (сквозное кэширование) – все запросы от приложения проходят через кэш. По сути сервис не знает о БД, вместо этого он обращается только в кэш. Достоинство➕: консистентность данных
– Cache Ahead (опережающее кэширование) – кэш сам периодически подгружает данные из БД через воркер. Если сервис не обнаруживает данные в кэше, он говорит, что их нет. Достоинство➕: нет Cache Miss
➡️ Вывод
Кэширование – мощный инструмент для ускорения работы сервера, но его реализация зависит от требований. Большинство систем обходятся внешним кэшированием с использованием Cache Aside, а кэшируются только редко изменяемые данные.
——————
⬇А у вас на проекте используется кэширование? Если да, то как реализовано? Делитесь своим опытом в комментариях
#полезное_системный_анализ
Post #7
843



- 🔥 13
- ❤ 4
- 💯 1