Что такое кэширование данных?
Кеширование сайтов — один из способов ускорения работы сервера с помощью сокращения нагрузки на вычислительные мощности.
Основное отличие кэш-хранилищ в том, что они на порядок быстрее, чем основное хранилище, данные поступают из них и обрабатываются моментально.
Как это работает? Когда пользователь открывает страницу сайта, он отправляет на сервер запрос, тот обрабатывается и возвращается ответ в виде скомпилированной странички.
Ежеминутно тысячи посетителей совершают действия на веб-ресурсах, и все эти процессы обрабатываются на сервере, создавая постоянную нагрузку.
Если процессор не успевает быстро обрабатывать все задачи, может снижаться скорость загрузки сайтов. Это вредит посещаемости (не дождавшись быстрого отклика, пользователь просто закрывает вкладку) и ухудшает позиции в поисковой системе (скорость — одна из ключевых метрик при ранжировании сайтов).
Чтобы не производить каждый раз одни и те же манипуляции, повторяемые действия сохраняются во временных файлах в промежуточном хранилище. Доступ к нему осуществляется проще и быстрее, не приходится снова и снова создавать выборку данных, находящихся на основных дисках.
Например, уже просмотренные картинки сохраняются в кеше браузера пользователя. Когда он заходит на сайт во второй раз, то уже не создается запрос к серверу, а изображение просто вытягивается из памяти компьютера.
Вводя доменное имя любимого сайта в адресную строку и получая готовую страницу, большинство пользователей даже не подозревают, что часть этой страницы (а то и вся) уже сохранена на их компьютере.
Интересно, что наш мозг также использует кэширование. Встречаясь первый раз с объектом (яблоко, дом, кошка), он тратит время и ресурс на его изучение и формирование блока информации (свойства, назначение, опасно/безопасно). В последующие разы, увидев объект, нам не нужно заново обрабатывать все доступные данные о нем. Из кеша достается готовый скомпилированный образ и мы в долю секунды восстанавливаем всю полученную ранее информацию. Таким образом мозг экономит много времени и сил, создавая устойчивые сценарии (скрипты), а основной процессор разгружается для более сложных и новых задач.
Способы кэширования данных
Существуют разные способы кэширования, которые зависят от того, что и как именно кэшируется, где сохраняются результаты.
Браузерное кэширование (на стороне клиента)
- картинок и файлов,
- протокола https,
- веб-страниц (полностью или их фрагментов).
Серверное кэширование
- PHP-кода,
- запросов к базе данных и ответов сервера.
Кэш как метод работы с данными существует с 1960-х годов, поэтому не все известные способы актуальны. Существует много устаревших — одни канули в лету, другие до сих пор используются.
Сервисы для серверного кэширования
Сегодня мы расскажем вам о трех современных и действенных методиках серверного кэширования — OPCache, Memcached и Redis.
OPCache
OPCache разработан специально для PHP. Чтобы понять, как он действует, давайте сначала разберемся в процессе работы PHP-скриптов с клиентскими запросами. Система ищет файлы, открывает их, компилирует ответ и отдает пользователю. В процессе создаются опкоды (скомпилированные сценарии) и после выполнения тут же уничтожаются.
OPCache позволяет сохранять эти сценарии в памяти, благодаря чему работа сайта ускоряется в несколько раз. Сам процесс создания опкодов довольно ресурсозатратный, поэтому сохранение сценариев в кэше позволяет серьезно разгрузить сервер.
Memcached
Memcached — это программное обеспечение, работающее на основе хеш-таблиц. У сервиса открытый исходный код, он поддерживает все основные языки программирования. Технология позволяет сохранять информацию по типу "ключ-значение" и используется в основном для кэширования сессий, но можно сохранять таким образом и другие данные — например, небольшие участки HTML-кода страницы.
Кэширование выглядит так: сначала запрос клиента поступает в хранилище Memcached и ищет там готовую компиляцию. Если ее нет — тогда запрос передается на сервер, создается страница, результат отправляется пользователю и тут же сохраняется в оперативной памяти с помощью сервиса Memcached. При последующих аналогичных сессиях результат будет сразу подаваться из кэша, процесс не будет затрагивать основные диски. Благодаря этому время отклика сокращается до миллисекунд, многократно разгружая серверные мощности. Это способствует быстрой загрузке сайтов.
Одна из особенностей Memcached — он занимает очень мало места и расходует минимум ресурсов. В нем нет типов данных, а только строки с ключами. За счет этого Memcached экономит память.
Сервис сберегает данные только в оперативной памяти и не сохраняет их при перезапуске системы. Если памяти не хватает, он начинает перезаписывать новые данные поверх старых.
Memcached многопоточный и хорошо масштабируется вертикально за счет наращивания памяти и количество ядер. Такой способ имеет ограничения, потому что реализуется в рамках одного сервера и имеет потолок.
Redis
Redis — это система управления базами данных, похож по принципу работы на Memcached и также действует по методу "ключ-значение", оба ресурса подойдут сайтам, у которых много запросов к базе данных. Но у него намного шире функционал, поэтому сервис используется не только для кэширования.
Что умеет Redis:
-
Кэширует сессии пользователей, промежуточные данные, фрагменты HTML-страниц;
-
Сглаживает блокировки сессий на PHP, чтобы у всех пользователей сайт загружался равномерно, а не по очереди;
-
Используется как СУБД для небольших площадок;
-
Работает в качестве брокера сообщений;
-
Кэширует PHP-код.
Если говорить о различиях Memcached и Redis дальше, то у Redis есть типы данных; он не только сохраняет информацию в оперативной памяти, но и периодически отправляет ее на диск.
Redis однопоточный и хорошо масштабируется горизонтально, с помощью присоединения дополнительных серверов. Благодаря этому масштабирование можно производить практически бесконечно — пока есть деньги покупать новую аппаратуру.
Предложения от Cityhost. Какой из способов выбрать клиенту?
Cityhost предлагает все три услуги в рамках использования хостинга. Расширения доступны в панели управления хостингом, в разделе "Дополнительные услуги".
Для клиентов выделяется 16 МБ оперативной памяти под OPCache бесплатно. Memcached обойдется в 10 копеек за день использования услуги, а Redis — 53 копейки (минимальный объем оперативной памяти, который можно заказать — 32МБ).
Все услуги и инструкцию по их установке вы можете найти здесь.
OPCache, Memcached и Redis используются для высоконагруженных проектов с большим количеством посетителей на сайте и частыми обращениями к базе данных. Какую из них устанавливать на свой хостинг?
OPCache — минималистичный и эффективный сервис, который подойдет всем проектам, использующим PHP как язык бекенда. Его можно устанавливать вместе с другими упомянутыми приложениями для кэширования.
Поскольку Memcached и Redis довольно похожи, часто возникает дилемма выбора между ними.
Обычно решение принимают в пользу Redis, поскольку он новее, обладает большим функционалом и позволяет решать больше задач, масштабироваться с помощью расширения серверной базы. Этим вариантом пользуются крупные проекты или с перспективой скорого роста.
Но Memcached решает задачи кэширования не хуже и обладает своими достоинствами — он экономичен по ресурсам, подходит для компактных проектов, не занимает много места и масштабируется в пределах одного сервера.
Возникает логический вопрос: если эти технологии так ускоряют работу, то не лучше ли поставить все три расширения на свой хостинг — тогда сайт, наверное, будет летать, как ракета? Не совсем. Эффективно работают связки OPCache+Redis и OPCache+Memcached, потому что каждый компонент из пары выполняет свои задачи.
А вот Redis и Memcached похожи между собой и при параллельном включении могут конфликтовать. Можно, конечно, хорошо настроить оба сервиса, чтобы они выполняли разные функции. Но обычно так не делается — одного их них вполне достаточно. Какой из двух выбрать, нужно определять исходя из нужд сайта, тестируя работу услуг.
Так что ответ прост: Redis и Memcached можно компоновать с OPCache, но включать все три сервиса не стоит.