2017-02-06 3 views
2

Наша будущая архитектура должна двигаться в сторону докеров/микросервисов. В настоящее время мы используем JBoss EAP 6.4 (с возможностью обновления до EAP 7) и Tomcat.Какой контейнер для контейнеров лучше подходит для контейнера Docker?

По моему мнению, контейнер JEE слишком тяжелый (медленный, больше памяти, более высокий уровень обслуживания и т. Д.) Для среды микросервисов. Однако мне сказали, что EAP 7 довольно быстр и легковес и может использоваться для разработки микросервисов. Каков ваш вклад в решение EAP 7 vs Tomcat 8 для докеров/микросервисов? Стоимость и скорость будут рассматриваться.

+0

Возможно, может быть помощь http://wildfly-swarm.io например https://github.com/wildfly-swarm/wildfly-swarm-examples/tree/master/docker/docker-jaxrs –

ответ

3

Помимо использования традиционных серверов приложений, которые на самом деле не такие тяжелые, вы можете попробовать различный аромат Java EE, называемый микроконтейнерами.

Java EE - это всего лишь набор стандартов. Стандартные результаты в спецификации API, и каждый из них может свободно выполнять спецификацию. Сервер приложений (AS) - это, в основном, тонко настроенная коллекция этой функции. Эти API не были воплощены в жизнь без причины. Они представляют собой функции, обычно используемые в проектах. Сервер приложений можно рассматривать как «кураторский набор» этих функций. Такой подход имеет много преимуществ - у AS много пользователей, поэтому он хорошо тестируется с течением времени. Проводка функциональных возможностей может привести к ошибкам.

Как бы то ни было, наступил новый век, где с помощью Docker приложение выполняет свои зависимости с ним. Потребность в полномасштабном сервере приложений со всеми функциональными возможностями, готовыми для обслуживания приложений, во многих случаях больше не требуется. В прошлом сервер приложений точно не знал, какие службы потребуют развернутые приложения. Таким образом, все было в комплекте. Некоторые из более инновационных AS, таких как WildFly, создавали экземпляр только необходимых услуг. Кроме того, существуют профили Java EE, которые немного упростили сервер приложений монолита.

В настоящее время мы обычно отправляем приложение вместе с его зависимостями (JDK, libraries, AS) внутри Docker - или мы туда направляемся. Поэтому попытка собрать точно правильное количество является логичным выбором. Но, и это «большой, но», потребность в функциональности AS по-прежнему актуальна. По-прежнему хорошей идеей является разработка общей функциональности на основе стандартов и общих усилий. Похоже, что это уже не вариант распространения его как одного большого пакета, потенциально оставляющего большинство API неактивными. Эта работа имеет много имен, будь то микроконтейнеры, uberjar создатели ...

Есть сервер Java EE так свет сомнительно, чтобы использовать что-нибудь остальное. * Spring Boot не основан на Java EE и в конфигурации по умолчанию, приведенной в руководстве Getting Started, Tomcat используется внутри.

Ключевым моментом является то, ваше приложение Java EE должна быть разработана в качестве самостоятельного приложения Java EE. Обертывание его «достаточной» функциональностью делегируется на эти микро решения. Это, по крайней мере, по моему скромному мнению, правильный путь. Таким образом, вы сохраните совместимость как с полноразмерными AS, так и с микрорешениями. Uber-jar, содержащий все зависимости, может быть создан во время или после процесса сборки.

WildFly Swarm или Payara Micro могут «сканировать» приложение, выполняя только необходимые сервисы.Для реального приложения объем памяти в производстве может составлять всего 100 МБ - для реального приложения. Это, вероятно, то, что вы хотите. Spring Boot может делать похожие вещи, если вам нужна Spring. Однако, по моему опыту, Spring Boot - much more heavyweight и голодная память, чем современная Java EE, потому что она, очевидно, имеет Spring внутри, поэтому, если вы используете seeking lightweigtness с точки зрения потребления памяти, попробуйте Java EE, особенно WildFly Swarm (или чистый WildFly) и Payara Микро. Это мои любимые AS, и они могут быть действительно, очень маленькими. Я бы сказал, что WildFly Swarm намного проще начать, Payara micro требует больше чтения, но предлагает интересную функциональность. Оба могут работать как обертка - вы можете просто обернуть свой текущий проект ими после фазы сборки, не нужно ничего менять.

