2012-02-06 92 views
5

我需要爲每個GlassFish服務器(v 3.1)的大約100位客戶設置一個託管環境。 每個客戶都需要可以彼此獨立運行的自定義配置的應用程序。 (JDBC,JMS,重啓單個應用程序的可能性) 運行單個虛擬機將是首選,因爲啓動每個使用750MB內存的100個JVM聽起來不是一個好主意。Multiinstance GlassFish應用服務器中的應用程序體系結構和部署

到目前爲止,我已經測試了以下解決方案,但不幸的是,這些已經滿足我的要求:在單獨的域

  1. 部署應用程序。該解決方案是因爲JVM內存的使用,並在同一個域上的多個端口上運行多個管理控制檯(我們並不需要那麼多的分離)

  2. (Glassfish上名爲目標)上部署多個實例的應用程序的複雜性不足。此解決方案不足,因爲它爲每個實例創建單獨的JVM進程並消耗太多RAM(每個實例有幾百MB)。否則,它最接近我們所需要的。

  3. 在同一實例上的多個虛擬主機上部署應用程序。這個解決方案是不可接受的,因爲在Glassfish中,每個虛擬服務器都沒有單獨的配置。

任何人都可以建議使用GlassFish來託管多個應用程序實例的最佳做法/建議是什麼?我們是否註定要爲每位客戶預留1GB的內存?從IIS環境來看,我們有獨立的應用程序池,每個應用程序池在啓動時都使用3-5MB的RAM。


UPDATE

關於我的依賴,並分享在我的應用程序: 在我想實現Glassfisf服務器上的想法,每個應用程序都需要不同的資源(JMS和JDBC)。這不是問題,即使在一個實例上啓用了虛擬主機,我也可以根據應用對其進行自定義(我可以通過從Http Request獲取服務器名稱來識別虛擬服務器,並在實例目錄中準備單獨的資源和配置文件以將配置應用於此特定虛擬服務器)。

我的「獨立性requrements」是:

  1. 我只需要能夠在一個GlassFish實例中部署多個應用程序,並能在不同的Java進程,但同樣的Java虛擬機下運行它們。
  2. 我需要能夠彼此獨立地啓動/停止每個應用程序。
  3. 我需要能夠重新加載一個應用程序,而其他應用程序應該保持活動狀態(在IIS下此選項稱爲「回收應用程序池」)。
  4. 如果在一個應用程序中存在缺陷,它不應該影響同一服務器/實例上的其他客戶應用程序。其他應用程序仍然工作(當然,當這個bug不會破壞整個Java虛擬機)。

這個想法是否可以在一個Glassfish實例上實現,並且已部署了100個應用程序(在實例/虛擬主機上啓用)?也許在不同的名字下部署應用程序(如這裏所描述的:home.java.net/node/676678)可能對我來說是一個很好的解決方案?有沒有人有這樣的配置不同配置百次相同的應用程序的經驗?

感謝,

Olgierd

+0

如果有人有興趣討論這個問題,它已經在這裏更成功發佈:http://www.java.net/forum/topic/glassfish/glassfish/multiinstance-appliciation-architecture-and-deployment-glassfish-app-server?force=691 – rsc 2012-02-15 12:06:13

回答

1

,如果你那麼現在使用GF 3堆棧,你會發現,這種產品被重構採取從OSGi架構的優勢..你可以部署包,甚至的.wab文件(Web應用程序包)在GF3.This架構將使您:

  • 管理獨立於不同的模塊的版本
  • 停止/重新啓動應用程序
  • 爲您的應用程序避免燙髮根空間的浪費提供公共bundle ...

但你的問題我無法理解如何不同的工藝與單一的Java虛擬機型號之一....虛擬機是指1個過程(在操作系統級別),你不能做對任何事情..

OSGi平臺爲您帶來關於你的應用程序和軟件模塊化SLA要求很多優點...... HTH 傑羅姆

+0

現在的問題是是否有可能在GF中實現多實例架構。 AFAIK OSGi也沒有幫助。看起來像那樣,多租戶架構在這裏更自然(http://en.wikipedia.org/wiki/Multitenancy)。 – rsc 2012-02-20 20:30:18

相關問題