有没有办法指定与Tomcat不同的会话存储?

时间:2020-03-05 18:58:39  来源:igfitidea点击:

Tomcat(此处为版本5)将会话信息存储在内存中。群集时,此信息会定期广播到群集中的其他服务器,以保持同步。我们可以使用数据库存储来使会话持久化,但是该信息也仅定期写入,并且仅用于故障恢复,而不是实际替换内存中的会话。

如果我们不想使用粘性会话(不幸的是,我们的配置不允许使用粘性会话),则会引发会话不同步的问题。

用其他语言,Web框架倾向于允许我们将数据库用作主会话存储。尽管这引入了潜在的扩展问题,但确实使会话管理非常简单。我想知道是否有一种方法可以使tomcat以这种方式使用数据库进行会话(从技术上讲,这也将不需要在tomcat server.xml中进行任何群集配置)。

解决方案

回答

看一看Terracotta,我认为它可以解决扩展问题,而无需重新设计大型应用程序。

回答

肯定有办法。尽管我坚决支持粘性会话,但可以为服务器/数据库节省大量负载(除非发生某些故障)...

http://tomcat.apache.org/tomcat-5.5-doc/config/manager.html包含有关SessionManager配置和Tomcat设置的信息。根据确切要求,我们可能必须实现自己的会话管理器,但是此起点应提供一些帮助。

回答

我一直是Rails会话技术的粉丝:将会话(压缩+加密+签名)存储在用户的cookie中。这样,我们就可以对心脏内容进行负载平衡,而不必担心粘性会话或者为会话数据访问数据库等。会话访问代码的重写。无论如何只是一个想法。