Статьи в категории Memcached

NoSQL в MySQL: разгон MySQL до 750 000 запросов в секунду

// Октябрь 25th, 2010 // 23 Comments » // Highload, Memcached, MySQL, NoSQL, Веб-разработка

Yoshinori Matsunobu 20 октября в своем блоге опубликовал интересную (на мой взгляд) статью – компания, в которой он работает разработала и успешно использует MySQL плагин, который позволяет обрабатывать более 750 тысяч запросов на вполне обычном железе. Решение – очень красивое, при этом позволяет использовать как обычные SQL запросы, так и достигать производительности, которая не доступна даже NoSQL решениям. Конечно, результаты тестов впечатляют, но слишком все сладко – возможно, где-то есть и подводные камни. Надо тестировать. Если все пройдет гладко, то постараюсь внедрить – как раз есть проект, на который это решение ложится идеально – в нем требуется как производительность, так и высоки требования к надежной системе хранения данных.

(далее…)

Share

Архитектура больших проектов: Facebook

// Июль 25th, 2010 // 2 Comments » // Memcached, MySQL, PHP, Веб-разработка

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

(далее…)

Share

Хранение PHP сессий в memcached: испытание на production сервере

// Июль 22nd, 2010 // 6 Comments » // Memcached, PHP, Zend Framework

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

(далее…)

Share

Сессии в memcached с Zend Framework

// Июнь 30th, 2010 // 7 Comments » // Memcached, Zend Framework

Столкнулся тут с очень странным багом. У нас в проекте реализовано централизованное хранение сессий. Т.е. разные бекэнды хранят сессии в одном месте. Это позволяет автоматически «узнавать» пользователя, вне зависимости от того с какого фронт-энда пришел запрос.
При выключенном кэше сессии хранятся в БД MySQL, при включенном в Memcached. И вот тут то и начались глюки. У нас есть основной движок на ZF, и утилитка на PHP. Утилитке надо производить авторизацию пользователя, а для этого подключаться к memcache и устанавливать session_save_handler().

Вроде делал всё как надо, но получал ошибку:

Zend_Session_Exception: Zend_Session::start() - /vendors/Zend/Cache
/Core.php(Line:310): Error #8 unserialize(): Error at offset 0 of 929 bytes Array in //vendors
/Zend/Session.php on line 493 Call Stack: 0.0006 665616 1. {main}() /utils/session.php:0 0.0464
 2973824 2. Zend_Session::start() /utils/session.php:49

После этого сессия убивалась, и в основной системе юзера выкидывало.

Solution

А оказалось всё банально просто. Во-первых надо было устанавливать в утилите такие же переменные окружения для memcache, как и в дивжке:

resources.cachemanager.backend.memcached.ini.allow_failover = 1
resources.cachemanager.backend.memcached.ini.max_failover_attempts  = 20
resources.cachemanager.backend.memcached.ini.chunk_size             = 8192
resources.cachemanager.backend.memcached.ini.hash_strategy          = "standard"
resources.cachemanager.backend.memcached.ini.hash_function          = "crc32"

С помошью кода:

$iniSets = $options['bootstrap']['resources']['cachemanager']['backend']['memcached']['ini'];
foreach ($iniSets as $name => $value) {
    ini_set('memcache.'.$name, $value);
}

Во-вторых, надо было отключить автоматическую сериализацию.

 resources.cachemanager.frontend.block.options.automatic_serialization = false

После этого сессия стала открываться как в основной системе, так и в утилите.

Share