📂 Стратегии работы с кэшем
Ранее описывали процесс кэширования
Рассмотрим подходы к работе с кэшем
Стратегии чтения данных
⏩ Кэширование на стороне (Cache Aside)
🟡приложение запрашивает данные из кэша
🟡если данные отсутствуют в кэше, приложение запрашивает их из БД
🟡после получения, приложение записывает их в кэш для следующих запросов
Обновление кэша: обновляется только после запроса данных из БД
✅ просто реализовать, контроль за кэшированием на уровне приложения
✖ если данные изменяются в базе, кэш может стать устаревшим
➡Пример: каталог товаров в интернет-магазине, который редко изменяется.
Пользователь запрашивает карточку товара: приложение сначала проверяет кэш.
Если информации нет, данные запрашиваются из базы и сохраняются в кэш
⏩ Сквозное чтение (Read Through)
🟡приложение запрашивает данные только из кэша
🟡если данных нет, кэш сам обращается к БД, извлекает данные и возвращает их приложению, одновременно сохраняя их в кэше
Обновление кэша: автоматически при отсутствии данных в нём, во время запроса из БД
✅облегчает работу приложения, данные автоматически кэшируются при первом запросе
✖ задержка при первом запросе
➡ Новостной сайт, где кэш хранит статьи. Приложение запрашивает статьи из кэша.
Если статьи нет, кэш автоматически получает её из БД, обновляет кэш и передаёт статью пользователю
Стратегии записи данных
⏩ Сквозная запись (Write Around)
🟡приложение записывает данные напрямую в БД
🟡данные в кэше при этом не обновляются
🟡последующие чтения могут вызвать обновление кэша через механизм Cache Aside
Обновление кэша: приложение запрашивает данные из БД. Получает и записывает их в кэш
✅подходит для данных с редкими операциями чтения
✖кэш может быть неактуальным, при первом запросе данные не кэшируютя сразу
➡ В системе учёта заказов приложение напрямую записывает новые заказы в БД, не обновляя кэш.
Кэш обновляется только при последующем чтении. Изменения редки и не требуют моментальной синхронизации с кэшем
⏩ Сквозная запись (Write Through)
🟡приложение записывает данные сначала в кэш
🟡кэш автоматически обновляет данные также в БД, синхронизируя их
Обновление кэша: кэш и БД всегда синхронизированы, так как данные записываются одновременно в в БД и в кэш
✅согласованность данных между кэшем и базой
✖более медленные операции записи, т.к. кэш обновляет базу в реальном времени
➡ Банковская система, где каждая финансовая транзакция одновременно записывается в кэш и БД для согласованности.
При запросах транзакции всегда можно получить актуальные данные как из кэша, так и из базы
⏩ Обратная запись (Write Back)
🟡приложение записывает данные в кэш
🟡кэш откладывает обновление БД, выполняет его асинхронно через определенные интервалы времени / по необходимости
Обновление кэша: данные в кэше актуальные, но БД обновляется позже, асинхронно
✅быстрая запись данных, поскольку операция записи в БД откладывается
✖риск потери данных в случае сбоя кэша до того, как БД будет обновлена
➡ В соц сети, когда пользователь редактирует профиль, изменения сохраняются в кэш.
Кэш откладывает запись в БД на попозже для асинхрона.
Помогает быстро сохранить изменения пользователя без задержек, хотя БД обновляется с задержкой
Хранение кэша
Кэш в архитектуре приложения обычно хранится в памяти, либо на выделенных серверах для кэширования. Их располагают ближе к приложению для быстрой обработки запросов.
Например,
🟡внутри приложения — локальный кэш
🟡на внешнем сервере / группе серверов — распределённый кэш
📎 Материалы
1. [По полочкам] Кэширование
2. SE: Проектирование эффективной системы кэширования
3. Стратегия кеширования в приложении
4. Все о кэшировании: стратегии, проблемы и оптимизация
5. Все о кэшировании и кэшах
6. Основные принципы кэширования веб-приложений
7. Проектирование эффективной системы кэширования для высоконагруженной системы
8. Cache-aside паттерн
9. Введение в кэширование со сквозным чтением с помощью NCache
10. Продуманные запросы: стратегии кэширования в век PWA
#проектирование #архитектура
➿➿➿➿➿➿➿➿➿➿
🧑🎓 Больше полезного в базе знаний по системному анализу
Post #513
13.2K
- ❤ 17
- 👍 11
- 🔥 6
- 😁 1