揭開J2EE集群的神秘面紗(二)

2021-06-03 21:20:24 字數 2156 閱讀 1893

**:

web層集群是j2ee集群的重要且基本的功能。web集群技術包括web負載均衡和http session失效轉移。

j2ee提供商實現web負載均衡有許多方式。基本上,都乙個負載均衡器被插入到瀏覽器和web伺服器之間,如下圖所示。

圖 5  web負載均衡

負載均衡器可以是一台硬體,如f5負載均衡器,或僅僅是另一台有負載均衡plug-ins的web伺服器,乙個簡單的帶ipchains的linux box可以很好的實現負載均衡。不管採用哪種技術,負載均衡器都有以下特性:

l

實現負載均衡演算法

當客戶請求到來時,負載均衡器需要決定將如何分發到後台伺服器。流行的演算法是round-robin、random和weight based。負載均衡器盡力使每台伺服器例項都獲得相同的負載,但是上述演算法沒有乙個可以獲得理想的負載相同,因為它們僅僅是依據傳送到特定伺服器的請求的個數。一些精密的負載均衡器實現了特殊的演算法。它在分發請求之前將檢測伺服器的工作負載。

l

健康檢測

當一台伺服器失效了,負載均衡器應當檢測出失效並不再將請求分發到這台伺服器上。同樣,它也要檢測伺服器是否恢復正常,並恢復分發請求。

l

會話膠粘

幾乎所有的web應用程式都有一些會話狀態,可能是簡單的記住使用者是否登陸,或是包含你的購物車資訊。因為http本身是無狀態的,會話狀態應當存在伺服器的某個地方並與你當前瀏覽會話相關聯,這樣當你下次再請求相同web應用程式的頁面時可以很容易的重新獲取。當負載均衡時,最佳的選擇就是將特定的瀏覽器會話分發到上次相同的伺服器例項中,否則,應用程式可能不能正確工作。

因為會話狀態儲存在特定web伺服器的記憶體中,「會話膠粘」對於負荷均衡非常重要。但是,如果其中某台伺服器例項因為某種原因失效了(比如關機),那麼這台伺服器的會話狀態將要丟失。負載均衡器應當檢測到這個失效並不再將請求分發給它,但這些請求的會話狀態都因為存放在失效的伺服器中而丟失了所有資訊,這就將導致錯誤。會話的失效轉移因此而生。

幾乎所有流行的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,備份的頻率和備份物件的粒度將嚴重影響效能。

揭開木馬的神秘面紗 二

前言 離冰河二的問世已經快一年了,大家對於木馬這種遠端控制軟體也有了一定的認識,比如 他會改登錄檔,他會監聽埠等等,和一年前幾乎沒有人懂得木馬是什麼東西相比,這是乙個質的飛躍。但是,在這個連 菜鳥 都會用netstat看埠,用lockdown保護登錄檔的今天,難道木馬就停步不前,等待我們的 殺戮 麼...

J2EE複習 二 XML 上

xml extensible markup language 簡介 xml 可擴充套件標記語言 xml是一種您可以用來建立自己的標記的標記語言。xml由全球資訊網協會 w3c 建立 xml和html比較 比較內容 html xml 可擴充套件性 不具有擴充套件性 是元標記言,可用於定義新的標記語言 ...

J2EE 類的建立

1.建立book類 package j2eetest 包名 author wanjinyoung public class book 獲取書名 public string getname 獲取作者 public string getauthor 獲取編號 public string getisbn ...