Как обновить кеш. Четыре способа
Разработчик Вишну Чиламакуру поделился в своем блоге четырьмя способами обновления кеша. Эти стратегии представляют собой добавление слоя кеша перед базой данных (БД), который может помочь избежать неравномерную нагрузку и всплеск трафика приложений.
Стороннее кеширование/отложенная загрузка (Cache Aside)
В этом случае приложение отвечает за чтение и запись из хранилища. Кеш не взаимодействует с хранилищем напрямую. Приложение ищет запись в кеше, если не находит, то загружает запись из базы данных, затем добавляет запись в кеш и возвращает ее.
Последующие чтения данных, добавленных в кеш, выполняются быстро. Эту стратегию также можно название назвать отложенной загрузкой (lazy loading). То есть кешируются только запрошенные данные, что позволяет избежать заполнения кеша незапрошенными данными.
Недостатки стратегии:
Каждый промах кеша приводит к трем отключениям, что может спровоцировать задержку;
- Данные могут устареть, если будут обновлены в базе данных. Эта проблема устраняется установкой времени жизни пакетных данных, которое приводит к обновлению записи кеша, или использованием сквозной записи;
- Когда узел выходит из строя, он заменяется новым пустым узлом, что увеличивает задержку.
Сквозная запись (Write Through)
Приложение использует кеш в качестве основного хранилища данных, считывая и записывая в него информацию, в то время как кеш отвечает за чтение и запись в БД. Приложение добавляет/обновляет запись в кеш, затем он синхронно делает запись в хранилище данных, а потом возвращает ее.
Последующее чтение только что записанных данных происходит быстро. По мнению Вишну Чиламакуру, пользователи обычно более терпимы к задержкам при обновлении данных, чем при их чтении.
Недостатки стратегии:
- Когда новый узел создается из-за сбоя или масштабирования, он не будет кешировать записи, пока запись не будет обновлена в базе данных;
- Большая часть записанных данных может никогда не быть прочитана, что можно минимизировать с помощью TTL.
Отложенная запись (Write Behind)
Приложение добавляет/обновляет запись в кеше, затем асинхронно делает запись в хранилище данных, улучшая производительность.
Недостатки стратегии:
- Если кеш выйдет из строя до того, как его содержимое попадет в хранилище данных, может произойти их потеря;
- Этот метод сложнее реализовать, чем два первых.
Отложенное обновление (Refresh Ahead)
Стратегия позволяет настроить кеш для автоматического обновления любой недавно использованной записи кеша до истечения срока ее действия. Может привести к уменьшению загрузки по сравнению с методом сквозного чтения, если кеш может точно предсказать, какие элементы могут потребоваться в будущем.
Недостаток стратегии связан с неточным прогнозированием того, какие элементы могут потребоваться в будущем, что может привести к снижению производительности приложения.
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: