Для чего нужны memcached и OPcache и стоит ли использовать их вместе в PHP7?
Привет. Собственно, вопрос, стоит ли использовать memcached и Opcache вместе на PHP7? Почувствую ли я какой-то прирост производительности? Как гласит ответчик в теме на англоязычном StackOverflow:
OPcache is for accelerating code access
Что это значит? Ускорение доступа к коду? Или ускорение доступа кода к чему-то?
memcached is for accelerating data access
memcached нужен для ускорения доступа к данным. К каким?
Отслеживать
задан 26 июл 2017 в 22:27
JamesJGoodwin JamesJGoodwin
3,968 6 6 золотых знаков 39 39 серебряных знаков 73 73 бронзовых знака
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Как обычно выполняется PHP скрипт?
PHP открывает файл с кодом, компилирует его, затем выполняет. Поскольку файлов может быть много, процесс их открытия, чтения и компиляции может отнимать кучу времени и ресурсов. Если файлы не меняются, то постоянную компиляцию можно не делать. Лучше сделать ее один раз и закэшировать результат.
Именно это и делает модуль opCache. Результат первой компиляции будет сохранен в кэш, с которым и будет работать PHP. Таким образом это ускорит выполнение за счет отсутствия тяжелого процесса компиляции. Когда файлы изменяются, модуль сам сбросит кэш и обеспечит перекомпиляцию. Короче, этот модуль делает очень полезную экономию ресурсов даже без необходимости его как-то настраивать. Чем сложнее приложение, тем выше эффективность этой оптимизации.
Часто код просто медленный
Например, обращения к внешним API, тяжелые выборки из баз данных, обработка больших файлов может занимать продолжительное время. В этом случае, кэширование данных следует использовать, как средство оптимизации и в этом вам поможет memcached, который поможет сохранить часто получаемые результаты. Например сложная выборка из БД, которая пригодится многим пользователям, но очень сильно напрягает базу данных, хотя почти для всех одинакова с минимальными отличиями. Memcached спроектирован так, чтобы все его операции имели алгоритмическую сложность O(1), т.е. время выполнения любой операции не зависит от количества ключей, которые хранит memcached. Естественно, нужно учитывать, что архитектура предполагает потерю данных в случае сбоя.
Результат
OpCache -> сохраняет опкоды для увеличения производительности исполнения кода -> данные регулируется непосредственно PHP и конфигурацией
Memcached -> необходим для сохранения часто используемых данных и следовательно увеличивает скорость получения данных -> записываемые данные и их ключи регулируются разработчиком, который использует данное программное обеспечение
Что такое memcached и для чего он нужен
Memcached (читается мемкЭшид) — это система кэширования различных объектов в оперативной памяти. Позволят значительно снизить нагрузку на базу или файловую систему и ускорить работу сайта, за счет того, что работа с памятью быстрее чем с базой или файлами. Насколько я помню была разработана для LJ, а сейчас применяется практически на всех проектах с большим количеством пользователей. Запускается отдельным сервером.
Если вы собираетесь делать свой стартап, то советую обратить на эту технологию пристальное внимание. За счет кэширования можно значительно уменьшить кол-во запросов к базе данных.
Для PHP есть специальный PECL-модуль (то есть он не поставляется вместе с PHP, надо отдельно скачивать и компилировать). Думаю также есть готовые модули для Perl, Python (Django), Ruby(RoR) и других языков.
В API самого мемкеша есть только базовые функции: выбор сервера, коннект и дисконект, добавление, удаление, обновление и получение объекта, инкримент и дикримент. Для каждого объекта устанвливается время жизни, от 1 секунды до бесконечности. При переполнение памяти более старые объекты автоматически удаляются. Для PHP также есть уже готовые библиотеки для работы с мемкешем, которые дают дополнительную функциональность.
Базовый алгоритм работы с мемкешем следующий — обращается к мемкеш-серверу за объектом, если он есть то берем его. Если нет, то обращаемся к базе данных (или где там еще у вас могут хранится данные), формируем объект, выдаем его пользователю и добавляем в мемкеш, чтобы мы могли прочитать его при следующем обращение.
В мемкеше имеет смысл хранить только часто запрашиваемые данные. Если какой то объект запрашивается у вас раз в неделю, то скорее всего лучший использовать файловый кеш. Хотя это также зависит и от архитектуры проекта.
Сейчас на одном из своих проектов (сайт знакомств) я пробую использовать мемкеш для реализации показа статуса пользователя он- или оффлайн..
Зачем нужен сервер Memcached в PHP
Здравствуйте! Сегодня я расскажу Вам немного о масштабировании web-приложений, где затрону вопросы, касающиеся технологии NoSQL, а также одного из ее воплощений в PHP — модуль Memcached.
Масштабирование— это одна из ключевых характеристик любого грамотно спроектированного приложения. Хорошо масштабируемое приложение может справиться с возрастающей нагрузкой без внесения изменений в его исходный код. Существую два вида масштабирования:
- вертикальное
- горизонтальное
В первом случае вместо более слабого компьютера ставится более мощный, а во втором случае, просто приобретается ПК со схожими характеристиками и добавляется к уже имеющимся. Каждый из этих подходов имеет как свои плюсы, так и минусы. Но учитывая тот факт, что подавляющее большинство web-сайтов работают на виртуальном хостинге, то вопрос аппаратного масштабирования нас сейчас не интересует.
При разработке сайтов на стороне сервера, как правило, используется стек технологий: Apache, Nginx — PHP — MySQL. И для большинства задач этих технологий хватает вполне. Однако, так как многие сайты создаются в целях получения дохода, то их производительность становится важным фактором. И поэтому с ростом посещаемости, рано или поздно, перед владельцем сайта возникает необходимость увеличения лимита используемых ресурсов сервера, говоря проще, ресурсов, предоставляемых ему хостером прекращает хватать.
В этом случае есть несколько стратегий:
- провести рефакторинг и определить причину замедления сайта;
- купить дополнительные ресурсы хостинга;
- оптимизировать потребление ресурсов сайтом c помощью плагинов (если сайт на CMS);
- начать использовать PHP модули, такие как Memcached
Очень часто, основной причиной замедления сайта являются операции чтения/записи, осуществляемые с файловой системой и базой данных, особенно при большом количестве запросов. Такие базы данных как MySQL, PostgreSQL особенно показательны в этом отношении.
Поэтому либо вместе с системами управления баз данных, либо вместо них применяют NoSQL-решения. Для своих операций, последние не используют жесткий диск, а хранят данные (в виде документов или пар «ключ/значение» ) полностью в памяти. Это обеспечивает производительность на порядок больше чем у решений на базе реляционных баз данных.
Сегодня в мире используются множество разнообразных NoSQL-решений:
Однако одним из самых первых решений служит memcached-сервер, который хранит данные в виде пар «ключ/значение». Для работы с memcached существуют два расширения — Memcache и Memcahed. Memcached появился позднее и в отличие от Memcache предоставляет интерфейс для всех возможностей сервера memcached. В следующих статьях мы рассмотрим его подробнее, а на этом все. Спасибо за внимание.

