Что такое кеш?
Определение кеша
Кэш — это буфер для обмена данными (называемый Кэш), концепция изначально пришла из памяти и ЦП. Когда некое оборудование хочет прочитать данные, оно сначала будет искать нужные данные из кеша, если они будут найдены, то будут выполняться напрямую, а если не могут быть найдены, то будут найдены в памяти. Поскольку кеш работает намного быстрее, чем память, цель кеша — помочь оборудованию работать быстрее.
что такое веб-кеш
Суть запроса в том, чтобы отправить запрос от клиента и получить ресурсы сервера (изображения, файлы, данные).
Веб-кэширование предназначено для сохранения содержимого ответа в соответствии с запросом. Когда инициируется следующий запрос для того же ресурса, последнее сохраненное содержимое напрямую используется для ответа на запрос.
Типы веб-кэшей
Сильный кеш
Когда браузер запрашивает данные в первый раз, сервер вернет клиенту время истечения срока действия файла и файла, и клиент создаст резервную копию этих двух данных в базе данных кеша. При повторном запросе данных клиент будет судить, истек ли срок действия файла, в соответствии со временем истечения срока действия файла. Если срок действия файла не истек, то файл в базе данных кеша будет использоваться напрямую. Если срок действия файла истек, он будет снова получен с сервера.
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 (из кеша диска) ) будет возвращен. Как показано ниже:
Согласовать кеш
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)
- Когда пользователь щелкает URL-адрес контента на странице веб-сайта, локальная система DNS разрешается, и система DNS, наконец, передает право на разрешение доменного имени выделенному DNS-серверу CDN, на который указывает CNAME.
- DNS-сервер CDN возвращает пользователю IP-адрес глобального устройства балансировки нагрузки CDN. Пользователь инициирует запрос доступа по URL-адресу контента к глобальному устройству балансировки нагрузки CDN. Глобальное устройство балансировки нагрузки CDN выбирает региональное устройство балансировки нагрузки (пограничный узел) в регионе, к которому принадлежит пользователь, на основе IP-адреса пользователя и URL-адреса контента, запрошенного пользователем, и сообщает пользователю инициировать запрос на это устройство. Балансировочное устройство возвращает пользователю IP-адрес сервера.
- Пользователь инициирует запрос к кэш-серверу, и кэш-сервер отвечает на запрос пользователя и передает контент, требуемый пользователем, на пользовательский терминал. Если на кэш-сервере нет контента, который хочет пользователь, а региональное балансировочное устройство по-прежнему назначает его пользователю, то сервер будет запрашивать контент из своей службы кэширования верхнего уровня (многоуровневого кэша) до тех пор, пока Исходный сервер прослеживается до веб-сайта, извлекает содержимое локально (обратно к источнику).
кеш сервера
- Кэширование страниц, эта технология кэширования обычно используется для страниц, которые не часто меняют информацию и к которым чаще обращаются, чтобы их не нужно было динамически загружать каждый раз.
- Кэширование шаблонов.Некоторые языковые программы динамически компилируют программы во время работы.Чтобы избежать компиляции для каждого запроса, скомпилированный файл шаблона кэшируется.
- Кэш данных, когда данные страницы поступают из БД, каждая операция БД требует времени и ресурсов. Поместите часто используемые данные в память, чтобы избежать частых операций с базой данных.
черная технология
- Сервисные работники по сути действуют как прокси-сервер между веб-приложением и браузером, а также могут действовать как прокси-сервер между браузером и сетью, когда сеть доступна. Они предназначены (среди прочего) для обеспечения эффективного автономного взаимодействия, перехвата сетевых запросов и выполнения соответствующих действий в зависимости от того, доступна ли сеть и находится ли обновленный ресурс на сервере. На текущем этапе основные возможности ServiceWorker сосредоточены на сетевом проксировании и автономном кэшировании. С точки зрения конкретной реализации можно понять, что ServiceWorker — это WebWorker, который все еще может работать, когда веб-страница закрыта.
Преимущества и проблемы кэша
Зачем использовать кеш?
- Улучшите скорость отклика и уменьшите задержку ответа
- Снизить потребление ресурсов (сервер, пропускная способность)
Возможные проблемы с использованием кеша?
- Лавина кеша означает, что при неразумном использовании кеша, кеш выходит из строя в определенное время, большое количество запросов будет напрямую доходить до сервера, а сервер не может нести большое количество запросов, что приведет к падению сервера.
- Обновление кеша происходит несвоевременно, а это означает, что при нерациональном использовании кеша файл сервера обновляется, и пользователь получает старый неправильный файл кеша.
Используйте кеш с умом
- Разделение изменяющихся частей, часто меняющаяся бизнес-логика и извлечение базовой библиотеки инструментов.
- Для базовой библиотеки инструментов можно установить длинный кеш Cache-Control: max-age=31536000
- Для часто меняющейся логики вы можете использовать короткое время кеша + обязательную повторную проверку или использовать согласованный кеш.
- Управление кэшированием с помощью файловых штампов
Справочная статья:
Три метода кэширования, больше никаких проблем с эксплуатацией и обслуживанием, брат! ! !
Тщательно понимать механизм и принцип кэширования HTTP
Проектирование неуязвимого решения для кэширования браузера: идеи, детали, ServiceWorker и HTTP/2
Заметки об исследовании CDN 1 (Что такое CDN?)