Архитектура и развертывание многоэкземплярных приложений на сервере приложений GlassFish - PullRequest
5 голосов
/ 06 февраля 2012

Мне нужно настроить хостинговую среду для примерно 100 клиентов на один сервер GlassFish (v 3.1). Каждому клиенту необходимо индивидуально настроенное приложение, которое можно запускать независимо друг от друга. (JDBC, JMS, возможность перезапустить одно приложение) Запуск одной виртуальной машины предпочтительнее, так как запуск 100 JVM, каждая из которых использует 750 МБ ОЗУ, не является хорошей идеей.

До сих пор я тестировал следующие решения, но, к сожалению, ни одно из них не отвечало моим требованиям:

  1. Развертывание приложения на отдельных доменах. Это решение было недостаточным из-за использования JVM Ram и сложности запуска нескольких консолей управления на нескольких портах (нам не нужно такое большое разделение)

  2. Развертывание приложения в нескольких экземплярах (именованные цели на Glassfish) в одном домене. Этого решения было недостаточно, поскольку оно создает отдельный процесс JVM для каждого экземпляра и потребляет слишком много оперативной памяти (несколько сотен МБ для каждого экземпляра). В противном случае это было ближе всего к тому, что нам нужно.

  3. Развертывание приложения на нескольких виртуальных хостах в одном экземпляре. Это решение было неприемлемым, поскольку в Glassfish каждый виртуальный сервер не имеет отдельной конфигурации.

Кто-нибудь может подсказать, каков наилучший метод / рекомендацию по использованию GlassFish для размещения нескольких экземпляров приложения? Мы «обречены» зарезервировать 1 ГБ оперативной памяти на одного клиента? Исходя из среды IIS, у нас были отдельные пулы приложений, каждый из которых использовал 3-5 МБ ОЗУ при запуске.


UPDATE

О моей зависимости и совместном использовании в моем приложении: В идее, которую я хочу реализовать на сервере Glassfisf, каждое приложение нуждается в отдельных ресурсах (JMS и JDBC). Это не проблема, я могу настроить его для каждого приложения, даже для виртуальных хостов, включенных в одном экземпляре (я могу распознать виртуальный сервер, получив имя сервера из запроса Http, и подготовить отдельные ресурсы и файлы конфигурации в каталоге экземпляра, чтобы применить конфигурацию к этому конкретному виртуальный сервер).

Мои «требования независимости»:

  1. Мне просто нужно иметь возможность развертывать несколько приложений на одном экземпляре Glassfish и запускать их в отдельных процессах Java, но на одной виртуальной машине Java.
  2. Мне нужно иметь возможность запускать / останавливать каждое приложение независимо друг от друга.
  3. Мне нужно иметь возможность перезагрузить одно и другое приложение, пока остальные приложения должны оставаться активными (в IIS эта опция называется «перезаписывать пул приложений»).
  4. В случае ошибки в одном приложении она не должна влиять на другие клиентские приложения на том же сервере / экземпляре. Другие приложения должны работать (конечно, когда эта ошибка не портит весь Java vm).

Возможно ли реализовать эту идею на одном экземпляре Glassfish с сотнями развернутых приложений (включенных на экземпляре / виртуальном хосте)? Может быть, развертывание приложений под разными именами (как описано здесь: home.java.net/node/676678) может быть хорошим решением в моем случае? У кого-нибудь есть опыт развертывания таким образом сто раз одного и того же приложения с разными конфигурациями?

Спасибо

Ольгерд

1 Ответ

1 голос
/ 17 февраля 2012

если вы используете стек GF 3, вы заметите, что этот продукт был подвергнут рефакторингу для использования преимуществ архитектуры OSGi. Поэтому теперь вы можете развертывать пакеты или даже файлы .wab (пакеты веб-приложений) в GF3.Эта архитектура позволит Вы:

  • управление версиями различных модулей
  • для остановки / перезапуска приложений самостоятельно
  • , чтобы обеспечить общие пакеты для ваших приложений, избегая тратить пространство перманентного пространства ...

Но в вашем вопросе я не могу понять, как моделировать разные процессы с помощью одной виртуальной машины Java .... Одна виртуальная машина означает 1 процесс (на уровне ОС), и вы ничего не можете сделать против этого ..

Платформа OSGi дает вам множество преимуществ в отношении требований SLA для ваших приложений и модульности программного обеспечения ... НТН Джером

...