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可能会支持它,但我真的不会推荐它。
- DelegatingVehicleTracker(第65页Goetz)如何返回“实时”视图?
- hibernate中的createSQLQuery使用Prepared Statement?
- 使用iText的HTML到PDF:如何生成复选框
- 实现Comparable,compareTo名称冲突:“具有相同的擦除,但不会覆盖其他”
- 如何将multithreading应用于反向传播神经网络训练?
- 可以在java中将volatile变量定义为static吗?
- 在Rectangle中创建一个字符串
- PrintWriter和PrintStream永远不会抛出IOExceptions
- 在JavaScript中将JavaScript变量分配给Java变量