Зачем нужен memcached и его настройка.

Зачем нужен memcached и его настройка.

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

Стандартная связка кеширования для сайтов - php+memcached. Обычно, на форумах рекомендуют использовать примерно такое:

1. Вызывается страница
2. Смотрим, есть ли кеш для нее (создан или истекло время хранения)
3. Если есть, отдаем кешированый контент
4. Если нет, то создаем кеш и отдаем его содержимое.

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

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

С алгоритмом выше, при массовом наплыве траффика происходит примерно следующее:
1. Приходит первый юзер с запросом на нашу страницу. В кеше ее нет, поэтому запускается “тяжелая” отработка страницы, с дерганием сложных квери к базе данных и тп.
2. В следующий момент, пока первый запрос еще не отработан. Для второго юзера ситуация аналогична. Начинает снова генерится страница, поскольку данных в кеше еще нет.
3. И так далее. В итоге, все свободные процессы начинают обрабатывать один и тот же запрос, чтобы создать кешированную страницу. Поскольку процесс создания достаточно “тяжел”, сервак утыкается либо в ограничения http-сервера, либо в БД, либо в количество инклюдов итп. Смотря где у нас есть “бутылочные горлышки” (bottleneck)

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

Состоит он в том, что при первом запросе к странице, первая операция - создание пустой записи в кеше, с увеличенным временем expire. Минус: Пока отрабатывает один (и только один) процесс на создание страницы, остальные юзеры видят пустую страницу (кеш то не создан еще). Обходится просто - (см. первый вариант выше: контент для кеша генерится на бекенде превентивно)
Плюсы все что называется налицо. Слешдот эффект переходит уже в канальную область и возможности железа и операционке по обработке http. БД дергается только один раз для одной страницы.

Настройка Memcached

Отредактируйте /etc/sysconfig/memcached, введите:

vi /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.

Хороший топик на хабре в тему: http://habrahabr.ru/blogs/php/108274/

< Назад к списку новостей