Уровни кэширования
Кэширование — временное сохранение данных, чтобы ускорить их повторное использование и уменьшить нагрузку на системы. Подробнее читать тут.
Уровни кэширования — места в цепочке передачи данных, где может происходить кэширование.
Клиентский кэш
Хранение данных на устройстве пользователя (например, в браузере) для ускорения доступа к часто запрашиваемым ресурсам.
Тип данных: статические (изображения, CSS, JavaScript).
- хранит статические данные (изображения, CSS, скрипты)
- работает с заголовками HTTP (Cache-Control, ETag, Last-Modified)
- срок жизни данных ограничен временем в заголовках или ручной очисткой
Проблемы и решения:
- устаревшие данные: использовать версии URL или кэш-бастинг (например, если файл style.css обновился, к URL добавить параметр
style.css?v=2.0) - избыточное кэширование: уменьшить объем кэшируемых данных с помощью заголовков (например,
Cache-Control: no-cacheдля динамических данных, ETag, Last-Modified)
Сетевой кэш
Кэш на промежуточных узлах сети (например, CDN). Используется для уменьшения задержек и нагрузки на сервер.
Тип данных: статические (медиафайлы, страницы) и динамические (обработанные данные с учетом TTL).
- хранит данные близко к пользователю (PoP-узлы, точки присутствия)
- уменьшает трафик за счет ускорения доставки статических ресурсов
- обновление данных через TTL или инвалидацию
Проблемы и решения:
- несинхронизированные данные: регулярная инвалидация и настройка TTL. Стратегия «push» обновлений помогает предотвратить "протухания".
- высокая нагрузка на основной сервер при обновлении: расширение сети PoP или многоуровневый кэш (узлы обновляют данные между собой).
Серверны й кэш
Кэширование данных на сервере (например, в памяти или на диске) для ускорения обработки запросов.
Тип данных: динамические (результаты запросов, промежуточные вычисления).
- применяется для часто запрашиваемых данных (например, результаты сложных вычислений)
- примеры: Redis, Memcached
- кэширование как статических, так и динамических данных
Проблемы и решения:
- перезапись кэша и потеря данных: использовать алгоритмы управления кэшем, например, LRU (Least Recently Used). Или механизм TTL для периодической очистки.
- конкуренция за память: настроить лимиты на использование памяти и использовать высокоэффективные структуры данных (например, Bloom filter) для снижения нагрузки на память.
Уровень приложения (кэш приложения)
Кэширование на уровне бизнес-логики приложения, где данные обрабатываются и сохраняются в памяти / специализированных хранилищах.
Тип данных: динамические (сессии, промежуточные результаты).
- сохраняет промежуточные данные, которые генерируются во время работы приложения
- позволяет минимизировать повторные вычисления или запросы к БД
- пример: кэширование запросов в БД с помощью ORM
Проблемы и примеры решения:
- избыточное кэширование: кэшировать только те данные, которые повышают производительность
- неактуальные данные: введение стратегий инвалидации данных с учетом бизнес-логики (например, обновление данных после определенных изменений или событий).
Пример работы 4 уровней кэша
- Клиентский кэш: пользователь заходит на страницу, браузер загружает статические данные (стили, изображения) из локального кэша.
- Сет евой кэш: если изображение товара нет в браузере, запрос идет в ближайший PoP-узел CDN, где оно кэшировано.
- Серверный кэш: список товаров хранится в Redis, чтобы быстро предоставить данные без обращения к базе.
- Уровень приложения: данные о сессии и предпочтениях пользователя сохраняются в памяти приложения.
Подборка материалов по теме уровней кэширования
- Что такое кэширование сайта и почему это важно
- Кэш
- Чем полезно кэширование сайта и как его настроить
- Браузерное и серверное кэширование
- Проектирование эффективной системы кэширования
- Обзор использования клиентского кэша с распределенным кэшированием
- Основы клиентского кэширования понятными словами и на примерах. Last-modified, Etag, Expires, Cache-control: max-age и другие заголовки
- Гид по заголовкам кэширования HTTP для начинающих
- Cache Busting в продакшене: добавление параметров к CSS, JS
- Сетевое кэширование в iOS. Введение
- Кеширование. Настроить и проверить параметры кеширования на CDN-серверах
- Кэширование и производительность веб-приложений
- Кл иентский кэш данных
- 11 видов кэширования для современного сайта
- 100500 способов кэширования в Oracle Database
- Кеширование данных между микросервисами в бессерверной архитектуре
- Учебное пособие по кэшированию, часть 1 | Часть 2
Посты из нашего канала
Видео
- Как кэшировать данные | Теория кэширования
- Кэширование
- Инвалидация кешей
- Вступление - I. Архитектура веб-приложений I.II Уровень кеширования I.II.I Теория
- Виды часть I - I. Архитектура веб-приложений I.II Уровень кеширования I.II.I Теория
- Volatile vs Synchronized - I. Архитектура веб-приложений I.II Уровень кеширования I.II.II Практика
- Highload 2. Трехзвеньевая структура. Кэширование