Payara Micro even provides Docker images готовый к использованию! Как вы можете видеть, Java EE является зрелым и готовым к заселению Земли Докера :)

Одним из очень хороших и надежных ресурсов является Адам Бьен, например, в его Java EE micro/nanoservices video. Взгляни.

+0

Я бы добавил только, что , на мой взгляд, серверы приложений/микросерверы/все с более коротким циклом выпуска лучше в эпоху Docker. Разработчики, в отличие от админов, могут быстро и легко менять свои зависимости. Таким образом, обновленные версии с новейшими функциональными возможностями поступают в производство почти мгновенно :) WildFly - один из контейнеров с относительно коротким циклом выпуска, не уверен в других. –

+0

WildFly выпускает 2 раза в год, WF Swarm 12x в год, Payara 4x в год (12x для подписчиков на поддержку), TomEE 4x в год. В настоящее время у вас есть широкий выбор опций, если вам нужны короткие периоды выпуска. – OndrejM

+0

Это абсолютно движение вперед, так как у нас нет 1 основного релиза за 2 года. –

10

EAP7 vs Tomcat 8 - это старинный вопрос, ответивший несколько раз here, here и here.

Tomcat - это только веб-контейнер, где EAP7 является сервером приложений, который предоставляет все функции Java EE 7, такие как постоянство, обмен сообщениями, веб-службы, безопасность, управление и т. Д. EAP7 состоит из двух профилей - веб-профиля и полного профиля , Веб-профиль имеет большую версию триммера и включает в себя только соответствующие реализации, обычно требуемые для создания веб-приложения. Полный профиль, как и следовало ожидать, содержит полную славу платформы. Таким образом, использование веб-профиля EAP 7 поможет вам немного сократить раздувание.

С Tomcat вам нужно будет использовать что-то вроде Spring, чтобы принести эквивалентную функциональность и упаковать все соответствующие JAR-приложения с вашим приложением.

Эти обсуждения обычно полезны, когда вы начинаете новый проект и имеете ресурсы Java EE или Spring. Ниже приведены причины, по которым вы можете использовать EAP7:

  • Вы уже используете EAP 6.4. Переход на EAP 7 будет плавным. Использование Docker было бы совсем другим стилем упаковки ваших приложений. Все ваши существующие наблюдения, кластеризация, протоколирование будут продолжать работать. Если бы вы отправились с Tomcat, вам нужно будет изучить весенний способ делать что-то. Если у вас есть время и ресурсы, и вы готовы поэкспериментировать, вы тоже можете пойти по этому пути. Но подумайте, что вы хотите выиграть?
  • EAP 7 оптимизирован для развертывания контейнеров и облаков. В частности, он доступен как сервис с OpenShift, поэтому вы знаете, что он работает OOTB.
  • EAP 7 обеспечит достойное повышение производительности с точки зрения задержки и пропускной способности по EAP 6.4. Читайте https://access.redhat.com/articles/2607521 для более подробной информации.

Вы также можете рассмотреть TomEE. Они обеспечивают стек Java EE, интегрированный с Tomcat.

Другой вариант, так как @Federico рекомендуется, используйте WildFly Swarm. Затем вы можете начать настраивать, на каких участках платформы Java EE вы хотите. И ваша модель развертывания использует JAR-файл.

Что касается упаковки с использованием Docker, все они предоставляют базовое изображение, и вам нужно связать приложение с ним. Вот несколько важных соображений для использования Docker изображение для microservices:

  • Размер изображения Докер: Контейнер может неожиданно умереть или рамочный оркестровка может принять решение перенести его на другой хост. Больший размер изображения займет гораздо больше времени для загрузки. Это означает, что ваше предполагаемое время запуска службы будет больше для большего изображения. Это также означает, что динамическое масштабирование приложения займет больше времени, чтобы быть эффективным.
  • Время загрузки изображения: после загрузки изображения контейнер может запускаться быстро, но как долго требуется, чтобы приложение было «готово»?

Как личное замечание, я больше знаком с стекей Java EE, чем Tomcat/Spring, а WildFly по-прежнему является любимым сервером приложений.

Смежные вопросы