Как digg (или другие веб-сайты категории высокой нагрузки) хранят пользовательские сессии? - PullRequest
6 голосов
/ 18 января 2010

Как digg или любой другой сайт с большим трафиком хранит пользовательские сессии? Что они используют для хранения пользовательских сессий? Файловая система, БД (какая?), Memcache или оба?

Давайте представим простую ситуацию. Зарегистрированный пользователь установил флаг «Запомнить меня» при входе в систему. Мы установили сессионный cookie с датой истечения 1 год. Например, мы храним сессию в memcache, но мы также должны вести запись этой сессии в БД (в моей версии). Только пользователи с флагом «Запомнить меня» хранятся в БД. Это правильный способ хранения сессий? Конечно, я имею в виду сайты с высоким трафиком (с двумя или более серверами приложений, двумя или более базами данных, серверами memecache и т. Д.). На небольших сайтах сессия хранения по умолчанию (в файловой системе) в порядке.

Я пытался выполнить поиск в Google, но не смог найти никакой информации о нем. Я читал некоторые решения из книги «Расширенное программирование на PHP», но основной акцент был сделан на настройке обработчика хранения сессий.

Очень надеюсь услышать хорошие идеи или ссылки!

Спасибо.

Ответы [ 3 ]

6 голосов
/ 18 января 2010

В дополнение к ответу Аликс, вас может заинтересовать оформление этой статьи:

Короткая выдержка:

Что вызвало Memcached в качестве хранилища сессий:

Вскоре после выпуска Digg v3, не избыточное хранилище сеансов MySQL аппаратный сбой. Это привело к Digg отключение электричества. Мы всегда планировали это в в таком случае мы бы просто бросили (тривиальное) изменение, чтобы поместить сессии в Memcached, а не MySQL, чтобы увидеть, как это случилось.


Итак, до того, как вы каждый раз ударяли по БД для сеансов?

Да.

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

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


Мы использовали InnoDB для сессий [до memcached]. Не было блокировка на уровне таблицы или строки. Это было Разногласия на уровне ОС. Использование Memcached перед MySQL уменьшился бы загрузить и разрешить скрипт администратора делать свою работу, но это подчеркивает вопрос: почему вообще есть MySQL позади memcached вообще? Мы не нужно или даже хотеть энергонезависимой сессий. (Важное замечание для читателя: Вы можете нуждаться или хотеть энергонезависимой сессий).

«Почему MySQL вообще стоит за memcached?» ... «Нам не нужны или даже не нужны энергонезависимые сессии».

5 голосов
/ 18 января 2010

Они наверняка используют memcached или эквиваленты.

0 голосов
/ 27 марта 2011

Моя реализация заключается в том, что когда пользователь нажимает кнопку «Запомнить меня», я помещаю другой файл cookie и присваиваю ему случайное значение.

Я проверяю у незарегистрированных пользователей этот файл cookie.Если он существует и совпадает с записью в БД, я вхожу в него, открываю сессию.

Хранение в memcache должно быть замечательно, если вы не на общем хостинге:)

...