2009-12-17 3 views
2

Предисловие: Я не разработчик Java.Семинары Tomcat/jBOSS - где они обычно хранятся?

У меня есть вопрос о Tomcat/jBOSS и других серверах приложений Java. Где хранятся сеансы (данные сеанса)? В PHP сеансы обычно хранятся в базе данных, что означает, что вы можете легко обмениваться данными сеанса в среде с балансировкой нагрузки. В Tomcat и других серверах приложений сессия, по-видимому, хранится в памяти по умолчанию, которая не будет применяться в среде с балансировкой нагрузки. Хотя верно, что PHP хранит сеансы в файлах по умолчанию, для его подключения к базе данных требуется несколько строк. То же самое верно для серверов приложений?

В принципе, что за профессионалы в повествованиях в памяти? Является ли эта стандартная практика для серверов приложений? Спасибо всем!

ответ

14

У меня есть вопрос о Tomcat/jBOSS и других серверах приложений Java. Где хранятся сеансы (данные сеанса)?

По умолчанию, я бы сказал в памяти. Подробности на самом деле ... детали реализации, которые специфичны для сервера приложений.

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

Ну, не совсем. Это означает, что запрос клиента должен быть отправлен на тот же узел в кластерной среде (это называется «липкость сеанса»), и это не проблема с точки зрения балансировки нагрузки. Но это проблема с точки перехода на другой ресурс: в случае отказа узла в кластере состояние сеанса, управляемое узлом, может быть потеряно. Чтобы решить эту проблему, почти все поставщики серверов приложений реализуют переход на спящий режим (используя различные механизмы, такие как репликация в памяти, постоянство на основе JDBC и т. Д.). Но, опять же, детали реализации являются специфичными для сервера приложений. См. Например, как Tomcat или WebLogic справиться с этим. Очень интересным является также статья Under the Hood of J2EE Clustering на стороне сервера.

Хотя верно, что PHP хранит сеансы в файлах по умолчанию, для его подключения к базе данных требуется несколько строк. То же самое верно для серверов приложений?

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

В принципе, какие плюсы для сессий рассказов в памяти? Является ли эта стандартная практика для серверов приложений?

Просто: выступление! Сериализация данных, вызов базы данных, запись на диск, все это имеет стоимость. Репликация в памяти, очевидно, позволяет избежать некоторых накладных расходов. Но у него есть и некоторые ограничения. Например, он не разрешает WAN HTTP Session State Replication с WebLogic. Но хорошо, это мало кому нужно :)

+0

Это было очень полезно. Спасибо. – frio80

+0

@ frio80 Добро пожаловать! Кстати, общий способ распознавания хорошего ответа - это его поддержка ;-) –

1

Спецификация JavaEE не диктует это, это зависит от конкретных вариантов реализации. Например, обычным способом обработки балансировки нагрузки в Tomcat является использование replicated sessions, где данные сеанса являются многоадресными между узлами. Хранение данных сеанса в базе данных - огромный убийца производительности, и, хотя Tomcat может его поддерживать, я бы не рекомендовал его.

+0

Спасибо. Я вижу, что существует три метода для реплицированных сеансов (файл, JDBC и встроенная память). Таким образом, файл/в памяти чаще всего встречается? Я думаю, что моя проблема в том, что я действительно не понимаю, что подразумевает «сервер приложений». Мне нужно больше читать. – frio80

+0

Мне бы хотелось прочитать некоторые данные за оператором «Хранение данных сеанса в базе данных - огромный убийца производительности», есть ли какие-либо ссылки? (Не пренебрежительно, интересно.) Я ожидаю, что это будет сильно зависеть от вовлеченных инфраструктур. –

+1

@TJ: приложения часто хранят в своих сеансах значительное количество высокоструктурированных высоковольтных данных, что может быть чрезмерно дорогостоящим для сохранения в базе данных масштабируемым способом. Если вы перемещаете приложение из памяти в постоянную сессию в базе данных, часто можно убить производительность. Реплицируемые в сети сеансы в памяти обойдя эту проблему в значительной степени, в то время как при выполнении репликации наблюдается поражение производительности, она, как правило, гораздо менее выражена, чем при сохранении базы данных. – skaffman

3

С предоставленного Менеджер сеанса, сеанс всегда в памяти, но у него есть менеджер упорствовать сеанс для JDBC магазина,

http://tomcat.apache.org/tomcat-5.5-doc/config/manager.html

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

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

Вы можете написать собственный менеджер сеансов, чтобы имитировать поведение PHP.

Смежные вопросы