Похоже, что слово «кэширование» существует еще с самого начала эпохи компьютеров. Но что же это такое и как оно используется в работе сайтов?
Определения и быстродействие
Если исходить из самого простого определения, то кэш — это временное пространство для хранения или временная память, позволяющее обеспечить быстрый доступ к данным. Кэширование зачастую классифицируется по вариантам использования. На сегодняшний день разработчики веб-сайтов используют как минимум пять основных видов кэша.
Первый — кэширование объектов, при котором объекты приложения сохраняются локально для их дальнейшего использования при будущих запросах без необходимости обращения к исходному серверу. Следующий — кэширование баз данных, позволяющее сохранить в буфер памяти данные запроса для увеличения скорости работы баз данных. Кэширование байт-кодов, например с помощью 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.
Сочетание нескольких уровней кэширования гарантирует не только быструю доставку данных, но и возможность одновременного нахождения на сайте большого количества пользователей. Кто сказал, что не получится сразу убить двух зайцев?
Основные плагины для кэширования
К счастью уже существует очень много плагинов, которые помогут оптимизировать скорость ваших сайтов. Ниже некоторые их самых популярных:
- W3 Total Cache — комплексное решение для оптимизации кэширования, которое используется на миллионах сайтов на WordPress по всему миру. Он совместим почти со всеми видами хостинга. Плагин осуществляет кэширование страницы, баз данных и объектов через общий диск или Memcached почти для всех видов веб-ресурсов. Это по-настоящему универсальный плагин: у него есть дополнительные функции, такие как минимизация и возможность интеграции с популярными инструментами мониторинга;
- Redis Object Cache – серверное приложение для кэша постоянных объектов, работающее на базе Redis, сервиса с открытым кодом для хранения структуры данных в памяти. У плагина простой пользовательский интерфейс. Обратите внимание: плагин не для использования на виртуальном хостинге;
- BatCache – это еще один плагин для кэширования объектов, использующий Memcached для предупреждения сбоев работы сайта в связи с всплеском трафика. Для установки необходимо скопировать файлы и внести изменения в файл конфигурации. Пользовательского интерфейса нет. Советую пользователям сервера Memcached рассмотреть этот плагин. Обратите внимание: и этот плагин не совместим с виртуальным хостингом;
- WP Super Cache пригодится тем, кому нужна высокая скорость кэширования файлов веб-страниц. WP Super Cache для передачи данных пользователям генерирует статические html-файлы вашего сайта WordPress, а не динамически создает страницы в момент получения запроса. Вариант отлично пойдет для виртуального и выделенного хостинга;
- WP Rocket – прекрасный вариант для виртуального хостинга. Плагин платный, в основном предназначен для кэширования страницы и браузера, а также для предварительной загрузки из кэша. Его легко установить и настроить под собственные потребности (а еще у него прекрасный персонал службы поддержки). Доступны дополнительные настройки, например отложенная загрузка и оптимизация шрифта.
Есть вопросы или советы, связанные с кэшированием? Пишите в комментариях!
HOSTING.cafe предлагает инструменты для поиска виртуальных и выделенных серверов, виртуального хостинга и SSL-сертификатов.
Поделиться с друзьями
Комментарии (7)
a_shats
27.04.2017 17:52>Похоже, что слово «кэширование» существует еще с самого начала эпохи компьютеров.
Кэширование — это костыль, призванный сгладить разницу в производительности подсистем (в описанном в статье случае — дисковой подсистемы и ОЗУ). И существует он далеко не с «самого начала».nikitasius
27.04.2017 19:32+1Не костыль, а инструмент.
Например у вас сайт с тысячей онлайн и статичным контентом (только статьи добавляете). В итоге ставите кеш на статью 3 дня и на страницу в 5 минут и готово. Нагрузки ноль на виртуалке.
Или в случае cloudflare, задавая правильный expired, можно кешировать динамику и статику на разное время на их CDN, что уже ускорит ответ от сервера клиенту.
Про медия сайты я вообщу молчу, там прокси-кеш (cloudflare) экономит сотни € на канале.
nikitasius
Круто!
Еще круче!
А если серьезно — такие цифры очень далеки от реальности. SSD не выдаст на 4k 300,000 iops'ов, а на счет оперативки — смотря как с ней работают. Если юзать как tmpfs, то ecc ddr3 (4x8Gb) выдаст 475k iops под дебианом.
По составу статья трешачек и маркетинг, где про кеширование один абзац жиденько.
a_shats
>А если серьезно — такие цифры очень далеки от реальности. SSD не выдаст на 4k 300,000 iops'ов
Тут, я так понимаю, взяли цифры «с потолка», это да, обычная производительность для SAS/SATA 6G — это 500+ МБ/с и менее 100К IOps на чтение таким блоком.
Но есть реальные SSD (и SAS, и NVMe), которые выдают и более миллиона IOps, причем не только в синтетике.
https://www.hgst.com/ru/products/solid-state-solutions/ultrastar-ssd1600mm
Вот пример.
nikitasius
Проблема в том, что max IOPS != real IOPS.
Недавно тестил Samsung SSD 850 EVO 500GB (машинка не моя, по ssh зашел, благо владелец дал прогнать тесты).
Собсна результаты меня разочаровали, учитывая, что диск он купил за 3 дня до теста.
a_shats
>root@server:~# fio -name=iops -rw=randread -bs=4k -size=1G -iodepth=1 -directory=/usr/ssi14/fiotest -ioengine libaio
А зачем было тестировать столь странным паттерном — случайный доступ в один поток блоком 4КБ на файле размером как раз в кэш контроллера этой SSD? Ну т.е. — на тестировании с очередью 1 Вы рекордов по iops точно не добьетесь. Нужно было 100+.