DevGang
Авторизоваться

Основы кеширования веб-приложений 

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

Помимо стоимости, выполнение сложных расчетов и операций чтения / записи может занять время. Это означает, что ваш пользователь должен дождаться завершения операции, что может негативно сказаться на пользовательском опыте, если ожидание станет слишком длинным.

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

Что такое кеширование в веб-приложениях?

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

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

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

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

Кеширование дает несколько преимуществ с точки зрения потребителя и поставщика.

Снижение затрат на пропускную способность

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

Улучшенная отзывчивость

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

Повышенная производительность на том же оборудовании

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

Доступность контента даже при сбоях сети

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

Недостатки кеширования

Подобно преимуществам, у кеширования также есть несколько недостатков.

Кеш удаляется при перезагрузке сервера

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

Обслуживание устаревших данных

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

Где можно кэшировать?

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

Кэш браузера

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

Cache-Control: no-store

Прокси-серверы для промежуточного кеширования

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

Обратный кеш

Вы можете реализовать собственную инфраструктуру кеширования в своих серверных службах. При таком подходе контент может обслуживаться с точки внешнего контакта, без перехода к вашим внутренним серверам. Для этого вы можете использовать такие сервисы, как Redis, Memcache.

Подробнее о заголовке Cache-Control здесь.

Что можно кэшировать?

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

Совместимость с кешем

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

  1. Медиа-контент
  2. Библиотеки JavaScript
  3. Таблицы стилей
  4. Изображения, логотипы, иконки

Умеренно дружественный к кешу

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

  1. Часто изменяемые JS и CSS
  2. HTML страницы
  3. Запрос контента с аутентификационными cookie-файлами

Никогда не кешировать

Содержимое нижеуказанного типа никогда не следует кэшировать, поскольку это может привести к проблемам с безопасностью.

  1. Очень конфиденциальный контент, такой как банковская информация и т.д.
  2. Специфичные для пользователя данные чаще всего не следует кэшировать, поскольку они регулярно обновляются.

Зачем вам нужна стратегия кеширования?

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

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

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

Источник:

Комментарии 1
Anri 18.09.2022 в 17:28

лайк, хорошая информация

Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу