какое время кэширования ставится на сайт

Как кэширование ускорит ваш сайт

какое время кэширования ставится на сайт

Похоже, что слово «кэширование» существует еще с самого начала эпохи компьютеров. Но что же это такое и как оно используется в работе сайтов?

Определения и быстродействие

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

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

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

Мощность для производительности

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

Самый медленный вариант — обыкновенный жесткий диск, который обрабатывает 200 мегабайт в секунду (Мб/с) и осуществляет 100 операций ввода-вывода в секунду (IOPS). Твердотельный накопитель (SSD) передает 600 Мб/с и осуществляет 300000 IOPS — намного лучше, чем обыкновенный жесткий диск. Но SSD проигрывают по сравнению со скоростью RAM: целых 20 Гб/с и четыре миллиона IOPS.

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

Кэширование и выбор хостинга

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

Виртуальный хостинг

Это самый популярный (и самый экономный) вид веб-хостинга. При таком варианте большое количество сайтов размещаются на одном сервере, подключенному к сети. Часто встречается подвид виртуального хостинга — распределенный хостинг, который разделяет потребности сайтов по всем серверам в кластере, аналогично электросети (например, Grid от Media Temple).

На виртуальном хостинге скорость зависит от выделяемого объема RAM и вида носителя. Потрясающих показателей или полного доступа к системе у вас не будет, но в самом худшем случае вы можете рассчитывать на 200 Мб RAM и хранение на SSD.

Выделенный сервер и виртуальное честное облако

Хотя выделенный и виртуальный частный сервер (VPS) называются по-разному, в отношении кэширования они похожи, поскольку при обоих вариантах предлагается приоритетный доступ к выделенным ресурсам.

Выделенный хостинг предоставляет целый сервер с полноценным доступом к нему средствами Linux или Windows. Как и раньше, ваш выбор следует делать в пользу большего объема RAM (или по крайней мере, в соответствии с вашими потребностями) и хранилища данных на базе SSD накопителей. SSD обеспечит быстрый доступ к хранимым базам данных или страницам сайтов, основываясь на различных настройках кэширования для использования оперативной памяти и доставки веб-страниц. Одним из ключевых моментов является то, что на выделенном сервере можно разместить собственный виртуальные машины (VM) — аналоги компьютера, которые будут работать в рамках ограничений вашего веб-хостинга.

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

Сила CDN

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

какое время кэширования ставится на сайт

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

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

Наглядный пример: Enterprise WordPress от Media Temple

В этом году мы запустили Enterprise WordPress, новый сервис корпоративного уровня для WordPress. В нем сочетается управление хостингом WordPress, Amazon Web Services (AWS), круглосуточная техническая поддержка и управление выделенной учетной записью. В Enterprise WordPress используется множество разнообразных способов кэширования, что гарантирует пользователям наивысшую скорость облачного хостинга. В целом мы следуем общей схеме:

какое время кэширования ставится на сайт

Практически каждый упомянутый нами тип кэширования используется для оптимизации сайтов на Enterprise WordPress. Во-первых, MySQL сервер, настроен на улучшение кэширования баз данных. Кэширование объектов осуществляется на отдельных серверах, полностью в оперативной памяти. Во-вторых, кэширование PHP-скриптов производится в общей памяти через OpCache, а это означает, что нет необходимости в перезагрузке скрипта для каждого запроса. Кроме того, кэширование страницы осуществляется на прокси-сервере и на отдельных серверах полностью в RAM, чтобы по запросу можно было доставлять целые HTML-файлы. Наконец, чтобы гарантировать, что пользователи сайта получают данные с ближайшего сервера, для доставки и хранения всего статического контента используется CDN.

Основные плагины для кэширования

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

Источник

Основы кэширования. Как? Когда? Зачем?

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

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

Нужно ли нам использовать кэширование?

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

С чего начать?

