Перейти к основному содержимому

Уровни кэширования

Кэширование — временное сохранение данных, чтобы ускорить их повторное использование и уменьшить нагрузку на системы. Подробнее читать тут.

Уровни кэширования — места в цепочке передачи данных, где может происходить кэширование.

Клиентский кэш

Хранение данных на устройстве пользователя (например, в браузере) для ускорения доступа к часто запрашиваемым ресурсам.

Тип данных: статические (изображения, 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, чтобы быстро предоставить данные без обращения к базе.
  • Уровень приложения: данные о сессии и предпочтениях пользователя сохраняются в памяти приложения.

Подборка материалов по теме уровней кэширования

  1. Что такое кэширование сайта и почему это важно
  2. Кэш
  3. Чем полезно кэширование сайта и как его настроить
  4. Браузерное и серверное кэширование
  5. Проектирование эффективной системы кэширования
  6. Обзор использования клиентского кэша с распределенным кэшированием
  7. Основы клиентского кэширования понятными словами и на примерах. Last-modified, Etag, Expires, Cache-control: max-age и другие заголовки
  8. Гид по заголовкам кэширования HTTP для начинающих
  9. Cache Busting в продакшене: добавление параметров к CSS, JS
  10. Сетевое кэширование в iOS. Введение
  11. Кеширование. Настроить и проверить параметры кеширования на CDN-серверах
  12. Кэширование и производительность веб-приложений
  13. Клиентский кэш данных
  14. 11 видов кэширования для современного сайта
  15. 100500 способов кэширования в Oracle Database
  16. Кеширование данных между микросервисами в бессерверной архитектуре
  17. Учебное пособие по кэшированию, часть 1 | Часть 2

Посты из нашего канала

  1. Стратегии работы с кэшем

Видео

  1. Как кэшировать данные | Теория кэширования
  2. Кэширование
  3. Инвалидация кешей
  4. Вступление - I. Архитектура веб-приложений I.II Уровень кеширования I.II.I Теория
  5. Виды часть I - I. Архитектура веб-приложений I.II Уровень кеширования I.II.I Теория
  6. Volatile vs Synchronized - I. Архитектура веб-приложений I.II Уровень кеширования I.II.II Практика
  7. Highload 2. Трехзвеньевая структура. Кэширование