HTTP Session 失效轉移
幾乎所有流行的 J2EE 供應商都在他們的叢集產品中實現了 Http Session 失效轉移,用來保障當某台伺服器失效後工作階段狀態不會丟失,使用戶端請求能被正確處理。如圖 6 所示,當瀏覽器訪問有狀態的 WEB 應用程式(第 1 ,2 步),這個應用程式可能在記憶體建立了會話對象用於儲存資訊以供後面的請求使用,同時,發送給瀏覽器一個唯一的 HTTP Session ID 用於標識這個會話對象(第 3 步),瀏覽器將這個 ID 儲存 Cookie 中,併當它下次再請求同一 WEB 應用程式的頁面時,會將 Cookie 發還給伺服器。為了支援會話失效轉移, WEB 伺服器將在一定的時候把會話對象備份到其他地方以防止伺服器失效後丟失會話資訊(第 4 步)。負載平衡器檢測到這個失敗(第 5 , 6 步),並將後續的請求分發到裝有相同應用程式的伺服器執行個體中(第 7 步),由於會話對象已經備份到其他地方了,這個新的伺服器執行個體可以恢複會話(第 8 步)正確地處理請求。
圖 6 HTTP Session 失效轉移
為了實現上述功能, HTTP Session 失效轉移將帶來以下問題:
l 全域 HTTP Session ID
如上所述, HTTP Session ID 用於在特定的伺服器執行個體中標識唯一的記憶體會話對象,在 J2EE 平台, HTTP Session ID 依賴於 JVM 執行個體,每個 JVM 執行個體擁有幾個應用程式,每個應用程式都為不同的使用者管著許多會話, HTTP Session ID 是在當前 JVM 執行個體用於訪問相關會話的關鍵。在會話失效轉移的實現中,要求不同的JVM 執行個體不能產生兩個相同的 HTTP Session ID ,這是因為當失效轉移發生時,一個 JVM 的會話將要備份並恢複到另一個中,這樣,必須建立全域 HTTP Session ID 產生機制。
l 如何備份工作階段狀態
如何備份工作階段狀態是區別 J2EE 伺服器好壞的關鍵因素。不同的供應商有不同的實現,在後續部分我再詳細解釋。
l 備份的頻率和粒度
會話的備份是消耗效能的,包括 CPU ,記憶體,網路頻寬和寫入磁碟和資料庫的 I/O ,備份的頻率和備份對象的粒度將嚴重影響效能。
原創文章@java進階網 轉載請標明出處: http://www.javady.com/index.php/411.html