И так, мы поняли, что кэширование вам необходимо как воздух. Но как определить места которые в нем нуждаются, и которым он точно не нужен? Давайте рассмотрим, как пример, обычный новостной сайт. В большинстве случаев узким местом становится база данных, значит нам нужно кэшировать выборки. Какие у нас самые посещаемые страницы?
— Главная, её составными являются много блоков (последние новости, популярные за последнюю неделю, самые комментируемые новости, последние комментарии к новостям и тд.).
— Просмотр самой новости, а там и комментариями к ней.
— Для авторизированого пользователя доступна система личных сообщений, в этом случае на каждой странице мы вынуждены делать запрос в базу данных проверяя появились ли новые сообщения, если да — сообщить пользователю.

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

Приступаем к теории

Есть несколько тактик кэширования:
— Устаревание (на определенное время).
— Инвалидация (навсегда и при надобности сами его убиваем).
— Комбинирование (на определенное время, но так же при надобности сами его убиваем).

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

Главная страница
В связи с тем, что на этой странице у нас много блоков, получаем много запросов к базе данных. Можно было бы кэшировать контент главной страницы целиком, и обновлять её раз в 10 минут, но так как у нас блоки имеют разную частоту обновления придется кэшировать по отдельности. Рассмотрим каждый блок.
— Последние новости. Кэшируем его навсегда, убиваем при добавлении новости на сайт.
— Популярные новости за последнюю неделю. Кэшируем на сутки.
— Самые комментируемые новости. Кэшируем на час.
— Последние комментарии к новостям. Кэшируем навсегда, убиваем при добавлении нового комментария. Если новые комментарии появляются очень быстро, кэшируем блок на одну минуту.

Просмотр новости
Здесь этап кэширования делится на две части — самой новости и комментариев к ней.

а) Новость. Представим, что новость оформляется bb-кодами, а процесс преобразования в html трудоемок и иногда даже длителен (регулярные выражения ещё как едят процессорное время), значит мы должны один раз преобразовать и закэшировать готовый html. Новость мы кэшируем навсегда, а кэш убиваем при изменении / удалении новости. Но как же быть если у нас есть счетчик просмотров вы спросите? Все очень просто, можно было бы обновлять постоянно кеш самой новости, но этот трюк рискован так как есть вероятность нарушения целостности данных. Для этого мы создадим кеш количества просмотров. При просмотре новости у нас будет ити запрос в базу обновляя количество просмотров, а так же инкремент кэша просмотров. Здесь мы так же кэшируем навсегда, удаляем при удалении новости.

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

Проверка наличия новых сообщений
Тут надо хорошо подумать перед тем как выбрать тактику кэширования, так как выбирается под тип нагрузки. Рассмотрим несколько вариантов:
а) Мало пользователей, постоянные. Кэшируем навсегда.
б) Много пользователей, постоянные. Тут зависит от того, что нам дороже, память (для кеша) или уменьшение нагрузки от базы данных. Если памяти много и нам её не жалко кэшируем навсегда, иначе на время сессии.
в) Любое количество пользователей, уникальные. Кэшируем на время сессии.

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

На этом теория заканчивается, а практика за вами.

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

Источник

11 видов кэширования для современного сайта

какое время кэширования ставится на сайт

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

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

Основной проблематикой кэширования является быстрота реакции на запросы к основным системам хранения и обработки входящей и исходящей структурированной информации.

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

Виды кэширования

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

Необходимо понимать, что работу с данными можно производить как на стороне клиента, так и на сервере. Притом, серверная обработка данных централизована и имеет ряд несомненных преимуществ (особенно для службы поддержки).

какое время кэширования ставится на сайт

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

1. Браузерное кэширование или клиентское кэширование

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

1.1 Кэширование файлов и картинок

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

какое время кэширования ставится на сайт

Это первый уровень кэширования, который состоит в отдаче заголовка «expired» и заголовка «304 Not Modified». Наиболее эффективным считается кэширование на 2 недели.

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

