Поддержание состояния в сервере приложений или в базе данных?

REST защищает веб-приложения без состояния клиента на сервере. Известный пример корзины переводится в ресурс, который обычно находится в базе данных.

Интересно - ли это хорошая практика для использования базы данных для таких данных, так как база данных уже является узким местом во многих приложениях. Разве не было бы лучше использовать боб предприятия с сохранением информации Java вместо этого? Серверы приложений разработаны с кластеризацией в памяти.

Каковы преимущества и недостатки двух подходов?

5
задан deamon 26 January 2010 в 21:41
поделиться

4 ответа

Сохранение сеансов на сервере приложений будет работать только тогда, когда:

  • Ваши клиенты всегда подключаются к одному и тому же серверу приложений (ака «Ссылка сеанса»)
  • Ваши узлы кластера приложений все используют Common Count Point (NFS и т. Д.) Для Sessions Sessions

Хранение сеансов в центральной базе данных и / или EJB будет работать, если ваши клиенты не гарантированы всегда подключаться к одному и тому же узлу приложения в вашем кластере.

Другой подход к рассмотрению, использует такие услуги, как memcached . Это будет работать в любом случае.

3
ответ дан 14 December 2019 в 13:36
поделиться

Все остальные предметы являются хорошими предложениями. Еще один это: не используйте состояние сеанса, если вы не нуждаетесь в этом.

Хранение сеанса в базе данных является (в целом) плохая идея на пару простых причин:

  1. Типичное использование сеанса состоит в том, чтобы отказаться от необходимости загружать общие данные с сервера базы данных несколько раз. Если сеанс хранится на сервере БД, ну, вы действительно не достигли большого количества.

  2. сессия должна быть сериализована и десериализована для каждого выполнения страницы. Это означает, что данные сеанса должны быть получены на сервере, и записать обратно на сервер каждую загрузку на одну страницу независимо от того, используете ли вы его или нет.

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

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

memcache - это один вариант; Но опять же, я бы серьезно посмотрю на использование базы данных и посмотрим, сможете ли вы первым образом настроить запросы и схемы.

0
ответ дан 14 December 2019 в 13:36
поделиться

Что происходит, когда сервер приложений умирает. Состояние сеанса все еще важно? Зайдите в базу данных.

Есть ли у вас больше данных о состоянии сеанса, чем ваш сервер может обработать для всех одновременных пользователей? Перемещение данных в БД и извлечение только того, что вам действительно нужно в данный момент, может быть решением.

Ваше приложение сгруппировано? Если да, то центральная база данных обеспечивает постоянную доступность сеансовых данных.

В противном случае: Просто храните их в сессии.

Есть ли у вас экстремальные требования к масштабированию (например, переполнение стека или сайты с еще большим трафиком)? Найдите способ не использовать БД.

Это правда, что база данных часто является узким местом. Но правильно настроенная БД должна отлично обрабатывать пару байт данных о сеансах. Более сложные данные и запросы - это то, что стоит производительности.

1
ответ дан 14 December 2019 в 13:36
поделиться

в общем:

База данных

  • более надежна и выдержит перезагрузку приложения/сервера
  • может быть распределена между серверами со сбалансированной нагрузкой без необходимости работать с "липкими" сеансами
  • медленнее обращаться к

In-Memory (нераспределенные бобы с контролем состояния)

  • Быстрое хранение и извлечение
  • Меньшее количество кода
  • Будет потеряно, если приложение/сервер перезагрузится

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

2
ответ дан 14 December 2019 в 13:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: