Лучшая стратегия развертывания приложений PlayFramework?

Этот вопрос ориентирован на сервер. У меня есть хостинг-сервер (довольно маленький, 1,6 ГГц, 2Go, 200 GO) с несколькими (4 или 5) игровыми приложениями и более подходящими. Большинство из этих приложений имеют реальное малое использование, скажем, сто запросов в день каждый.

  • Лучше ли развертывать каждое из этих приложений с помощью встроенного сервера Play! и, следовательно, использовать 64 МБ памяти для каждого приложения?

  • Или разверните Tomcat со всеми приложениями внутри tomcat? С большой памятью, доступной всем приложениям?

EDIT:

Я добавлю немного дополнительную информацию о моей ситуации. На сервере также находятся:

  • Около 10,15 PHP веб-сайтов на Apache2
  • Сервер SVN, проходящий через Apache mod_dav_svn
  • Tomcat, используемый для Sonar
  • Автономная установка Jenkins (через Jetty)

Мой первоначальный план состоял в том, чтобы развернуть все эти вещи в Tomcat. Наличие приложений, Sonar и Jenkins, работающих на Tomcat и Apache2 для статических ресурсов. (Изображения, скрипты)

К.П

В последнем случае я знаю, что наличие Sonar и Jenkins, систем непрерывной интеграции в производственной среде не является оптимальным. Но поскольку они работают только ночью (автоматические сборки), они не перегружают систему. Кроме того, я студент, в финансовом отношении дополнительный сервер "CI/build" не входит в мои финансовые возможности.

Ответ 1

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

Почему это, а не Tomcat? Вы можете начать с этой статьи, которая сравнивает производительность. Дополнительным аргументом будет то, что Tomcat загружает всю среду Java EE, которую Play не требует и не использует, потребляя память и ресурсы, которые вы хотите бесплатно для своих приложений (особенно, если вы используете кэширование в памяти).

В Nginx как обратный прокси, this должен дать подсказку, почему использовать его вместо Apache.

ИЗМЕНИТЬ (по вопросу редактирования):

В вашей ситуации вы можете оптимизировать свои ресурсы.

Сначала замените Apache 2 на Nginx. Nginx может служить PHP, достаточно хорошо (если вы используете Ubuntu, см. this). Он будет работать с Play очень эффективно и может использоваться как прокси-сервер для серверов Java.

Затем вы можете перенести все свои Java-приложения на Jetty и избавиться от Tomcat. Jetty потребляет меньше ресурсов в среднем, и даже если ваши приложения будут работать только ночью, сервер все еще работает в сети и накапливает RAM. Чем меньше он, тем лучше.

Как насчет SVN? К сожалению, вам понадобится Apache 2 и Nginx в качестве обратного прокси-сервера для Apache 2. Почему бы не сохранить Apache? Аргументом будет использование. Теоретически приложения PHP будут иметь больше трафика, чем сервер SVN, что делает более актуальным потребление ресурсов у них. С nginx, ram и cpu, выделенные для обслуживания PHP, будут меньше делать вашу машину более отзывчивой. Apache будет действовать только при использовании SVN, который будет не так часто.

Если вы не хотите прикладывать усилия к перемещению материала в Nginx (что я могу понять), просто переместите приложения Java в Jetty и используйте Apache 2 в качестве обратного прокси для Play. Но используйте Play embedded server, не загружайте приложение в Tomcat. Это будет более эффективно.

Ответ 2

Производственные развертывания, которые я запускаю, используют встроенный сервер Play. Это делает жизнь проще, чем Tomcat, особенно передислоцировать - я запускаю серверы под экраном, а обновление состоит из "Ctrl-C", "Up-Arrow", "Enter", выполнение:

% git stash; git pull; git stash apply; play run

С 2G памяти я не стал бы слишком беспокоиться о накладных расходах. Это, безусловно, цена, которая стоит заплатить, чтобы избавиться от сложностей Tomcat.

(git stashing позволяет мне иметь не-w21 > -конфигурированные конфиги, лежащие вокруг на производстве, - больше лень, чем необходимость, -:))

Ответ 3

Я бы начал для каждого приложения игровым сервером. Это проще в конфигурации и проще иметь отдельные лог файлы. Кроме того, вы можете перезапустить каждое приложение отдельно без проблем. Повторное развертывание на tomcat часто представляет собой работу с результатами ошибок.

Недостаток: вы должны настроить обратный прокси, например lighttp, для получения хороших URL-адресов, таких как mydomain.org/app1 и mydomain.org/app2