🔵 Уровни кэширования
Кэширование — временное сохранение данных, чтобы ускорить их повторное использование и уменьшить нагрузку на системы.
Подробнее читать тут
Уровни кэширования — места в цепочке передачи данных, где может происходить кэширование
Клиентский кэш
Хранение данных на устройстве пользователя (например, в браузере) для ускорения доступа к часто запрашиваемым ресурсам
Тип данных: статические (изображения, 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
Проблемы и примеры решения
➡избыточное кэширование: кэшировать только те данные, которые повышают производительность
➡неактуальные данные: введение стратегий инвалидации данных с учетом бизнес-логики (например, обновление данных после определенных изменений или событий)
📎 Материалы
1. Что такое кэширование сайта и почему это важно
2. Кэш
3. Чем полезно кэширование сайта и как его настроить
4. Браузерное и серверное кэширование
5. Проектирование эффективной системы кэширования
6. Обзор использования клиентского кэша с распределенным кэшированием
7. Основы клиентского кэширования понятными словами и на примерах. Last-modified, Etag, Expires, Cache-control: max-age и другие заголовки
8. Кеширование. Настроить и проверить параметры кеширования на CDN-серверах
9. Клиентский кэш данных
#архитектура
➿➿➿➿➿➿➿➿➿➿
🧑🎓 Больше полезного в базе знаний по системному анализу