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