LINUX.ORG.RU

Масштабируемая обработка сессий


1

2

Подкиньте статейку где есть не просто один метод, а рассматривается подробно много разных методов, возможно есть сравнения, бенчмарки, истории успеха и неуспеха. Хотелось бы максимально подробно и широко. Одиноких статей «Как шарить сессии через Redis» много, но агрегированных мало

★★★★★

Статьи не читал, но было дело, писал систему для расшаривания сессии в soa-системе. Ключевой момент - иммутабельность сессии на время обработки всего запроса. Идентификатор сессии пробрасывался между сервисами хидером, сессия возвращяоась из кэша. Хранилище выбирай сам исходя из требований, бенчмарки все врут. Кстати субоптимальное решение - просто хранить сессии в базе (у меня был постгр). На нагузке в 500 рпс оно жило, на тысяче заменили на мемкеш (та еще бяка, не используй никогда для хранения сессий). Короче все там просто, не знаю зачем ты паришся. Еще такой хинт: при логине пользователя вся часто используемая инфа скидывается в сессию, и она используется как быстый кэш.

Если бы делал сейчас, вот что поменял бы: забил бы на rest, http оставил бы, но использовал бы только post, а сессию прикреплял бы к каждому запросу целиком в служебном поле в компактном виде (protobuf). Сессии хранил бы в любой бд, мемкеш только как кеш поверх бд. Если пользователей не шибко много, можно все сессии хранить просто в хешмепе, это тоже работает и имеет самую высокую производительность.

dizza ★★★★★
()
Ответ на: комментарий от vertexua

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

dizza ★★★★★
()
Ответ на: комментарий от dizza

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

Таблица в постгресе была какая? TEMP UNLOGGED ?

soomrack ★★★★★
()
Ответ на: комментарий от dizza

Это я к тому, что правильные параметры при создании таблицы + правильные параметры в postgresql.conf = не сильно хуже memcache. Вообще задач, для которых memcache сильно лучше грамотной работы с бд я не знаю, выйгрыш от него конечно есть, но он не настолько большой, чтобы плодить новые сущности (ИМХО).

soomrack ★★★★★
()
Ответ на: комментарий от soomrack

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

dizza ★★★★★
()
Последнее исправление: dizza (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.