Подтвердить что ты не робот

Совет развертывания военных файлов против исполняемого банку со встроенным контейнером

Кажется, что в java-пространстве существует тенденция к тому, чтобы отказаться от развертывания веб-приложений Java в контейнере сервлетов Java (или сервере приложений) в виде военного файла (или файла уха) и вместо этого разместить приложение как исполняемый банку со встроенным сервером/HTTP-сервером, таким как причал. И я имею в виду это в большей степени тем, что новые структуры влияют на то, как новые приложения разрабатываются и развертываются, а не как приложения доставляются конечным пользователям (потому что, например, я понимаю, почему Jenkins использует встроенный контейнер, очень легко захватывать и уходить). Примеры фреймворков, использующих вариант исполняемого флага: Dropwizard, Spring Загрузка и Play (ну, он не запускается в контейнере сервлета, но HTTP-сервер встроен).

Мой вопрос: исходя из среды, в которой мы развернули наши приложения (вплоть до этой точки в основном Struts2) на один сервер приложений tomcat, какие изменения, передовые методы или соображения необходимо сделать, если мы планируем использовать подход с встроенным контейнером? В настоящее время у нас есть около 10 домашних приложений, работающих на одном сервере tomcat, и для этих небольших приложений возможность совместного использования ресурсов и управления на одном сервере хороша. Наши приложения не предназначены для распространения среди конечных пользователей в среде. Однако, продвигаясь вперед, если мы решаем использовать более новую структуру java, должен ли этот подход измениться? Является ли переход к исполняемым банкам, вызванным растущим использованием облачных развертываний (например, Heroku)?

Если у вас есть опыт управления несколькими приложениями в стиле воспроизведения развертывания по сравнению с традиционным развертыванием военного файла на одном сервере приложений, пожалуйста, поделитесь своим пониманием.

4b9b3361

Ответ 1

Интересный вопрос. Это только мой взгляд на эту тему, поэтому возьмите все с солью. Я иногда использовал и управлял приложениями, используя как контейнеры сервлетов, так и встроенные серверы. Я уверен, что по-прежнему существует много веских причин для использования контейнеров сервлетов, но я попытаюсь просто сосредоточиться на том, почему они менее популярны сегодня.

Краткая версия: контейнеры сервлетов отлично подходят для управления несколькими приложениями на одном хосте, но не кажутся очень полезными для управления только одним приложением. В облачных средах одно приложение на виртуальную машину кажется предпочтительным и более распространенным. Современные рамки хотят обладать совместимостью, поэтому переход на встроенные серверы.


Поэтому я считаю, что облачные сервисы являются основной причиной отказа от контейнеров сервлетов. Подобно тому, как контейнеры сервлетов позволяют управлять приложениями, облачные службы позволяют управлять виртуальными машинами, экземплярами, хранилищем данных и многое другое. Это звучит сложнее, но с облачными средами произошел переход на отдельные машины для приложений. Это означает, что вы можете часто обрабатывать всю машину, как приложение. Каждое приложение работает на машине с соответствующим размером. Облачные экземпляры могут всплывать и исчезать в любое время, что отлично подходит для масштабирования. Если для приложения требуется больше ресурсов, вы создаете больше экземпляров.

Выделенные серверы, с другой стороны, обычно мощные, но с фиксированным размером, поэтому вы запускаете несколько приложений на одной машине, чтобы максимально использовать ресурсы. Управление десятками приложений - каждый со своими конфигурациями, веб-серверами, маршрутами и соединениями и т.д. - не забавно, поэтому использование контейнера сервлетов помогает сохранить все управляемое и само по себе. Тем не менее, это сложнее. Контейнеры сервлетов в облаке не кажутся очень полезными. Они должны быть настроены для каждого маленького экземпляра, не принося большого значения, поскольку они управляют только одним приложением.

Кроме того, облака прохладны, а облачные вещи скучны (если мы все еще верим в шумиху). Многие фреймворки пытаются масштабировать по умолчанию, так что их можно легко развернуть в облака. Встроенные серверы быстро развертываются и запускаются, поэтому они кажутся разумным решением. Контейнеры сервлета обычно поддерживаются, но требуют более сложной настройки.

Некоторые другие моменты:

  • Встроенный сервер может быть оптимизирован для фреймворка или лучше интегрирован с инструментами фреймворков (например, консоль воспроизведения).
  • Не все облачные среды поставляются с настраиваемыми машинными изображениями. Вместо написания сценариев инициализации для загрузки и настройки контейнеров сервлетов использование выделенного программного обеспечения для развертывания облачных приложений намного проще.
  • Мне еще предстоит найти установку Tomcat, которая не приветствует вас с ошибкой пространственного пространства perm каждые несколько повторных развертываний вашего приложения. Взятие немного дольше (перезапуск) встроенных серверов не представляет проблемы, когда вы можете почти мгновенно переключаться между этапами создания и производства без какого-либо простоя.
  • Как уже упоминалось в этом вопросе, для конечного пользователя очень удобно просто запустить приложение.
  • Встроенные серверы являются портативными и удобными для разработки. Сегодня все быстро, прототипы и MVP должны быть созданы и поставлены как можно быстрее. Никто не хочет тратить слишком много времени на создание среды для каждого разработчика.