2009-10-19 26 views
1

我有一個web應用程序部署到運行Apache,Tomcat和它們前面的負載平衡器的三個服務器。現在我正在考慮對它們進行聚類。羣集Java EE Web應用程序 - 選項?

以下是常用的選項選擇和我的限制,我知道的:基於

  1. 序列化會話集羣: 在我的情況下,應用程序使用了大量的會話對象。所以我寧願不去解決這個問題。在不久的將來,服務器的數量可能會增加到五個以上。

  2. 兵馬俑: 聽起來很有趣,但購買企業許可證不是一種選擇。

  3. 使應用程序成爲無狀態: 聽起來很誘人,雖然它有點不起作用。我很想聽聽它的一些設計指南和經驗。

其他建議?

我的主要目標是故障轉移。

+0

您的目標是什麼? – 2009-10-19 16:16:30

回答

1

傳統上,這是一種非常罕見的網絡應用程序,它確實是無狀態的,儘管我猜想在這些Ajax日子裏瀏覽器中保持狀態更爲常見。

如果您的意圖是使用羣集,以便單個用戶會話在服務器丟失後仍然存在,那麼您將需要支付某種傳輸成本。您可能會:

  • 將所有內容都保存在數據庫中。也許序列化爲一個blob。會話超時時,您需要保留這些斑點。諸如WebSphere之類的應用服務器具有這種能力。
  • 使用某種內存內存複製。再次,將不得不有一些transgfer /序列化成本。您可以將該複製的頻率與會話最近更新丟失的可能性進行折衷。

在任何一種情況下,您的目標都是「會話關聯性」:用戶的請求默認轉到同一個集羣成員,有效地將其「主」實例用作寫入緩存。

我不知道你的環境中提供了什麼現成的產品,理想情況下,你的服務器提供商應該有內置的會話管理功能 - 寫這些東西你的自我並不是微不足道的。

2

我的理解是,您目前正在3臺服務器上負載均衡您的負載,因此,對於我來說,您已經在做羣集(可伸縮性部分),而我不確定「羣集它們」的確切含義。你的意思是超越透明故障嗎?

基於序列化的會話聚類:就我而言,應用程序在會話中使用了很多對象。所以我寧願不去解決這個問題。在不久的將來,服務器的數量可能會增加到五個以上。

這隻對你有用,如果你不希望你的用戶在會話失敗的時候鬆開會話。如果你真的想這樣,你需要「持久性會話」(但要注意,這有性能上的成本)下,Tomcat提供several way來實現這一點:使用會話持久性和保存會話共享文件

  1. 系統,
  2. 使用會話持久性並將會話保存到共享數據庫,
  3. 使用內存中複製。

這需要一些真正的實驗臺,但個人而言,內存複製是我的首選解決方案(最佳性能)。避免以任何代價序列化數據庫(根據我的經驗,性能很差)。

兵馬俑:聽起來很有趣,但購買企業許可證不是一種選擇。

我想你在這裏指的是他們的JVM級集羣解決方案。在應用程序下面聚集JVM(vs聚集應用程序本身)是恕我直言的解決方案,當應用程序無法輕鬆聚集時?但是,爲什麼要使用提供這種功能的應用程序服務器來執行此操作?

使應用程序成爲無狀態:聽起來很誘人,儘管它是一項工作。我很想聽聽它的一些設計指南和經驗。

您的意思是不使用HTTPSession?如果是,爲什麼?你與HTTPSession面臨什麼問題?你爲什麼要這樣做?


說實話,你試圖達到的目標並不清楚。您已經有了一個可伸縮的解決方案(垂直和水平方向),沒有單點故障(負載平衡器除外,但是...)以及極少數應用程序(例如關鍵生命應用程序,財務應用程序)確實需要透明容錯換句話說,許多人可以沒有生活)。此外,透明容錯在性能和/或硬件方面具有不可忽視的實際成本。所以,真正的問題是:當用戶放棄會話時,你的企業是否會損失那麼多錢?這是關鍵/頻繁嗎?這是否有理由花錢來實現透明容錯?

+0

我不希望用戶在服務器死亡或重新啓動時丟失會話。儘管它並不重要,但對於用戶必須失去活動會話而言,這是一個巨大的折扣。那麼,企業需要它。 – Langali 2009-10-19 18:00:18

+0

如果企業需要它,神需要它。我會建議內存複製,然後(和節點之間的高速LAN)。 – 2009-10-19 18:06:16

2

兵馬俑:聽起來很有趣,但購買企業許可證不是一種選擇。

兵馬俑是開源的,所以你注意到有義務購買許可證。它爲Web會話複製提供了非序列化方法,這正是您所要求的。

要開始,請點擊這裏:http://www.terracotta.org/web/display/orgsite/Web+Sessions