Стратегии кэширования

Стратегии кэширования

saga_it

Кэширование - техника, нацеленная на оптимизацию производительности веб-приложений. 

Кэширование включает в себя хранение часто запрашиваемых, используемых данных или файлов во временном хранилище, называемом кэш.

Преимущества кэширования

Одно из преимуществ кэширования - это увеличение производительности веб-приложения за счет сокращения времени обработки запроса к часто используемым данным. Веб-приложения быстрее обрабатывают отдают данные пользователям из кэша, улучшая пользовательский опыт. Помимо этого, кэширование уменьшает загрузку веб-серверов и БД, а это в свою очередь позволяет сократить расходы на обслуживание и повысить масштабируемость системы в целом. 

Что хранится в кэше?

В кэше обычно хранят часто запрашиваемые данные, к примеру статический контент (изображения), стили, скрипты, частые запросы к БД, ответы от API или веб-страницы.

Однако если в вашем решении требуется кэширование необходимо продумать следующие аспекты:

  • какие данные будут хранится в кэше;
  • как поддерживать актуальность данных в кэше;
  • как часто обновлять кэш.  

Эти и другие вопросы, касающиеся кэширования, обычно решаются в наборе принципов и практик, которые называют стратегиями или паттернами кэширования.

В этой статье обзорно освещаются несколько популярных стратегий кэширования, которые применимы в веб-приложениях.

В общем стратегии кэширования можно разделить на 2 группы:

1) стратегии кэширования при чтении данных

2) стратегии кэширования при записи данных 

blog.bytebytego.com


Стратегии кэширования при чтении данных

1) Cache-Aside

В данной стратегии кэширования за управление данными в кэше ответственно само веб-приложение. При входящем запросе данных веб-приложение в первую очередь проверяет наличие данных в кэше. Если запрашиваемые данные в кэше отсутствуют, то приложение делает запрос в базу данных и сохраняет ответ в кэше для обслуживания аналогичных запросов в будущем. 

Плюсы:

  • Поддержка большого объема запросов на чтение, благодаря тому, что нагрузка на основную базу данных снижена за счет первоначального обращения в кэш
  • Кэш является отдельным компонентом в архитектуре, и в случае отсутствия доступа к кэшу, приложение не блокируется и продолжает обслуживать запросы, обращаясь в основную базу данных

Минусы:

  • Продуманная настройка актуализации данных в кэше на стороне веб-приложения: использование TTL или дополнительной логики в коде приложения
  • Любой первоначальный запрос новых данных, отсутствующих в кэше, будет к основной базе данных, что при большой нагрузке может снизить общую производительность решения.

2) Read-Through

При этой стратегии первоначальный запрос данных осуществляется в кэш. В случае отсутствия данных в кэше приложение выполняет запрос в основную базу данных.  

Плюсы:

  • Поддержка большого объема запросов на чтение
  • Поддержка общей производительности веб-приложения при наличии медленной базы данных

Минусы:

  • Отсутствие доступа к кэшу в случае его падения может стать блокирующим для всего веб-приложения
  • Модель данных кэша и основной базы данных должны быть максимально схожими
  • Кэш в данной стратегии - это дополнительный уровень задержки при записи данных

Стратегии кэширования при записи данных

3) Write-Around

Эта стратегия комбинирует в себе чтение данных из кэша как в Read-Through, однако запись данных осуществляется напрямую в базу данных.

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

4) Write-Through 

Данная стратегия обычно используется в комбинации с Read-Through. Запись новых данных осуществляется сначала в кэш, затем кэш инициирует запись данных в базу данных. При этом подходе гарантируется актуальность данных в кэше, но замедляется запись данных, так как кэш выступает промежуточным уровнем задержки. 

5) Write-Behind (Write-back)

Запись данных осуществляется в кэш, который через определенный период времени записывает накопившийся объем данных в базу данных.

Плюсы:

  • Поддержка большого объема запросов на запись данных
  • Недоступность базы данных не приведет к потере новых данных, так как они хранятся в кэше

Минусы:

Кэш - потенциальная точка отказа при его недоступности. Это может привести к потере данных и неконсистентности основной базы данных

Что почитать и посмотреть про кэширование:

Report Page