我在Tomcat 5.5上运行的大量公共网站上工作。目前,我们需要对特定服务器的粘性以维持会话。我想开始复制会话,但很难找到一个好的FOSS解决方案。我已经编写了自己的管理器(使用memcached作为存储)但是如果多个服务器正在处理对同一用户的请求,则无法处理竞争条件。
那里有解决方案我应该看看吗?如果粘性失败,我正在寻找的不仅仅是作为后备的东西,但如果用户请求定期传播到多个服务器,那么这将起作用。
答案 0 :(得分:0)
这是一个棘手的问题。在我看来,如果您有多台服务器并进行地理分布,Tomcat中的Servlet会话根本不起作用。
我们的解决方案是让我们的服务器完全无状态。所有会话仅存储在数据库中。我们使用地理定位的MySQL和内存引擎,性能比使用Tomcat会话复制的旧方法好得多。
尽管竞争条件的可能性要小得多,但偶尔也会发生。我们在DB中添加了记录版本,因此我们可以检测竞争条件并重试。