【发布时间】:2011-04-07 23:10:25
【问题描述】:
今天在工作中,我与我的同事和我的老板讨论了无状态/有状态 bean(我们刚刚使用 JSF 完成了一个项目,这是这家公司的任何人第一次做与 JSF 相关的事情),我的老板说他并不真正喜欢 Session 范围的 bean(甚至是对话 / KeepAlive 范围的 bean)。他的一个论点是,如果我们有例如 4 个 Tomcat 并且有来自用户的请求,那么我们并不确定它是否会被同一个 Tomcat 每次“捕获”,问题是如果在第一次收到请求并创建会话 bean 时,它只在那个 Tomcat 上创建,其他人不知道。
他提到的解决方案之一是所谓的“粘性会话”,它强制来自给定用户的请求每次都由同一个 Tomcat 处理。根据他的第二个解决方案是将所有数据存储在“视图”中,但这意味着将整个状态存储在 POST 中,不知何故我不太喜欢这个想法。然后他提到将状态存储在数据库中,并在需要它的请求到达时查询它。我认为这会对性能造成巨大的影响,但他说这真的不是问题,因为 DB 应该为此类任务做好准备。
我感兴趣的最后一个解决方案是 Terracotta 服务器,据他告诉我们,它应该为所有 Tomcat 存储会话 bean(与它同步,然后如果有请求进来,它们会寻找Terracotta 中的会话 bean)。看起来有点酷且可扩展,但他说他并没有真正看到它在大型专业系统中使用过,对吗?我尝试了一些关于它的信息但失败了,Terracotta 是否有问题阻止人们使用它?
【问题讨论】:
标签: session session-state terracotta stateless stateful