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