Jakarta ee GlassFish app server中的多实例应用程序体系结构和部署

Jakarta ee GlassFish app server中的多实例应用程序体系结构和部署,jakarta-ee,deployment,hosting,glassfish-3,multiple-instances,Jakarta Ee,Deployment,Hosting,Glassfish 3,Multiple Instances,我需要为每个GlassFish服务器(V3.1)大约100个客户设置一个托管环境。 每个客户都需要自定义配置的应用程序,这些应用程序可以彼此独立运行。(JDBC、JMS、重启单个应用程序的可能性) 最好运行单个虚拟机,因为使用750MB的RAM启动100个JVM听起来不是个好主意 到目前为止,我已经测试了以下解决方案,但不幸的是,这两个解决方案都没有满足我的要求: 在不同的域上部署应用程序。由于JVM Ram的使用和在多个端口上运行多个管理控制台的复杂性,此解决方案是不够的(我们不需要太多的分离

我需要为每个GlassFish服务器(V3.1)大约100个客户设置一个托管环境。 每个客户都需要自定义配置的应用程序,这些应用程序可以彼此独立运行。(JDBC、JMS、重启单个应用程序的可能性) 最好运行单个虚拟机,因为使用750MB的RAM启动100个JVM听起来不是个好主意

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

  • 在不同的域上部署应用程序。由于JVM Ram的使用和在多个端口上运行多个管理控制台的复杂性,此解决方案是不够的(我们不需要太多的分离)

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

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

  • 有谁能建议使用GlassFish托管多个应用程序实例的最佳实践/建议是什么?我们是否“注定”要为每个客户保留1GB的ram?来自IIS环境,我们有单独的应用程序池,每个应用程序池在启动时使用3-5MB的RAM


    更新

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

    我的“独立性要求”是:

  • 我只需要能够在一个Glassfish实例上部署多个应用程序,并能够在单独的Java进程中运行它们,但要在同一个Java虚拟机下运行
  • 我需要能够独立地启动/停止每个应用程序
  • 我需要能够重新加载一个应用程序和其他应用程序,而其他应用程序应保持活动状态(在IIS下,此选项称为“回收应用程序池”)
  • 如果一个应用程序中存在bug,则不应影响同一服务器/实例上的其他客户应用程序。其他应用程序应该继续工作(当然,当这个bug没有破坏整个JavaVM时)
  • 在一个Glassfish实例上部署了数百个应用程序(在实例/虚拟主机上启用)是否可以实现此想法?在我的例子中,也许以不同的名称部署应用程序(如本文所述:home.java.net/node/676678)可能是一个好的解决方案?有没有人有过这样的经验:用不同的配置部署同一个应用程序一百次

    谢谢


    Olgierd

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

    • 管理不同模块的版本
    • 独立停止/重新启动应用程序
    • 要为您的应用程序提供通用捆绑包,避免浪费perm gen空间
    但是在你的问题中,我不明白如何用一台Java虚拟机来建模不同的进程。。。。一个虚拟机意味着一个进程(在操作系统级别上),您无法对此进行任何操作

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

    如果有人对这个问题感兴趣,那么这里会更成功地发布:问题是在GF中实现多实例架构是否可行。AFAIK OSGi也没有帮助。这样看来,这里的多租户体系结构更自然()。