От переводчика: Это третья статья из цикла о Node.js от команды Mozilla Identity, которая занимается проектом Persona. Эта статья посвящена применяемому в Persona способу хранения данных сессии на клиенте.
Статические веб-сайты хорошо масштабируются. Их легко кэшировать, и не нужно постоянно синхронизировать данные на нескольких серверах.
К сожалению, большинство веб-приложений должны хранить информацию о состоянии, чтобы предлагать пользователям персонализированные страницы. Если пользователи могут регистрироваться на сайте, то нам надо хранить сессии. Самый распространенный способ — установить cookie со случайным идентификатором сессии, а детали хранить на сервере.
Масштабирование сайта с хранением состояния
Если необходимо масштабировать такой сайт, есть три варианта:
- Реплицировать данные сессии между всеми серверами.
- Использовать центральное хранилище, к которому будут обращаться все серверы.
- Закрепить за каждым пользователем определённый сервер.
У всех этих подходов есть недостатки:
- Репликация ухудшает производительность и увеличивает сложность.
- Центральное хранилище ограничивает возможность масштабирования и приводит к дополнительным задержкам.
- Привязка пользователей к конкретным серверам приводит к проблемам, когда сервер отключается.
Тем не менее, поразмыслив немного, можно придумать и четвёртый способ: хранить все данные сессии на клиенте.
Читать полностью »