Дебаты об отличном сервере приложений Java c Tomcat, Jboss, GlassFish, Jetty и Liberty Profile. Часть вторая

https://zeroturnaround.com/rebellabs/the-great-java-application-server-debate-with-tomcat-jboss-glassfish-jetty-and-liberty-profile/
  • Перевод
Всем доброго! Как и обещали, вторая часть перевода статьи по теме Java EE. Первую часть можно увидеть тут.

ОПЕРАЦИЯ ПОД ПРИКРЫТИЕМ

Надеемся, вы не только сейчас поняли, что бюджет равен 0, и вообще вас покорил WebLogic ;) До сих пор, мы рассматривали темы, значимые на начальных этапах, во время изучения серверов приложений. Теперь же посмотрим чуть глубже на каждый сервер, чтобы понять, отвечает ли он реальным задачам разработчика:

  • Настоящие показатели производительности;
  • Функционал и Соответствие Open Standards;
  • Администрирование и Управление/UI;
  • Стоимость $$$/Лицензия.

Читайте дальше, уже скоро мы определим, какой сервер приложений лучший из лучших!

Настоящие показатели производительности

Знали ли вы, что Lamborghini Gallardo LP570-4 Superleggra 2011 г. выпуска разгоняется от 0 до 60 км/ч всего за 2.8 с, а Dodge Viper Hennessey Venom GT делает это за целых 2.9 с? Думаю, водителям Viper ооочень скучно ждать, пока их машина разгоняется до 60!



Не будем придираться, 0.1 секунды не изменят мир, и среднестатистический водитель не заметит разницы. Для них всех они будут разгоняться идиотски-супер-быстро.

Аналогично, разработчик не будет выбирать сервер приложений за то, что он запускается на 0.2 секунды быстрее, да или даже на полсекунды — впечатления от этого не изменятся. Поэтому мы будем оценивать серверы на основании полноценного опыта, получаемого разработчиками в этом разделе. Во-первых, приложения, которые мы используем в тестах на производительность, проверены времени: Spring PetClinic, на котором мы показывает демо JRebel, и приложение Jenkins.

PetClinic — веб-приложение, использующее Сервлеты, JSP и кучу POJO. Там же есть Hibernate, JPA, интеграционный код JDBC и HypersonicSQL DB. Приложение весит не больше 20MB. Jenkins в представлении не нуждается, очень популярный CI фреймворк, которым с удовольствием пользуются многие. Веб-приложение занимает чуть меньше 55MB, содержит spring фреймворк и множество веб артефактов.

Тестовая конфигурация

Все тесты проводились на одном и том же ноутбуке MacBook Air. Характеристики: 8GB RAM (1600 MHz DDR3), 2GHz Intel Core i7 CPU. Сам HDD — 512 GB SSD, OSX 10.8.2. Используемый JRE:



Скорость запуска/перезапуска

Начнем со скорости запуска и перезапуска Мы тестируем пустой сервер, сервер с развернутым приложением PetClinic и сервер с установленным приложением Jenkins. И вот результаты:



**примечание — все результаты указаны в секундах**

Можно заметить, что серверы Liberty Profile и TomCat в два раза быстрее, чем серверы GlassFish и (на удивление) Jetty. Но все результаты более-менее в рамках приемлемых значений. Когда же мы запускаем сервер с приложением, все становится интересней: Liberty Profile продолжает удерживать низкое значение, а время, необходимое другим серверам, резко увеличивается. По выделенным значениям можно понять, что Liberty Profile всегда запускается в 2-4 раза быстрее конкурентов.



Если сравнивать каждое значение с лучшим в категории, чистую победу одерживает Liberty Profile, а неожиданно разочаровывают Jetty и GlassFish. JBoss старается держать позиции, но запуск приложения jenkins показывает плохой результат — на 11-15 секунд медленнее, чем Liberty Profile.

Время на деплой

Посмотрим на скорость развертывания в секундах, на примерах приложений petclinic и jenkins на каждом из серверов.



Можно увидеть разительное отличие Liberty Profile от остальных серверов, некоторые из которых он опережает в 6 раз.



Снова видим, что Liberty Profile опережает своих конкурентов, а JBoss опять не поладил с приложением Jenkins. В остальном, значения серверов схожи.

Что же делает Liberty Profile, чего не удается другим серверам? Даже точнее, чего Liberty Profile не делает… Стоит взглянуть на время инициализации приложений, чтобы лучше в этом разобраться.

Инициализация приложения



Большая часть серверов показывает достойное время, в то время как у Liberty Profile обнаруживается ленивая модель инициализации. Заметно, что при первом использовании очень много усилий по запуску/деплою направлены на более поздние этапы.



