Каков наилучший способ управления сессиями php в кластере LAMP? - PullRequest
1 голос
/ 22 октября 2008

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

Во время чтения я увидел популярные различия (основанные на файлах, memcached, общая память (mm), sql table и custom).

Первоначальной идеей, о которой мы думали, было использование ZFS или AFS, смонтированного на каждом из серверов приложений (блоков LAMP), и указание параметра session.save_path php.ini на каталог из этого смонтированного пути.

Мне бы хотелось услышать истории успеха.

Ответы [ 5 ]

1 голос
/ 22 октября 2008

Ответ Джона Кэмпбелла здесь должен помочь

Каков наилучший способ обработки сеансов для сайта PHP на нескольких хостах?

Важно отметить, что он делает вывод, что НЕ использует только Memcached.

Кроме того, как я уже упоминал в этом вопросе, вы можете рассмотреть кластеризацию сеансов, которая поставляется с Zend Platform, но с этим решением связаны значительные расходы на лицензирование.

0 голосов
/ 22 октября 2008

Если вы ищете решение Memcached для сессий - возможно, вам стоит проверить Repcached . Следует уменьшить проблемы с потерями сеансов, если серверы перезагружаются и т. Д.

о переэкранировании
«repcached» - это набор исправлений, который добавляет функцию репликации данных в memcached 1.2.x.

Примечание: На самом деле я еще не пробовал repcached, но подумал, что стоит посмотреть.

0 голосов
/ 22 октября 2008

Я немного предвзят, но я бы порекомендовал HTTP_Session2 . (Я работаю над этим пакетом) Хотя мы поддерживаем традиционную обработку сеансов с помощью файлов, мы также поддерживаем базы данных (MySQL, PostgreSQL, SQlite и т. Д. Через PEAR :: MDB2 ), а также memcached.

Лично мы используем обработчик базы данных и обслуживаем до 100 000 пользователей в день без особых проблем. Я думаю, что с точки зрения оптимизации, я бы пошел в memcached следующим, но база данных отлично подходит для промежуточного исправления, которое не требует, чтобы вы перегибались назад. : -)

Кстати, для получения дополнительной информации о memcached, пожалуйста, проверьте мой ответ на Как управлять переменными сеанса в веб-кластере? .

EDIT

Так как вы спросили, вот пример ( больше в документации по API ):

$options = array('memcache' => $memcache);

Где $memcache - это экземпляр PECL :: Memcache , который необходим. Я знаю, что у нас нет примера, и мы улучшим это. Между тем, наш исходный код имеет довольно хорошую встроенную документацию, например, посмотрите документацию API .

0 голосов
/ 22 октября 2008

Я использую файл на основе сеансов на общих серверах более 5 лет без проблем. У нас есть несколько сессий, которые могут стать довольно большими (> 10 МБ), и файловая система работает очень хорошо. Обычно наши общие серверы хранят файлы сеансов для каждого сайта в каталогах chroot, поэтому только root может получить к ним доступ. Мы обнаружили, что это очень надежно и у нас не было проблем. Хотя вы теряете некоторые функции базы данных или memcached, есть причина, по которой это PHP по умолчанию.

0 голосов
/ 22 октября 2008

Я думаю, что хранение ваших сессий в базе данных (например, MySQL или PostgreSQL) потребует меньше всего головной боли, особенно если у вас уже есть БД для всего, что делает ваше приложение.

Memcached также может помочь, так как он может хранить данные на нескольких машинах, но у меня нет никакого опыта с ним.

...