2012-02-28 100 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