Существуют разные способы заполнения кеша и поддержания кеша. Эти разные способы известны как стратегии кеширования. Игровому сайту, поддерживающему данные таблицы лидеров, нужна стратегия, отличная от отображения последних новостей на новостном сайте. В этой главе мы рассмотрим такую стратегию, которая называется Lazy Loading.
Когда данные запрашиваются приложением, запрос выполняет поиск данных в кэше ElastiCache. Есть две возможности. Либо данные существуют в кеше, либо их нет. Соответственно, мы классифицируем ситуацию по следующим двум категориям.
Кэш Хит
-
Приложение запрашивает данные из кэша.
-
Запрос кеша находит, что обновленные данные доступны в кеше.
-
Результат возвращается запрашивающему приложению.
Приложение запрашивает данные из кэша.
Запрос кеша находит, что обновленные данные доступны в кеше.
Результат возвращается запрашивающему приложению.
Кэш мисс
-
Приложение запрашивает данные из кэша.
-
Запрос кеша обнаруживает, что обновленные данные недоступны в кеше.
-
Нулевое значение возвращается запросом кеша запрашивающему приложению.
-
Теперь приложение запрашивает данные непосредственно из базы данных и получает их.
-
Затем запрашивающее приложение обновляет кэш новыми данными, полученными непосредственно из базы данных.
-
В следующий раз, когда запрашиваются те же данные, они попадут в приведенный выше сценарий попадания в кэш.
Приложение запрашивает данные из кэша.
Запрос кеша обнаруживает, что обновленные данные недоступны в кеше.
Нулевое значение возвращается запросом кеша запрашивающему приложению.
Теперь приложение запрашивает данные непосредственно из базы данных и получает их.
Затем запрашивающее приложение обновляет кэш новыми данными, полученными непосредственно из базы данных.
В следующий раз, когда запрашиваются те же данные, они попадут в приведенный выше сценарий попадания в кэш.
Вышеприведенные сценарии могут быть в целом изображены на диаграмме ниже.
Преимущества отложенной загрузки
Кешируются только запрашиваемые данные. Поскольку большая часть данных никогда не запрашивается, отложенная загрузка не позволяет заполнить кэш данными, которые не запрашиваются.
Сбои узла не являются фатальными. Когда происходит сбой узла и он заменяется новым пустым узлом, приложение продолжает функционировать, хотя и с увеличенной задержкой. Когда к новому узлу поступают запросы, каждая ошибка кэша приводит к запросу к базе данных и добавлению копии данных в кеш, чтобы последующие запросы извлекались из кеша.
Недостатки отложенной загрузки
Штраф за промах кэша — каждая промах кэша приводит к 3 поездкам Первый — начальный запрос данных из кеша, второй — запрос базы данных к данным и, наконец, запись данных в кеш. Это может вызвать заметную задержку в получении данных в приложение.
Устаревшие данные — если данные записываются в кеш только при отсутствии кеша, данные в кеше могут устареть, так как при изменении данных в базе данных обновления кеша не обновляются. Эта проблема решается с помощью стратегий сквозной записи и добавления TTL, которые мы увидим в следующих главах.