В среднем, видим, что JBoss и Tomcat показывают отличные значения, Jetty и GlassFish не отстают, а Liberty Profile поражает невыносимой инициализацией, которая длится на 14.5 секунд дольше среднего! Ай! Очевидно, наши серверы делают разные вещи в разное время, поэтому объединим эти метрики, чтобы увидеть полную картину:



Здесь мы видим, что значения для приложения petclinic, если смотреть в целом, не сильно различаются. Tomcat, Glassfish и Jetty сопоставимы по времени для двух приложений, с разницей всего в несколько секунд, в то время как Liberty Profile и JBoss тратят в два раза больше времени на приложение jenkins. Отметим, что Liberty Profile требуется 25 секунд на задачи, которые выполняются Tomcat за 11-12 секунд.



Значения JBoss не выглядят критичными с jenkins, а Liberty Profile есть к чему стремиться. Tomcat — победитель этой категории, затмивший своих конкурентов почти во всех задачах.



Функционал и соответствие открытым стандартам

Jetty

Сам Jetty, по большей части, представляет собой контейнер и поэтому в нем отсутствуют многие компоненты, необходимые для работы более серьезных приложений. Но для таких целей существует дистрибутив Jetty под названием “Hightide”. Дистрибутива для Jetty 9 пока нет, но можно воспользоваться Hightide для Jetty 8. Jetty Hightide включает в себя JNDI, JMX, аннотации и интеграции JEE. Даже несмотря на все эти крутые фичи, Hightide весит всего лишь 24MB. Jetty также можно встроить в веб-приложение. Так создается выполняемое веб-приложение, что во многом возможно благодаря размерам кодовой базы Jetty.

Оценка:



Причина: Включает WebSockets, Jetty Continuations, спецификацию Servlet 3.1 (почти готовая), но почти ничего кроме этого.


Tomcat

Функционал Tomcat не богат, и этим вынуждает разработчиков создавать собственные фичи на базе Tomcat. Но теперь появилась новая надежда в виде apache-проекта TomEE, выполняющего всю интеграционную работу и обеспечивая “полный Apache стек, направленный на сертификацию Java EE 6 Web Profile, в которой лидирует Tomcat”. В последней части заключается суть — проект стремится поддерживать опыт и производительность Tomcat на высшем уровне, предоставляя дополнительный функционал, который многие пользователи хотели бы видеть в оригинальной версии.

Из наиболее важных компонентов TomEE Web Profile (35.9MB) стоит отметить поддержку Bean Validation, CDI, EJB, JPA, JSF и JTA. Версия TomEE+ (55.2 MB) дополнительно включает поддержку Connector, JAX-RS, JAX-WS, JMS. Эти функции используют базовую инфраструктуру Tomcat, например, сервлеты теперь имеют доступ к JPA и Transactions, а EJB к Security. Любой ресурс, предоставленный Tomcat, скажем, из context.xml, можно найти любым управляемым компонентом системы. Круто! Как и в Jetty, функционал Tomcat довольно скудный, чтобы соответствовать требования Web Profile, но его достаточно для соответствия обычным веб-спецификациям. Вы можете выбрать добавляемые элементы самостоятельно, например, OpenEJB или Open JBA, но ограничиваться только ими необязательно.

Оценка:



Причина: Бедный функционал, поэтому большинство предпочитает использовать Tomcat только в качестве базы.

TomEE

Оценка:


Причина: Улучшает Web Profile с помощью оттестированных Open Source компонентов. Здорово!

JBoss

JBoss AS7 полностью совместим с EE6, и мы имеем в виду Full Profile: EJB, CDI, JPA, JSF, Jax-RS, Bean validation и тд. Он поддерживает OSGI 4.2, а в будущем и 4.3. С точки зрения Open Source совместимости, JBoss полностью совместим с Java EE. Сложно что-то добавить про JAXB, EJB, CDI — в любом случае все будет работать изящно. В то же время он совместим с OSGi версии 4.2, что позволяет использовать лучшее от обоих миров.

Оценка:



Причина: Полный EE6 профиль, поддержка OSGi. Круто!

Liberty Profile

Версия 8.5 поддерживает Web Profile не полностью — не хватает поддержки EJB и CDI. Зато есть поддержка приложений OSGi, на случай, если это ваша любимая технология.
Тем не менее, уже в бета-версии Liberty Profile 2013 года поддержка расширена и включает EJB, CDI, WebSevices и, что интересно, расширения продукта, что позволяет пользователям создавать собственный “функционал” в файле server.xml.

Оценка:



Причина: Поддержка Web Profile, OSGi, возможность добавлять собственный функционал.