1.2 Кэширование https

Специальные заголовки вида strict-security. Позволяет браузеру всегда обращаться по https к выбранному домену. Сохраняет это состояние довольно жёстко и, в случае отмены этого вида кэша, браузер ещё довольно долго будет пытаться загрузить страницу по https, при этом игнорируя текущие заголовки.

1.3 Кэширование центра сертификации

Так называемый, stamp центра сертификации.

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

1.4 Кэширование страниц

Когда страница уже сгенерирована, нужно постоянно отслеживать ее актуальность. Для этого вы должны использовать серверный кэш с отслеживанием времени изменения отдельных частей страницы (если страница строится из множества динамически генерируемых блоков). При таком подходе в каждом ответе от сервера установлены специальные заголовки, обозначающие время изменения страницы, которые затем отправляются браузером пользователя при повторном обращении к странице сайта. Сервер при получении таких заголовков можем проанализировать текущее состояние страницы (возможно, даже отрисовать её), но вместо содержимого страницы отдать заголовок «304 Not Modified», что для пользовательского браузера будет означать, что можно показать страницу из своего (браузера пользователя) кэша.

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

Как правило, кэш подразделяется по типу пользователей:

— для авторизованных;
— для неавторизованных.

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

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

2. Серверное кэширование

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

какое время кэширования ставится на сайт

2.1 Кэширование страницы целиком

Наиболее эффективный кэш. Чем он интересен? Самое большое его достоинство в том, что отдача страницы происходит практически в момент обращения, как следствие – это возможность обработки миллионов запросов даже на самом слабом сервере со скоростью работы памяти и с незначительным задействованием процессора.

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

Используйте этот кэш, если серверу известны все статичные состояния внешних данных, такие как: uri, get (без дополнительных параметров), пользователь не авторизован — то есть, фактически, это идеальное состояние страницы для гостевых пользователей. Учитывайте тот факт, что при таком кэшировании архитектура сайта или приложения всегда должна однотипно обрабатывать входящие запросы и отдавать однотипные ответы. Такое состояние есть в любом приложении или сайте, его нужно лишь отследить и применить к нему кэш.

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

2.2 Кэширование результатов компиляции php-файлов

Различают как чистую компиляцию кода, так и его оптимизацию во время компилирования (подмена скриптов). Наиболее яркие примеры:

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

какое время кэширования ставится на сайт

2.3 Кэширование отдельных блоков страницы

Это, пожалуй, самый интересный, но и сложный вид кэширования. Тем не менее, он тоже может быть эффективным, и на его примере легче всего объяснить принципы кэширования в целом.
Необходимо отслеживать: состояние таблиц, состояние сессии пользователя, выключать ли кэширование при POST или GET запросах (http query), зависимость от текущего адреса, постоянство кэширования (при изменении предыдущих условий) или его динамическую подстройку.

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

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

какое время кэширования ставится на сайт

2.4 Кэширование php на основе неразделяемых ресурсов

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

2.5 Кэширование php на основе общих ресурсов

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

2.6 Кэширование mysql на основе query cache

Это довольно известная и наиболее освещённая тема. Тем не менее, хотелось бы рассмотреть специфику работы с timestamp и то, как можно избежать постоянного сброса query cache.

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

Источник

Кэширование и производительность веб-приложений

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

какое время кэширования ставится на сайт

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

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

Процессорный кэш

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

В процессорах имеется особая память, представленная регистрами процессора, которая обычно представляет собой небольшое хранилище информации, обеспечивающее крайне высокую скорость обмена данными. Регистры — это самая быстрая память, с которой может работать процессор, которая расположена максимально близко к остальным его механизмам и имеет небольшой объём. Иногда регистры называют кэшем нулевого уровня (L0 Cache, L — это сокращение от Layer).

