Совместное использование данных сеанса HTTP в Passenger/Rack - Какова наилучшая текущая практика?
В моей компании есть ориентированное на клиента веб-приложение, распределенное по нескольким серверам с целью балансировки нагрузки и отказоустойчивости. Приложение написано на Ruby (Rack, работает под управлением Passenger), а аутентификация в приложении обрабатывается с помощью cookie-файлов сеанса HTTP.
В настоящее время мы используем базу данных SQL для хранения данных сеанса (реплицируя их как часть нашей стандартной репликации базы данных), однако это решение не является идеальным, поскольку наша база данных SQL является Postgres и не поддерживает операции с несколькими основными устройствами (во время перерыва в обслуживании на пользователи, вошедшие в базу данных master, могут проверять свои сеансы против ведомого, но новые пользователи не могут войти). Затраты на запросы SQL для каждого обращения к странице также не оптимальны.
Я хотел бы знать, какие практические решения люди в настоящее время используют в производстве.
В идеале мы ищем:
Общий сеанс хранилища
Пользователи вошли вServer A
должен быть в состоянии прозрачно перейти кServer B
без необходимости входить снова.Хорошая избыточность
Потеря одного сервера не должна терять состояние сеанса.Низкие накладные расходы
Как минимум, "менее интенсивный, чем SQL-запрос для каждой страницы".
1 ответ
На сегодняшний день самое многообещающее решение, которое мы нашли, это rack-session-mongo
, Это, в сочетании с репликацией MongoDB, должно отвечать как требованиям общего хранилища сеансов, так и требованиям резервирования / отработки отказа.
Мы начинаем тестирование, чтобы увидеть, соответствует ли оно требованию "низких накладных расходов", но в этом отношении оно также выглядит многообещающим.