GlassFish

Легкий раздел для сравнения для GlassFish — обладателя эталонной имплементации Java EE. Благодаря поддержка Open Source, как и JBoss, он полностью совместим с сервером Java EE, повторимся, это включает полный профиль: EJB, CDI, JPA, JSF, Jax-RS, Bean validation и тд. Кроме того, есть поддержка OSGi.

Оценка:



Причина: Полная поддержка JEE и OSGi. Круто!



Администрирование и Управление/UI

Jetty

Пожалуй, самый большой недостаток — отсутствие консоли управления, к который вы могли привыкнуть, используя другие серверы, например Tomcat (Tomcat Manager) или JBoss AS. Поэтому управление большими продуктовыми средами может быть слишком сложным, но, конечно, не в случае, когда вы пользуетесь инструментами вроде LiveRebel!

Оценка:



Причина: Управление возможно только с помощью скриптов/прямого изменения xml.

Tomcat



Tomcat предлагает приложение для администрирования под названием manager app. Но для начала Вам нужно настроить файл conf/tomcat-users.xml, чтобы обеспечить доступ к ролям (хорошая фича, которая открывает доступ к разным ролям для разных уровней администрирования). В manager app нет ничего особенного, просто базовый набор действий: от деплоя и изменения приложения до указания свойств ОС и JVM.

Оценка:



Причина: Простой, ограниченный функционал, консоль в стиле 80х, нужно настраивать xml для добавления пользователя еще до использования консоли управления.

JBoss



Веб-консоль выглядит прилично, особенно в сравнении с приложением Tomcat. В ней можно настраивать источники данных, веб-серверы, OSGi, параметры JVM, JPA с транзакциями и многое другое. Большой выбор и высокая скорость работы консоли. Если JBoss не удалось при перезапуске применить изменения, внесенные в веб-консоль, он выдаст сообщение, оповещающее об этом, чтобы вы не гадали, почему ничего не поменялось.

Оценка:



Причина: Высокое качество администрирования, информация на перезагрузке/перезапуске, нужно настроить пользователей перед использованием, гибкая настройка функционала, современная.

Liberty Profile

Немного разочаровывает. В Liberty Profile нет административной консоли для обновления конфигурации сервера, установки приложений и тд, так что вы застрянете в редакторе eclipse, обновляя server.xml.



Есть веб-приложение под названием Liberty Profile Admin UI Tech Preview, доступное для бета-загрузки. На первый взгляд, оно обладает только предельно базовым функционалом, выглядит и ощущается как мобильное приложение, что не очень подходит для браузерного доступа.

Оценка:



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

GlassFish

GlassFish предлагает два способа управления сервером или кластером серверов: утилита asadmin или веб-версия административной консоли, которая по умолчанию доступна в порте 4848 и представляет собой простой и дружелюбный инструмент для внесения серверных изменений. Для изменения значения HTTP порта нужно обновить слушателя сети. GlassFish использует сетевых слушателей для соединения с внешним миром, в том числе для HTTP соединений. Самый простой способ изменить HTTP порт лежит через административную веб-консоль:



Вау, это было просто! Сервер GlassFish выглядит большим и промышленным, но его модульная архитектура позволяет вносить почти все изменения без перезапуска! Мы сохранили новое значение HTTP порта и теперь оно работает. Можно создавать разные конфигурации и применять их на разные серверы или кластеры. Очень DevOps-направленный способ, на мой взгляд.

Оценка:



Причина: Чистая административная консоль, без чрезмерных сложностей, гибкая настройка функционала, возможно чуть устаревшая, но недостаточно для снижения оценки.



Стоимость $$$/Лицензия

Все серверы, о которых здесь идет речь, являются бесплатными для использования в среде разработки. Поэтому не должно удивлять, что стоимость — не просто изначальные затраты в долларах. Нужно помнить о поддержке поставщика и/или сообщества в случаях, когда что-то идет не так, времени и силах, потраченных на инфраструктуру, включая улучшение функционала на сервере приложений, тестирование и будущие обновления. Ниже представлен взгляд на стоимость каждого сервера (минимальные цены взяты с учетом минимальных настроек):



$$$ — эти серверы взимают плату за использование в производстве, но это не та вещь, которую вы покупаете в супермаркете, поэтому их структура ценообразования может вызвать головную боль. Ориентир по цене был добавлен там, где это оказалось возможным, но для тех, у кого остались вопросы по среде, мы добавили ссылки с ценами на продукт, вместо того, чтобы писать вводящие в заблуждение числа.

Jetty