У процессоров, кроме того, имеется доступ к ещё нескольким уровням кэш-памяти. Это — до четырёх уровней кэша, которые, соответственно, называются кэшами первого, второго, третьего, и четвёртого уровня (L0 — L4 Cache). То, к какому именно уровню относятся регистры процессора, в частности, будет ли это кэш нулевого или первого уровня, определяется архитектурой процессора и материнской платы. Кроме того, от архитектуры системы зависит то, где именно — на процессоре, или на материнской плате, физически расположена кэш-память разных уровней.

какое время кэширования ставится на сайт

Структура памяти в некоторых новейших CPU

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

Жёсткие диски (HDD, Hard Disk Drive), применяемые для постоянного хранения данных — это, в сравнении с оперативной памятью, предназначенной для кратковременного хранения информации, устройства довольно медленные. Однако надо отметить, что скорость постоянных хранилищ информации увеличивается благодаря распространению твердотельных накопителей (SSD, Solid State Drive).

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

какое время кэширования ставится на сайт

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

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

О быстродействии жёстких дисков и оперативной памяти

Разница между временным хранением данных в оперативной памяти и постоянным хранением на жёстком диске проявляется в скорости работы с информацией, в стоимости носителей и в близости их к процессору.

Время отклика оперативной памяти составляет десятки наносекунд, в то время как жёсткому диску нужны десятки миллисекунд. Разница в быстродействии дисков и памяти составляет шесть порядков!

какое время кэширования ставится на сайт

Одна миллисекунда равна миллиону наносекунд

Простой веб-сервер

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

какое время кэширования ставится на сайт

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

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

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

Кэширование баз данных

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

какое время кэширования ставится на сайт

Простой веб-сервер с базой данных

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

Кэширование ответов веб-сервера

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

какое время кэширования ставится на сайт

Кэш ответов и кэш приложения

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

Мемоизация функций

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

какое время кэширования ставится на сайт

Мемоизация функции с помощью таблицы поиска

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

Кэширование в браузере

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

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

Перед нами весьма полезная технология, которая даёт следующие преимущества всем участникам обмена данными:

какое время кэширования ставится на сайт

Кэширование в браузере

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

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

▍Шлюзы

Шлюз (gateway) — это прокси-сервер, который перенаправляет входящие запросы или исходящие ответы, не модифицируя их. Такие прокси-серверы ещё называют туннелирующими прокси (tunneling proxy), веб-прокси (web proxy), прокси (proxy), или прокси уровня приложения (application level proxy). Эти прокси-серверы обычно совместно используются, например, всеми клиентами, находящимися за одним и тем же файрволом, что делает их хорошо подходящими для кэширования запросов.

▍Прямые прокси-серверы

Прямой прокси-сервер (forward proxy, часто такие серверы называют просто proxy server) обычно устанавливается на стороне клиента. Веб-браузер, который настроен на использование прямого прокси-сервера, будет отправлять исходящие запросы этому серверу. Затем эти запросы будут перенаправлены на целевой сервер, расположенный в интернете. Одно из преимуществ прямых прокси заключаются в том, что они защищают данные клиента (однако, если говорить об обеспечении анонимности в интернете, безопаснее будет пользоваться VPN).

▍Веб-ускорители

Веб-ускоритель (web accelerator) — это прокси-сервер, который уменьшает время доступа к сайту. Он делает это, заранее запрашивая у сервера документы, которые, вероятнее всего, понадобятся клиентам в ближайшем будущем. Подобные серверы, кроме того, могут сжимать документы, ускорять выполнение операций шифрования, уменьшать качество и размер изображений, и так далее.

▍Обратные прокси-серверы

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

▍Пограничное кэширование

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

какое время кэширования ставится на сайт

Прокси-серверы в инфраструктуре обмена данными между клиентом и сервером

Итоги

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

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

Уважаемые читатели! Какие технологии кэширования вы используете в своих проектах?

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *