posts - 193,  comments - 520,  trackbacks - 0

          在集群部署的情況下,應用程序需要做出調整,主要集中在四個方面:對httpsession的處理、對緩存的處理、共享的文件系統、synchronized關鍵字的失效。

          httpsession的處理

          httpsession的處理最為重要,因為對WEB程序而言,httpsession無疑是最重要的全局資源,它需要被多個web服務器所共享。

          無共享的集群架構(SNA),在這樣的集群中,每個節點具備完全相同的功能,并且不需要知道其他節點存在與否。每個節點JVM進程不保持全局狀態,才能夠保證nJVM節點的冪等性,那些所有涉及到全局狀態的,必須放在JVM進程之外,例如用戶ID可以使用cookiesession可以放入數據庫(這并不是一個好的選擇),文件可以放在共享存儲系統中。

          也就是說httpsession的信息需要被保存在JVM進程之外,例如分布式緩存、數據庫。


          這里是方案:

          1、使用會話cookie保存web服務器產生的sessionid
             為什么是sessionid而不是userid,原因在于誰也不知道除去登錄外其他人會在httpsession里干些什么

          2、自定義SessionMap<String,Serializable>同步保存httpsession內的信息
             自定義SessionMap同步httpsession,在操作httpsession時不用改變調用接口,不用東張西望

          3、使用分布式緩存memcached保存自定義SessionMap<String,Serializable>

          4、會話膠粘
             未失敗轉發的情況下沒必要在memcached和httpsession之間復制來復制去,眉來眼去

          5、使用SnaFilter處理失敗轉發

          6、使用HttpSessionListener實現SessionMap<String,Serializable>的過期
             利用容器session 機制的好處,httpsession過期的時候干掉memecached里的SessionMap


          下面根據web請求的過程分情況討論該方案:

          A、登錄


          根據請求的url判斷是否是登錄請求

          在線人數保存在memcached

          B、 正常請求


          C、 失敗轉發


          D、登出


          根據請求的url判斷是否是登出請求

          E、HttpSession過期

          hack memcached,使用HttpSessionListenersessionDestroyed事件時根據sessionid刪除memcached里的sessionMap(如果存在)

          關于在線人數的統計:在線人數存儲在memcached里,將在線人數與sessionMap綁定,往memcached里增加sessionMap時在線人數+1,刪除時-1.



          http://www.aygfsteel.com/ronghao 榮浩原創,轉載請注明出處:)
          posted on 2008-09-04 14:31 ronghao 閱讀(2271) 評論(0)  編輯  收藏 所屬分類: 工作日志
          <2008年9月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          關注工作流和企業業務流程改進。現就職于ThoughtWorks。新浪微博:http://weibo.com/ronghao100

          常用鏈接

          留言簿(38)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          常去的網站

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 贵德县| 栾川县| 新乐市| 海原县| 沙湾县| 武平县| 玉门市| 正镶白旗| 湘乡市| 大埔区| 浙江省| 安西县| 邯郸县| 五大连池市| 莱芜市| 特克斯县| 辽源市| 金门县| 宁陵县| 峡江县| 杨浦区| 姜堰市| 吴江市| 金乡县| 襄城县| 仪征市| 手游| 筠连县| 灵山县| 莒南县| 肃北| 远安县| 武邑县| 内黄县| 道真| 长宁区| 河南省| 民乐县| 惠安县| 洛宁县| 新野县|