Jetty совсем невесомый, поэтому все что вы прикрутите к нему будет поддерживаться вашей командой фреймворка. Hightide в Jetty 9 предлагает больше функций, чем может пригодиться. Jetty 9 (так же как и 7 и 8) обладает двойной лицензией Apache License 2.0 и Eclipse Public License 1.0. Он является бесплатным для коммерческого использования и распространяется на условиях любой лицензии, за исключением случаев, указанных в файле NOTICE.

Оценка:



Причина: Лицензия отличная и бесплатная! Что еще можно просить!

JBoss

JBoss AS — open-source продукт, лицензированный под LGPL, поэтому его можно использовать и в разработке, и в производстве. А в связи с его полным EE6 профилем, многие вещи будут работать лучше, чем самодельный суп из библиотек для поддержки EE стека. А если вы предпочитаете еще более стабильные релизы и наличие поддержки, можно выбрать EAP распространение. Стоимость JBoss EAP зависит от количества CPU в год.

Оценка:



Причина: Бесплатный для разработки, но официальная поддержка платная.

Liberty Profile

В IBM все давно упаковано, отправлено и оттестировано, поэтому обслуживание необходимо минимальное. А если вы купите и решите развертывать в производство, у вас всегда будет возможность обратиться в поддержку, если что-то пойдет не так. Прочитав лицензию от начала и до конца, во время установки, дважды, вы узнаете, что не существует лицензии, позволяющей использовать Liberty Profile в целях любительской разработки. Запустить сервер приложений для личного проекта не удастся, потому что лицензия Liberty Profile этого не позволяет: о( Тем не менее, это не должно на многое повлиять, потому что в этом обзоре мы смотрим на все с точки зрения разработчика.

Оценка:



Причина: Лицензия недостаточно гибкая для хобби-использования вне некоммерческой разработки, но подходит для разработчиков, бесплатная в этих целях.

GlassFish (Open Source Edition)

GlassFish Open Source Edition обладает лицензией CDDL, то есть он бесплатный для использования в разработке и производстве. CDDL лицензия дает больше свободы, чем лицензии, основанные на GPL и BSD, а значит пользоваться GlassFish безопасно и в серьезных проектах. При желании получить больше поддержки и быстрых багофиксов, можно перейти на Oracle GlassFish Server, обладающий лучшими инструментами управления. GlassFish обладает полной имплементацией JEE, и поэтому не требует чрезмерного обслуживания, как в случаях с Tomcat и Jetty.

Оценка:



Причина: В бесплатной версии есть почти все, что нужно, с дружелюбной лицензией и совершенно бесплаааааатно!



THE END

Как всегда ждём комментарии, вопросы тут или на нашем Дне открытых дверей.
Отус 176,57
Профессиональные онлайн-курсы для разработчиков
Поделиться публикацией
Комментарии 7
  • +1
    бета-версии Liberty Profile 2013 года

    На дворе почти 2018 год. В LP давным-давно есть и поддержка и CDI, и WebServices, и EJB последние. И даже web-ui в виде AdminCenter-а.
    Что качается лицензий — есть OpenLiberty
    • +1

      Я очень уважаю компанию ZeroTurnaround вообще и их статьи в частности. Они реально молодцы. А вот перевод настолько старых статей — нет. Это вводит публику в сильное заблуждение. Сейчас технологии ускакали очень далеко вперёд. И есть сильное подозрение, что текущее соотношение сил тоже отличается очень сильно.

      • 0
        На самом деле расклад особо не отличается, несмотря на разницу в технологиях. Во всяком случае в первом приближение оно выглядит именно так: радиальной разницы нет.
      • +1

        1 миля != 1 км. 0-60 это в милях, что соответствует примерно 0-97 км/ч. И тут разница уже не в 0.1 секунды.


        Хотя… Вы прекрасно продемонстрировали "финт ушами" для правильной оценки производительности.

        • +1
          Какого года статья?
          Java EE6, 1,7_21
          • +1
            Честно говоря, странный подход, мерить время старта сервера приложений.
            В каких реальных кейсах в проме это может быть важнее, чем прочие критерии (время отклика, потребление cpu, ram, io, и т.д.)
            • +1

              Да не тот критерий на который наверно стоит много завязывать.
              Но! Скорось старта важна по двум основым причинам..


              • Если писать на этом (микро)сервисы которые "дышат"… (Стартуются при пиках нагрузки и убиваются при малой), да и просто могут упасть не вовремя — скорость старта важнецкая вещь. К томуже есть такие команды, которые выкатывают приложени несколько раз в день в продакшн… (Да JEE в/для другой реальности писался я в курсе).
              • Feedback-цыкл быстрее в том случае если сервер стартует на машине разработчика или в автоматизированных тестах...

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

            Самое читаемое