Назад | Перейти на главную страницу

Совместное использование данных HTTP-сеанса в Passenger / Rack - какова наилучшая текущая практика?

В моей компании есть клиентское веб-приложение, распределенное по нескольким серверам с целью балансировки нагрузки и отказоустойчивости. Приложение написано на Ruby (Rack, работает под управлением Passenger), а аутентификация в приложении осуществляется с помощью файлов cookie сеанса HTTP.

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

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

На данный момент наиболее многообещающим решением, которое мы нашли, является rack-session-mongo. Это, в сочетании с репликацией MongoDB, должно соответствовать требованиям как к общему хранилищу сеансов, так и к избыточности / аварийному переключению.

Мы начинаем тестирование, чтобы увидеть, соответствует ли он требованию "низких накладных расходов", но он кажется многообещающе и в этом отношении.