Кэш: что такое кэш и как работает промежуточное хранилище?

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

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

Что такое кэш?

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

Определение

Кэш: Кэш (произносится как «кэш») — это промежуточное хранилище, которое сохраняет данные для повторного доступа. Это сокращает время, необходимое для повторного доступа к данным. Кэш представляет собой прозрачный слой между пользователем и фактическим источником данных. Процесс сохранения данных в кэше называется «кэшированием».

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

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

Отдельные принадлежности не являются абсолютно не связанными по своему назначению: Например, если врач просит дезинфицирующее средство, ему, скорее всего, понадобится и тампон; игла также бесполезна без швов. Ассистент будет держать соответствующие ресурсы под рукой, чтобы свести к минимуму время, необходимое для их получения.

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

Какова цель кэширования?

Основная цель кэша — сократить время доступа к важным данным. «Важные» данные означают:

  1. Данные, которые часто требуются: В этом случае было бы неэффективно постоянно обращаться к данным из более медленного хранилища, лежащего в основе кэша. Вместо этого данные предоставляются из кэша с более быстрым временем доступа.
  2. Данные, для создания которых требуется длительный процесс: Некоторые данные являются результатом интенсивной вычислительной обработки, или данные должны быть собраны из различных частей. В этом случае имеет смысл хранить готовые данные в кэше для последующего повторного использования.
  3. Части данных, которые нужны вместе: Было бы неэффективно загружать связанные части данных только после того, как вы их запросили. Вместо этого гораздо эффективнее хранить все доступные данные вместе в кэше.

Как работает кэш

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

Основной процесс работы кэша

  1. Запрос на ресурс отправляется в систему или программное обеспечение, имеющее кэш.
  2. Если ресурс уже содержится в кэше, он предоставляется из кэша. Это называется «попаданием в кэш».
  3. Если ресурс не найден в кэше, он сначала загружается из базовой системы в промежуточное хранилище, а затем предоставляется. Это называется «пропуском кэша».
  4. Если в будущем тот же ресурс будет запрошен снова, он также может быть предоставлен из кэша, что называется «попаданием в кэш».

Диаграмма иллюстрирует основной процесс: Клиент посылает запрос на ресурс на сервер (1). В случае «попадания в кэш» ресурс уже содержится в кэше и сразу же предоставляется клиенту. В случае «промаха кэша» запрашиваемый ресурс не содержится в кэше и, следовательно, извлекается из системы, лежащей в основе сервера (в данном примере — базы данных) (2). Как только ресурс становится доступным (3), он предоставляется клиенту (4) и сохраняется в кэше для повторного использования.

Где находится кэш?

Основная характеристика кэша заключается в том, что он «скрыт в фоновом режиме». Об этом говорит даже происхождение слова: слово «кэш» происходит из французского языка и означает «тайник».

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

Чтобы удалить кэш в Firefox, следуйте приведенному ниже руководству:

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

Сколько кэшей обычно существует?

Как правило, в цифровой системе действует несколько кэшей.

Возьмем, к примеру, доступ к веб-сайту: Ваш браузер связывается с сервером и получает ряд ресурсов. Прежде чем содержимое сайта будет отображено в браузере, часть этого процесса, вероятно, обрабатывается следующими кэшами: кэш процессора, системный кэш и кэш браузера на вашем устройстве, а также CDN (Content Delivery Network) и веб-кэш на стороне сервера.

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

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

Преимущество: Огромное увеличение скорости

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

Преимущество: Снижение нагрузки на систему, стоящую за кэшем

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

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

Недостаток: аннулирование кэша затруднено

Цитата

«В информатике есть только две трудные вещи: аннулирование кэша и именование вещей».

Фил Карлтон, источник: www.martinfowler.com/bliki/TwoHardThings.html

Термин «аннулирование кэша» относится к решению о том, когда сохраненные данные перестают быть актуальными и должны быть обновлены. Вспомните аналоговый пример, который мы приводили ранее: Ассистент действует как кэш для врача, сохраняя уже использованные ресурсы для повторного использования. Однако, поскольку на подносе для посуды имеется лишь ограниченное пространство, ассистент постоянно наводит порядок во время операции. Уже использованную посуду приходится убирать, а новую добавлять. В некоторых случаях ассистент убирает посуду, которая может снова понадобиться врачу. Если вернуться к цифровому миру, то это приводит к пропуску кэша. В этом случае ассистенту придется потратить время на повторный поиск необходимого предмета.

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

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

Какие типы кэшей существуют?

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

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

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

Ресурс Кэш Размер кэша Время доступа с кэшем Насколько медленнее без кэша
Основное хранилище Кэш-память первого уровня (аппаратная) Десятки килобайт (KB) Менее одной наносекунды (нс) 200 ×
Жесткий диск Кэш-память жесткого диска (аппаратное обеспечение) Десятки мегабайт (МБ) Сотни наносекунд (нс) 100 ×
Браузер Кэш браузера (программное обеспечение) Несколько гигабайт (ГБ) Десятки миллисекунд (мс) 10-100 ×
Сайты CDN, кэш страниц Google, Wayback Machine (программное обеспечение) Тысячи терабайт (петабайт, PB) Несколько секунд (с) 2-5 ×

Аппаратные кэши

Кэш процессора

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

Попадание в самый быстрый кэш процессора — известный как «кэш первого уровня» или «кэш L1» — примерно в 200 раз быстрее, чем доступ к основному хранилищу.

Чтобы удалить кэш в Chrome, следуйте приведенному ниже руководству:

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

Кэш жесткого диска

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

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

Кэш жесткого диска позволяет загружать важные данные примерно в 100 раз быстрее. Для пользователя эти данные как бы предоставляются «мгновенно».

Кэши программного обеспечения

Кэш браузера

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

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

Кэш страниц Google

Функция «в кэше» Google сохраняет страницы многих веб-сайтов готовыми к доступу. Доступ к страницам возможен даже тогда, когда исходный веб-сайт находится в автономном режиме. Состояние страниц соответствует самой последней дате индексации Googlebot.

Кэш DNS

Система доменных имен, или сокращенно DNS, — это глобально распределенная система преобразования интернет-доменов в IP-адреса (и наоборот). DNS предоставляет IP-адрес для доменного имени. Например, для домена ionos.com выдается IP-адрес 74.208.255.134.

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

Однако использование кэша DNS может привести и к проблемам — например, если IP-адрес, связанный с доменом, изменился из-за переноса сервера, но в локальном кэше DNS хранится старый адрес. В этом случае попытка соединения с сервером будет безуспешной. Решением в данном случае является очистка кэша DNS.

Сеть доставки контента (CDN)

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

Веб-кэш

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

Когда данные запрашиваются снова, для ответа требуется только очень быстрый доступ к памяти. Таким образом, время отклика значительно сокращается, а нагрузка на системы, стоящие за кэшем, такие как веб-сервер и база данных, также снижается. Другие известные веб-кэши включают OPcache и альтернативный PHP Cache (APC).

Оцените статью
cdelat.ru
Добавить комментарий