Memcache кластеризация для сессий php? - PullRequest
1 голос
/ 12 октября 2010

Вот небольшая справка, в настоящее время у меня есть

  • 3 веб-сервера
  • один дБ-сервер, на котором также размещается memcache для сеансов php для 3 веб-серверов.

У меня есть конфиги php на 3 серверах, которые указывают на сервер memcache для сеансов.Он работал нормально, пока не было создано много соединений для чтения и т. Д., Что затем вызвало тайм-ауты соединения.

Так что в настоящее время я смотрю на кластеризацию memcache на каждом веб-сервере для сеансов, моя единственная забота - какУдостоверьтесь, что memcache на всех серверах имеет одинаковую информацию для сеансов.

Кто-то велел мне http://github.com/trs21219/Memcached-Library, потому что я использую codeigniter, но как мне конвертировать мои php-сеансы в это, так как memcacheкажется хранилищем ключей?Заранее спасибо.

Кто-нибудь проверял http://repcached.sourceforge.net/ и работает ли он?

Ответы [ 3 ]

2 голосов
/ 12 октября 2010

Я не уверен, что у вас такие же ожидания от memcache, как и у его дизайнеров.

Во-первых, однако, распространение memcache работает иначе, чем вы ожидаете: нет механизма для репликации хранимой информации.Как вы заметили, каждый экземпляр memcache является простым хранилищем значений ключей.Распределение выполняется клиентским кодом, который имеет список всех настроенных экземпляров memcache и выполняет хеширование ключа, чтобы направить его в один из экземпляров.Клиент может хранить его везде и извлекать его локально или многократно хэшировать его для избыточности, но это не простые упражнения.

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

Сеансы PHP на самом деле не подходят для этого, по моему опыту.База данных может легко поддерживать многие тысячи сессий PHP с едва видимым трафиком, но вам нужно много хранилища memcache для поддержки одного и того же числа: 50k на сессию и 5000 сессий означают около 256Mb, а затем естьвсе остальные данные, которые вы хотите поместить туда.Недостаточно памяти, и вы получаете много необъяснимых выходов из системы (так как memcache отбрасывает данные сеанса, когда находится под нагрузкой памяти) и, таким образом, множество раздраженных пользователей, которые вынуждены продолжать входить снова.

1 голос
/ 17 февраля 2011

Мы обнаружили БОЛЬШЕЕ преимущество, применяя MongoDB вместо MySQL для большинства вещей, включая обработку сессий.Это намного быстрее, намного меньше, намного проще.Мы храним MySQL для транзакционных нужд, но все остальное теперь входит в Mongo.Мы поместили memcache в простое кеширование страниц и других данных, которые не важны, если они есть или нет, что-то вроде smarty.

1 голос
/ 12 октября 2010

Нет необходимости использовать некоторые сторонние библиотеки для организации memcached "кластера".

http://ru.php.net/manual/en/memcached.addserver.php

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

Так что в этом случае вам не нужно беспокоиться о том, «как сделать так, чтобы memcache был включенвсе серверы имеют одинаковую информацию для сеансов "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...