2013-07-15 55 views
5

我們有一個需要維護狀態的應用程序,以便一個包含數據的對象(可能很多)可以由客戶端(瀏覽器)在「對話」交互中查詢。每次請求重新加載數據都不是很有效。我應該使用Spring Session Scoped bean還是使用ehcache之類的緩存?

我們使用Spring和session scoped bean來維護一些會話控制數據。然而,這些新豆將更大。

這是適當使用會話範圍的bean還是緩存(ehcache)更適合?

除非真的需要,否則我們不願意使用緩存技術。

另一個因素是應用程序需要部署在羣集中。在這種情況下會話範圍的bean是由應用服務器的會話複製複製的,還是使用ehcache(我認爲它可以分佈在集羣中)效率更高?

任何指導讚賞。

+0

你能澄清你的意思是「應用服務器」嗎?它是一個完全成熟的服務器,例如。 JBoss,或者它也可以是Tomcat? – davidcyp

回答

1

在這對夫妻的想法(聲明:我兵馬俑/ ehcache的工作...所以記住這一點......但還是想在這裏是偏):

1 - 是否有任何冗餘數據每個會話?任何可以在會話中共享的東西?如果是的話,+1用於ehcache來存儲共享的東西(因爲ehcache針對併發性進行了優化)

2 - 會話對象有多大?你有多少併發用戶在穩定狀態下期待? (換句話說,你需要爲你的應用服務器上的會話存儲專門分配多少內存?)

如果會話佔用量不是很大,並且可以很好地適合堆放在沒有GC問題的堆上,那麼使用會話應該是一個好的解決方案。

但是它越大,你的java堆就會越大......越需要使用voodoo技巧來檢查垃圾回收和gc暫停時間。 通過使用ehcache,您可以集中存儲多個會話可以訪問的一些對象...因此整合您的內存佔用空間(與1相同) 此外,通過使用ehcache的企業擴展(BigMemory = http://terracotta.org/products/bigmemory),您可以繞過堆限制和存儲您的數據堆外(儘可能多的 - 10 GB,100 GB或更多)。因此,需要在內存中的對象的大小變得無關緊要(只要您可以將RAM添加到您的服務器當然)

3 - 對於會話複製,應用程序服務器,如JBOSS,Weblogic,Websphere支持它。同樣,這又是會話大小的問題(需要在整個線路上覆制多少數據)。如果會話對象很大,並且你有很多會話對象,那麼羣集中會有很多網絡流量......可能或不能很好地工作。 將核心對象放在分佈式EhCache層中,以優化數據存儲,同時將會話保持在最低限度(即登錄/認證信息),在我看來,這肯定會增強會話複製機制。

希望有所幫助。

相關問題