Кэширование от входа до отказа

внешний интерфейс сервер CDN DNS

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

Определение кеша

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

что такое веб-кеш

Суть запроса в том, чтобы отправить запрос от клиента и получить ресурсы сервера (изображения, файлы, данные).

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

Типы веб-кэшей

Сильный кеш

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

Expires

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

В первый раз, когда Expires запрашивает сервер, заголовок ответа вернет время истечения срока действия файла Expires. Как показано ниже:

При втором запросе Expires клиент сравнивает локальное время со временем истечения срока действия файла.Если срок действия файла не истек, используется напрямую локальный кеш и код состояния 200 (из кеша памяти) или 200 (из кеша диска). кэш) возвращается. Как показано ниже:

Expires Cache-Control

  • Cache-Control: no-cache должен сначала подтвердить с прокси-сервером необходимость изменения, а затем решить, следует ли использовать кеш или запрос, аналогично согласованию кеша (304).
  • Cache-Control: no-store действительно не кэширует данные локально
  • Cache-Control: общедоступный может быть кэширован всеми пользователями (совместно используемыми несколькими пользователями), включая промежуточные прокси-серверы, такие как терминалы и CDN.
  • Cache-Control: частный кэш может быть кэширован только браузером терминала (и это частный кэш), а серверу кэширования ретрансляции не разрешено кэшировать
  • Cache-Control: must-revalidate Если кэшированное содержимое недействительно, запрос должен быть отправлен на сервер для проверки.
  • Cache-Control: содержимое кеша max-age=s истечет через s секунд, доступен только HTTP1.1

Когда max-gae запрашивает сервер в первый раз, заголовок ответа вернет max-age, то есть время, после которого истечет срок действия файла. Как показано ниже:

При втором запросе max-gae клиент проверит, не истек ли срок действия файла.Если срок действия файла не истек, будет использоваться напрямую локальный кеш, а код состояния 200 (из кеша памяти) или 200 (из кеша диска) ) будет возвращен. Как показано ниже:

Согласовать кеш

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

Last-Modified/If-Modified-Since

Судя по времени последней модификации файла, следует ли читать кеш или нет, сервер устанавливает заголовок ответа Last-Modified, а клиент передает значение Last-modified в последнем заголовке ответа сервера на сервер через if- modified-since.Клиент сравнивает время модификации текущего файла со временем последней модификации (значение, переданное клиенту в прошлый раз), и если они равны, то это означает, что время модификации файла не изменилось, т.е. то есть не изменился.

При выполнении запроса Last-Modified заголовок ответа, возвращаемый сервером, содержит идентификатор кеша Last-Modified.

Во втором запросе Last-Modified заголовок запроса содержит If-Modified-Since, после того как сервер получит идентификатор кеша, он использует этот идентификатор для сравнения с файлом. Если срок действия кэшированного файла не истек, возвращается код состояния 304, и клиент использует проблему с кэшем. По истечении срока действия кеша возвращается новый файл с кодом состояния 200.

Etag / If-None-Match

Содержимое файла используется для определения необходимости чтения кэша.Сервер считывает содержимое файла, шифрует его с помощью base64 через md5 для получения хеш-значения и устанавливает это значение в качестве Etag заголовка ответа.Следующий запрос клиента пройдет if-none -match, и сервер сравнивает, совпадает ли значение хеш-функции, полученное при шифровании текущего содержимого файла, с прошлым разом, если оно такое же, это означает, что содержимое файла не изменилось. Метод является наиболее точным, но и наиболее требовательным к производительности.

При выполнении запроса Etag заголовок ответа, возвращаемый сервером, содержит идентификатор кеша Etag.

Во втором запросе Etag заголовок запроса содержит If-None-Match, после того как сервер получит идентификатор кеша, он использует этот идентификатор для сравнения с файлом. Если срок действия кэшированного файла не истек, возвращается код состояния 304, и клиент использует проблему с кэшем. По истечении срока действия кеша возвращается новый файл с кодом состояния 200.

Кэш прокси-сервера CDN

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

  1. Когда пользователь щелкает URL-адрес контента на странице веб-сайта, локальная система DNS разрешается, и система DNS, наконец, передает право на разрешение доменного имени выделенному DNS-серверу CDN, на который указывает CNAME.
  2. DNS-сервер CDN возвращает пользователю IP-адрес глобального устройства балансировки нагрузки CDN. Пользователь инициирует запрос доступа по URL-адресу контента к глобальному устройству балансировки нагрузки CDN. Глобальное устройство балансировки нагрузки CDN выбирает региональное устройство балансировки нагрузки (пограничный узел) в регионе, к которому принадлежит пользователь, на основе IP-адреса пользователя и URL-адреса контента, запрошенного пользователем, и сообщает пользователю инициировать запрос на это устройство. Балансировочное устройство возвращает пользователю IP-адрес сервера.
  3. Пользователь инициирует запрос к кэш-серверу, и кэш-сервер отвечает на запрос пользователя и передает контент, требуемый пользователем, на пользовательский терминал. Если на кэш-сервере нет контента, который хочет пользователь, а региональное балансировочное устройство по-прежнему назначает его пользователю, то сервер будет запрашивать контент из своей службы кэширования верхнего уровня (многоуровневого кэша) до тех пор, пока Исходный сервер прослеживается до веб-сайта, извлекает содержимое локально (обратно к источнику).

кеш сервера

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

черная технология

  1. Сервисные работники по сути действуют как прокси-сервер между веб-приложением и браузером, а также могут действовать как прокси-сервер между браузером и сетью, когда сеть доступна. Они предназначены (среди прочего) для обеспечения эффективного автономного взаимодействия, перехвата сетевых запросов и выполнения соответствующих действий в зависимости от того, доступна ли сеть и находится ли обновленный ресурс на сервере. На текущем этапе основные возможности ServiceWorker сосредоточены на сетевом проксировании и автономном кэшировании. С точки зрения конкретной реализации можно понять, что ServiceWorker — это WebWorker, который все еще может работать, когда веб-страница закрыта.

Преимущества и проблемы кэша

Зачем использовать кеш?

  • Улучшите скорость отклика и уменьшите задержку ответа
  • Снизить потребление ресурсов (сервер, пропускная способность)

Возможные проблемы с использованием кеша?

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

Используйте кеш с умом

  1. Разделение изменяющихся частей, часто меняющаяся бизнес-логика и извлечение базовой библиотеки инструментов.
  2. Для базовой библиотеки инструментов можно установить длинный кеш Cache-Control: max-age=31536000
  3. Для часто меняющейся логики вы можете использовать короткое время кеша + обязательную повторную проверку или использовать согласованный кеш.
  4. Управление кэшированием с помощью файловых штампов

Справочная статья:

Три метода кэширования, больше никаких проблем с эксплуатацией и обслуживанием, брат! ! !
Тщательно понимать механизм и принцип кэширования HTTP
Проектирование неуязвимого решения для кэширования браузера: идеи, детали, ServiceWorker и HTTP/2
Заметки об исследовании CDN 1 (Что такое CDN?)