REST защищает веб-приложения без состояния клиента на сервере. Известный пример корзины переводится в ресурс, который обычно находится в базе данных.
Интересно - ли это хорошая практика для использования базы данных для таких данных, так как база данных уже является узким местом во многих приложениях. Разве не было бы лучше использовать боб предприятия с сохранением информации Java вместо этого? Серверы приложений разработаны с кластеризацией в памяти.
Каковы преимущества и недостатки двух подходов?
Сохранение сеансов на сервере приложений будет работать только тогда, когда:
Хранение сеансов в центральной базе данных и / или EJB будет работать, если ваши клиенты не гарантированы всегда подключаться к одному и тому же узлу приложения в вашем кластере.
Другой подход к рассмотрению, использует такие услуги, как memcached . Это будет работать в любом случае.
Все остальные предметы являются хорошими предложениями. Еще один это: не используйте состояние сеанса, если вы не нуждаетесь в этом.
Хранение сеанса в базе данных является (в целом) плохая идея на пару простых причин:
Типичное использование сеанса состоит в том, чтобы отказаться от необходимости загружать общие данные с сервера базы данных несколько раз. Если сеанс хранится на сервере БД, ну, вы действительно не достигли большого количества.
сессия должна быть сериализована и десериализована для каждого выполнения страницы. Это означает, что данные сеанса должны быть получены на сервере, и записать обратно на сервер каждую загрузку на одну страницу независимо от того, используете ли вы его или нет.
В моем опыте, вам намного лучше, чтобы просто потянуть данные с вашего сервера базы данных, когда на самом деле вам это нужно. В большинстве случаев люди вносит все виды коротких живших данных в сеанс просто потому, что они думают, что они решают проблему с производительностью, когда на самом деле они делают его хуже.
Далее, если вы ограничиваете количество данных вниз (скажем, чтобы пользовательский идентификатор, имя или что-то подобное), то вы можете хранить это в зашифрованном клиенте Cookie Cookie и не нужно беспокоиться об этом вообще.
memcache - это один вариант; Но опять же, я бы серьезно посмотрю на использование базы данных и посмотрим, сможете ли вы первым образом настроить запросы и схемы.
Что происходит, когда сервер приложений умирает. Состояние сеанса все еще важно? Зайдите в базу данных.
Есть ли у вас больше данных о состоянии сеанса, чем ваш сервер может обработать для всех одновременных пользователей? Перемещение данных в БД и извлечение только того, что вам действительно нужно в данный момент, может быть решением.
Ваше приложение сгруппировано? Если да, то центральная база данных обеспечивает постоянную доступность сеансовых данных.
В противном случае: Просто храните их в сессии.
Есть ли у вас экстремальные требования к масштабированию (например, переполнение стека или сайты с еще большим трафиком)? Найдите способ не использовать БД.
Это правда, что база данных часто является узким местом. Но правильно настроенная БД должна отлично обрабатывать пару байт данных о сеансах. Более сложные данные и запросы - это то, что стоит производительности.
в общем:
База данных
In-Memory (нераспределенные бобы с контролем состояния)
Ваш выбор будет полностью зависеть от ваших требований к приложению и окружающей среде. При прочих равных условиях, я предпочитаю решение для баз данных из-за преимуществ балансировки нагрузки и надежности, но это может быть легко переборщиком во многих сценариях.