GlassFish应用服务器中的多实例应用程序体系结构和部署

odo*_*oko 5 deployment hosting multiple-instances java-ee glassfish-3

我需要为每个GlassFish服务器(v 3.1)的大约100个客户设置一个托管环境.每个客户都需要可以彼此独立运行的自定义配置应用程序.(JDBC,JMS,可能性重新启动单一的应用程序)运行一个虚拟机将是优选的,因为发射100级的JVM的RAM中的每个使用750MB不会听起来像一个好主意.

到目前为止,我已经测试了以下解决方案,但不幸的是,这些都没有满足我的要求:

  1. 在单独的域上部署应用程序.由于JVM Ram的使用以及在多个端口上运行多个管理控制台的复杂性,这个解决方案是不够的(我们不需要那么多的分离)

  2. 在同一域上的多个实例(Glassfish上的命名目标)上部署应用程序.此解决方案不足,因为它为每个实例创建单独的JVM进程并消耗太多RAM(每个实例几百MB).否则它最接近我们需要的.

  3. 在同一实例上的多个虚拟主机上部署应用程序.此解决方案是不可接受的,因为在Glassfish中,每个虚拟服务器都没有单独的配置.

任何人都可以建议使用GlassFish托管多个应用程序实例的最佳做法/建议是什么?我们是否注定要为每位客户预留1GB内存?来自IIS环境,我们有单独的应用程序池,每个启动时使用3-5MB的RAM.


UPDATE

关于我的依赖和在我的应用程序中共享:在我想在Glassfisf服务器上实现的想法中,每个应用程序都需要单独的资源(JMS和JDBC).这不是问题,即使每个虚拟主机在一个实例上启用,我也可以为每个应用程序自定义它(我可以通过从Http Request获取服务器名称来识别虚拟服务器,并在实例目录中准备单独的资源和配置文件以将配置应用于此特定虚拟服务器).

我的"独立性要求"是:

  1. 我只需要能够在一个Glassfish实例上部署多个应用程序,并且能够在单独的Java进程中运行它们,但是在同一个Java虚拟机下运行它们.
  2. 我需要能够彼此独立地启动/停止每个应用程序.
  3. 我需要能够重新加载一个应用程序而另一个应用程序应该保持活动状态(在IIS下,此选项称为"回收应用程序池").
  4. 如果一个应用程序中存在错误,则不应影响同一服务器/实例上的其他客户应用程序.其他应用程序仍然有效(当然这个bug不会破坏整个java vm).

这个想法是否可以在一个Glassfish实例上实现,部署了100个应用程序(在实例/虚拟主机上启用)?也许在我的情况下,以不同的名称部署应用程序(如此处所述:home.java.net/node/676678)可能是一个很好的解决方案?有没有人有过使用不同配置部署相同应用程序一百倍的经验?

谢谢,

Olgierd

rom*_*mje 1

如果您使用 GF 3 堆栈,您会注意到该产品经过重构以从 OSGi 架构中受益。因此,现在您可以在 GF3 中部署捆绑包甚至 .wab 文件(Web 应用程序捆绑包)。此架构将使您能够:

  • 管理不同模块的版本
  • 独立停止/重新启动应用程序
  • 为您的应用程序提供通用捆绑包,避免浪费永久代空间...

但在你的问题中,我无法理解如何使用单个 Java 虚拟机对不同的进程进行建模......一个虚拟机意味着 1 个进程(在操作系统级别),你对此无能为力。

OSGi 平台在应用程序和软件模块化的 SLA 要求方面为您带来许多优势... HTH Jerome