У меня вопрос о Tomcat / jBOSS и других серверах приложений Java. Где хранятся сеансы (данные сеанса)?
По умолчанию я бы сказал в памяти. Детали на самом деле ... детали реализации, специфичные для сервера приложений.
В PHP сеансы обычно хранятся в базе данных, что означает, что вы можете легко обмениваться данными сеанса в среде с балансировкой нагрузки. В Tomcat и других серверах приложений сеанс, по-видимому, по умолчанию сохраняется в памяти, что не применимо в среде с балансировкой нагрузки.
Не совсем так. Это означает, что клиентский запрос должен быть отправлен на тот же узел в кластерной среде (это называется «закреплением сеанса»), и это не проблема с точки зрения балансировки нагрузки. Но это проблема с точки зрения аварийного переключения: в случае отказа узла в кластере состояние сеанса, управляемое узлом, может быть потеряно. Чтобы решить эту проблему, почти все поставщики серверов приложений реализуют аварийное переключение сеансов (с использованием различных механизмов, таких как репликация в памяти, постоянство на основе JDBC и т. Д.). Но, опять же, детали реализации зависят от сервера приложений. Посмотрите, например, как Tomcat или WebLogic справится с этим. Статья Под капотом кластеризации J2EE на стороне сервера тоже очень интересное чтение.
Хотя верно, что PHP по умолчанию хранит сеансы в файлах, для его подключения к БД требуется несколько строк. То же самое и с серверами приложений?
Как я уже сказал, не все серверы приложений предлагают постоянство на основе JDBC. При этом и отвечая на ваш вопрос, конфигурация в целом проста, когда они это делают. Но использование базы данных на самом деле не является предпочтительным решением (на самом деле, я избегаю его любой ценой).
В принципе, каковы плюсы сеансов создания историй в памяти? Это все еще стандартная практика для серверов приложений?
Просто: производительность! Сериализация данных, вызов базы данных, запись на диск - все это имеет свою цену. Очевидно, что репликация в памяти позволяет избежать некоторых накладных расходов. Но есть и ограничение. Например, он не разрешает WAN HTTP-сеанс. Репликация состояния с помощью WebLogic. Но ну это мало кому нужно :)
person
Pascal Thivent
schedule
17.12.2009