2012-02-28 113 views
3

我们正在为80 000个用户构建一个Spring-MVC Web应用程序。Spring MVC,@SessionAttribute和可伸缩性

我看到很多控制器中使用的PetClinic例如: @SessionAttribute注释和 SessionStatus status ... status.setComplete()存储和从HTTP会话除去豆。的确非常有用。

如果您打算为80 000个用户构建应用程序,那么这是最好的方法吗? 如果您打算存储所有您的表单数据,您是否仍然可以使用会话负载平衡和会话故障转移?

回答

3

它可能不会满足您的需求,不。内置实现有两个主要问题:

  1. 它并不真正支持标签式浏览。如果用户在多个浏览器选项卡中加载相同的屏幕,则访问一个控制器的两个选项卡将会打断对方的会话属性数据。

  2. 如果用户没有按照您的“计划”导航路径,setComplete()呼叫将被错过,对象将无限期地挂起,直到会话过期并被清理。

根据您的应用程序的设计和做法,数字1可能会也可能不会成为问题。 (有些东西,例如Banks,无论如何故意阻挠多标签的使用)但我认为大多数用户希望能够在一个标签中编辑用户A的配置文件,在另一个标签中编辑用户B的配置文件,而不必提交一个表单屏幕。

数字2你可以通过总是向自己的控制器提交一个屏幕然后在清理之后重定向来解决问题,但如果你还没有建立这种方式,那么这是很多工作。

好消息是org.springframework.web.bind.support.SessionAttributeStore是公认的扩展点!您可以提供您喜欢的任何实现并将其注入调度程序servlet。如果您希望避免使用业务对象来扩大业务对象,则甚至不需要使用Web会话来存储信息。例如,您可以将实际存储放在后端兵马俑群集中,而不用担心它与群集策略兼容。

-

然后总是有选择伽玛如果你真的需要真正的可扩展性:它返工到不摆在首位:)

+0

所以内存占用量和并发依靠服务器端的状态,一个RESTful策略与此实施相关的问题可能首先会损害可扩展性。感谢您提供非常有用的评论。在弹簧实现方面,你有选择Gamma的好指针吗? – webpat 2012-02-29 01:49:01