2011-10-02 35 views
14

在分佈式環境中部署無狀態Java EE 6應用程序以實現高可用性和可伸縮性的最佳方式是什麼?我的應用程序是無狀態的。因此,我並不需要複製任何會話狀態(HTTP會話,EJB狀態豆類等)使用Glassfish在亞馬遜AWS上集羣無狀態Java EE應用程序

具體來說,我想了解以下內容:

  • 我需要的集羣功能Glassfish 3.1(鑑於我不需要複製會話狀態)?
  • 我大量使用JMS隊列和消息驅動Bean。如何設置JMS以使其在集羣環境中工作?
  • 我也在使用EJB計時器服務。這在集羣環境中如何工作?除了使用共享數據庫來存儲定時器(而不是嵌入式Derby數據庫)之外,還有什麼需要做的嗎?

我打算使用Amazon AWS(具有多可用區部署,彈性負載平衡,EC2的RDS)。

+0

如果您要發佈3個不同的問題,您可能會有更好的運氣。 – Preston

回答

11

我處於類似的情況,目前我正在發現GF集羣可以/不能爲我做什麼。

回覆1)我需要Glassfish的3.1的集羣功能

由於您的EJB是無狀態的,你不需要對會話/狀態複製的GF集羣(像你說的你自己)。您可以設置多個獨立實例並分別將它們部署到它們。但是,即使在無國籍的應用程序中,從行政角度來看,我發現GF集羣的好處非常值得。

GF集羣將確保配置自動應用於所有實例。 JNDI被自動複製。應用程序自動部署。這是一個擴展並添加額外實例的單個命令 - 稍後,您的羣集將進行擴展,並且新實例將被配置,部署,啓動並準備就緒。對我來說,只要我有超過1個實例,那就是行政天堂和足夠使用GF集羣的理由!

需要考慮的一件事(我現在正在爲此苦苦掙扎)可能是一個分佈式/協調的L2緩存,以防您的應用程序正在與數據庫交談。

Re 2)...如何設置JMS使其在集羣環境中工作?

不知道我理解你的問題...如果你想在GF之外有一個高可用的消息代理,你需要相應地設置它並自己管理它。例如,ActiveMQ有幾種設置集羣/ HA /擴展的方法。如果您使用GF提供的OpenMQ,則設置GF羣集還會提供羣集消息代理。盒子外面。

但是,經紀人集羣本身就是一個話題,不容低估。您可能需要考慮持久性和共享消息存儲等,而不管使用外部還是GF提供的集羣代理。

如果JMS是您的應用程序的一個組成部分,我建議適當注意經紀人。我可能不會使用GF經紀人,而是有一個獨立的經紀人集羣(關注點分離;例如,您可以相互獨立地升級GF /經紀人)。

Re 3)EJB定時器服務...除了使用共享數據庫來存儲定時器之外,還有什麼需要做的嗎?

如果您需要計時器到組的自動閃光一次(appserver-)的情況下,我相信你需要GF集羣(加場的共享DB)。否則,我不明白,每個實例應該知道它是否應該觸發。但是,這很容易測試...

TL;博士

  • 使用GF集羣對管理工作
  • 使用一個外部的,易於理解的高可用消息代理
  • 使用共享的數據庫保存您的EJB計時器
+0

非常感謝。完全同意使用集羣GF實例的管理方便性。可能會與它一起。我的應用程序也在與MySQL數據庫進行交流,但到目前爲止我們沒有考慮二級緩存。關於JMS代理,我會首先內置OpenMQ,並看看它是如何發展的。 – Theo

+0

不錯的漢克。但是您是否在Glassfish的不同實例之間獲得了二級緩存同步的解決方案? –

2

我在你的各點的角度:

1)會話複製的集羣管理功能,它不是建立集羣服務器環境的目標的一部分。你走出集羣的好處是:

  • 提高了可擴展
  • 更高的可用性
  • 更大的靈活性集羣 副作用是加大對基礎設施的複雜性,額外的設計和規範要求等,所以,如果你是考慮集羣,那麼你的決定應該由諸如你希望應用程序的可擴展性,可用性和靈活性等因素驅動。

2)您可以使用Apache ActiveMQ與您glassfish服務器,使您的JMS的東西在集羣環境中工作。

3)我想共享DB應該足夠

+0

關於1)我知道集羣爲我帶來了改進的可擴展性和更高的可用性。這就是我想要這樣做的原因。我的問題是我是否需要Glassfish集羣功能或者是否足夠 - 因爲我的應用程序是無狀態的 - 我只是使用共享數據庫和負載平衡器來設置多個無狀態服務器。 關於2)它是否與GlassFish中的標準JMS實現OpenMQ協同工作?具有多個機器的 – Theo

+0

解決了硬件故障情況的問題。去橫向集羣是昂貴的,但總是提供比垂直集羣更好/可靠的性能(http://publib.boulder.ibm.com/infocenter/tivihelp/v3r1/topic/com.ibm.itcamrtt.doc_6.0/ITCAMfTT_InstallConfig10.htm )。 – Saurabh

0

你可能會需要一個工業級EJB框架,如果你真的想你的應用程序流暢運行....但是,你肯定不會僅僅侷限於GlassFish的。重要的是要記住的是,EJB是一個規範,不一定侷限於任何一種實現!

1)我是否需要Glassfish 3.1的集羣功能(因爲我不需要複製會話狀態)?

不,你沒有定義。如果你的應用程序是無狀態的,Glassfish將不是必需的。

2)我大量使用JMS隊列和消息驅動Bean。如何設置JMS以使其在集羣環境中工作?

JBoss是這裏的一個選項。我的JBOSS集羣服務只需重新選擇新的主節點即可在發生故障時管理消息傳遞,因此可用性得到了保證。

3)我也在使用EJB計時器服務。這在集羣環境中如何工作?除了使用 共享數據庫來存儲計時器(而不是嵌入式Derby數據庫)之外,還有什麼需要做的嗎?

如果您使用weblogic或Jboss ejb實現,時間安排可以透明聚類。在這種情況下,我不認爲你需要嵌入式數據庫:框架可以直接處理:。