![]()
Создано 22.08.2017 10:34:38
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
- Кнопка:
Она выглядит вот так: - Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт - BB-код ссылки для форумов (например, можете поставить её в подписи):
Комментарии ( 0 ):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.
Зачем нужен memcached и его настройка.
memcached — Компьютерная программа, реализующая сервис кэширования данных в оперативной памяти на основе парадигмы распределенной хеш-таблицы.
Стандартная связка кеширования для сайтов — php+memcached. Обычно, на форумах рекомендуют использовать примерно такое:
1. Вызывается страница
2. Смотрим, есть ли кеш для нее (создан или истекло время хранения)
3. Если есть, отдаем кешированый контент
4. Если нет, то создаем кеш и отдаем его содержимое.
Такой алгоритм замечательно работает в случае, если у вас время захода отдельных юзеров на сайт не превышает времени генерации отдельной страницы кеша. Простыми словами, если у вас два с половиной юзера в час, то такая схема замечательно работает. Но при этом смыла в таком кешировании нет никакого.
Данный алгоритм, однозначно не работает в случае слешдот эффекта. Хотя, казалось бы, как раз от него мы и пытаемся защититься при помощи нашей системы кеширования.
С алгоритмом выше, при массовом наплыве траффика происходит примерно следующее:
1. Приходит первый юзер с запросом на нашу страницу. В кеше ее нет, поэтому запускается “тяжелая” отработка страницы, с дерганием сложных квери к базе данных и тп.
2. В следующий момент, пока первый запрос еще не отработан. Для второго юзера ситуация аналогична. Начинает снова генерится страница, поскольку данных в кеше еще нет.
3. И так далее. В итоге, все свободные процессы начинают обрабатывать один и тот же запрос, чтобы создать кешированную страницу. Поскольку процесс создания достаточно “тяжел”, сервак утыкается либо в ограничения http-сервера, либо в БД, либо в количество инклюдов итп. Смотря где у нас есть “бутылочные горлышки” (bottleneck)
Выхода из ситуации есть два. Первый (идеальный) — контент для кеша генерится априори на бекэнде, без участия юзеров в принципе. Но это не всегда возможно сделать.
Второй — почти что хак, так сказать перанальный вариант. Тем не менее, простой, как и все гениальное
Состоит он в том, что при первом запросе к странице, первая операция — создание пустой записи в кеше, с увеличенным временем expire. Минус: Пока отрабатывает один (и только один) процесс на создание страницы, остальные юзеры видят пустую страницу (кеш то не создан еще). Обходится просто — (см. первый вариант выше: контент для кеша генерится на бекенде превентивно)
Плюсы все что называется налицо. Слешдот эффект переходит уже в канальную область и возможности железа и операционке по обработке http. БД дергается только один раз для одной страницы.
Настройка Memcached
Отредактируйте /etc/sysconfig/memcached, введите:
Обновление его следующим образом:
PORT=»11211″ USER=»memcached» # max connection 2048 MAXCONN=»2048″ # set ram size to 2048 — 2GiB CACHESIZE=»4096″ # listen to loopback ip 127.0.0.1, for network connection use real ip e.g., 10.0.0.4 OPTIONS=»-l 127.0.0.1″
Выше, начинается Memcached в качестве демона, используя 4 Гб оперативной памяти, а также трансляция на IP 127.0.0.1, порт 11211. Сохраните и закройте файл.
Ещё один интересный момент. Memcached, есть PHP API к libmemcached. А Memcache, библиотека для php, не использующая libmemcached.