Tomcat / jBOSS会话 – 它们通常存储在哪里?

前言:我不是Java开发人员。

我有关于Tomcat / jBOSS和其他Java应用程序服务器的问题。 会话(会话数据)存储在哪里? 在PHP中,会话通常存储在数据库中,这意味着您可以在负载平衡环境中轻松共享会话数据。 在Tomcat和其他应用程序服务器中,默认情况下会话似乎存储在内存中,这不适用于负载平衡环境。 虽然PHP默认情况下会将会话存储在文件中,但需要几行才能将其连接到数据库。 应用程序服务器也是如此吗?

基本上,在记忆中故事会的优点是什么? 这仍然是应用服务器的标准做法吗? 谢谢大家!

我有关于Tomcat / jBOSS和其他Java应用程序服务器的问题。 会话(会话数据)存储在哪里?

默认情况下,我会在内存中说。 细节实际上是……应用服务器特定的实现细节。

在PHP中,会话通常存储在数据库中,这意味着您可以在负载平衡环境中轻松共享会话数据。 在Tomcat和其他应用程序服务器中,默认情况下会话似乎存储在内存中,这不适用于负载平衡环境。

好吧,不完全是。 这意味着客户端请求必须被发送到集群环境中的同一节点(这被称为“会话粘性”),从负载平衡的角度来看,这不是问题。 但从故障转移的角度来看,这是一个问题:如果群集中的节点发生故障,该节点管理的会话状态可能会丢失。 为解决此问题,几乎所有应用程序服务器提供程序都实现会话故障转移(使用各种机制,如内存中复制,基于JDBC的持久性等)。 但是,实现细节再次是特定于应用程序服务器的。 例如,请参阅Tomcat或WebLogic如何处理该问题。 “服务器端的J2EE集群 ” 下的文章也是一个非常有趣的阅读。

虽然PHP默认情况下会将会话存储在文件中,但需要几行才能将其连接到数据库。 应用程序服务器也是如此吗?

正如我所说,并非所有应用程序服务器都提供基于JDBC的持久性。 说到这一点,并回答你的问题,配置一般都很简单。 但是使用数据库确实不是首选的解决方案(实际上,我不惜一切代价避免它)。

基本上,在记忆中故事会的优点是什么? 这仍然是应用服务器的标准做法吗?

简单地说:表现! 序列化数据,调用数据库,写入磁盘,所有这些都需要付出代价。 内存中复制显然可以避免一些开销。 但它也有一些限制。 例如,它不允许使用WebLogic进行WAN HTTP会话状态复制 。 但是,只有少数人需要这个:)

使用提供的会话管理器,会话始终在内存中,但它有一个管理器将会话持久保存到JDBC存储,

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

与PHP不同,会话仍然可以从内存访问,并且只有在达到内存限制或服务器关闭时才会持久保存到DB。 因此,您的负载均衡器必须具有粘性路由才能使其正常工作。

内存中会话的好处是性能,因为每次事务都不会发生db访问。

您可以编写自己的会话管理器来模拟PHP行为。

JavaEE规范没有规定这一点,需要由各个实现来决定。 例如,在Tomcat中处理负载平衡的常用方法是使用复制会话 ,其中会话数据在节点之间进行多播。 在数据库中存储会话数据是一个巨大的性能杀手,虽然Tomcat可能会支持它,但我真的不会推荐它。