FORESIGHT Pro

Сервер приложений Jetty

Jetty Server - контейнер сервлетов javax.servlet, реализующий спецификацию Servlets 3.1 и предоставляющий функциональность J2EE, функциональность http сервера и http клиента.

 

Архитектура сервера

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

 

 

1

Рисунок 1. Высокоуровневая архитектура сервера

 

Jetty имеет гибкую компонентную архитектуру. Это позволяет интегрировать и использовать его в самых разных областях:

  • Мобильные устройства;
  • Серверные кластеры;
  • Программные библиотеки - OSGi Equinox, OSGi Felix, Spring, Plexus, Cocoon, Tapestry, Maven, Continuum, Fisheye, Grails, JRuby, Xbean, и т.д.
  • Сервера приложений J2EE: Geronimo, Jboss, Sybase EAServer, JOnAS, Glassfish;
  • Приложения и сервисы производства крупнейших вендоров IBM, HP, Cisco, BEA, Yahoo, Eclipse;
  • И др.

 

Спецификации сервлетов с каждым годом все усложняются, расширяя функциональность в сторону добавления новых функций, аннотаций, Web-сервисов, в связи с чем вырастает и стоимость стандартного сервлетов-контейнера. Jetty полностью реализует все стандарты и будет ориентироваться на них в будущем, однако, модульность сервера позволяет разворачивать только необходимый набор сервисов, исключая все ненужное.


Эффективность работы сервера


Jetty имеет хорошие показатели производительности, которые позволяют использовать инструмент в качестве сервера приложений практически в любом Web-приложении (мелкого и среднего масштаба).
Jetty - масштабируемый инструмент, способный оптимизироваться для многих соединений, со значительным временем простоя между запросами. Экономное использование памяти и широкое применение NIO, позволяет Jetty обслуживать большее количество пользователей на единицу свободной памяти. Экономия кэш-памяти контейнером сервлетов означает, также, что больший ее объем доступен для ускорения выполнения приложений.
Jetty имеет высокую производительность при обслуживании статического контента. Так, данный сервер приложений может использовать отображаемые в память файлы в сочетании с NIO, чтобы поручить операционной системе отправку содержимого файлов на максимальной скорости без использования пользовательской памяти и JVM.


Ключевые особенности сервера приложений


Jetty реализует в своей основе спецификацию Servlets 3.1, поддерживает JSP 2.3, SPDY, Web Sockets, OSGi, JMX, JNDI, JASPI, AJP.
Лицензируется по программе Apache License, Version 2.0 и Eclipse Public License 1.0.


Jetty vs Tomcat?


Сервера приложений Jetty и Tomcat весьма схожи, однако, при ближайшем рассмотрении, архитектуры двух серверов сильно разнятся.
Исторически при создании инструментов преследовались немного разные цели – Tomcat создавался прежде всего, как сервер приложений, Jetty же имел чуть более сложную и гибкую компонентную структуру с широкой областью применения.
По умолчанию Tomcat устанавливается в системе и служит контейнером для установки в него других приложений. Теоретически, он, конечно также может быть использован как основа для полноценного J2EE сервера, но данные манипуляции сложны и необоснованно ресурсозатратны.
Jetty же может быть установлен как отдельный сервер приложений, или может быть встроен в приложение или библиотеку в качестве простого компонента обслуживания HTTP, или сервлетов, как полнофункциональный контейнер сервлетов, или даже стать частью полноценной J2EE среды. Сервер Tomcat, к сожалению, не может похвастаться подобной гибкостью в использовании.
С другой стороны, сервер Tomcat имеет чуть более высокие показатели производительности при единовременном использовании нескольких очень нагруженных соединений, при этом выдавая меньший промежуток времени между обработками запросов. Данные характеристики становятся полезными, когда много запросов/ответов приходит через одно соединение без достаточных пауз.

Оба сервера поддерживают упрощенную миграцию данных на сервера Geronimo, JBoss, и, в некоторой степени, Glassfish. Jetty также поддерживает миграцию на Jonas, Sybase EAServer.


Резюме


Нередко важную роль в качестве критерия выбора интеграционной платформы выступает положение на рынке. Исторически доминирующий на рынке Tomcat ныне уступает свои позиции Jetty, доля которого неуклонно растет.
Tomcat является качественным продуктом с известным именем, огромной пользовательской базой. Однако, это лишь контейнер сервлетов, а не сервер приложений, проекту не хватает гибкости в качестве компонента программного обеспечения. С другой стороны, для многих разработчиков Tomcat до сих пор является эталонной реализацией JavaEE, на котором, если программа написана правильно, то она точно заработает.
Проект Jetty имеет богатый опыт реагирования на изменяющиеся требования и стандарты. Платформа, в основу которой ляжет сервер Jetty, может быть встроена и развернута практически в любой среде. Сообщество Jetty с каждым годом, растет, энергично развивается, а также активно поддерживается Eclipse, Maven. Поэтому, если перед разработчиками стоят нетривиальные задачи, с необходимостью быстрого масштабирования среды, развертывание Jetty в качестве интеграционной платформы будет наиболее подходящим вариантом. Естественно с поправкой на масштаб развертываемой среды – для сложных многокомпонентных интеграционных приложений лучше использовать сервера приложений от Oracle или IBM WebSphere.


P.s. В статье использованы материалы с сайта www.eclipse.org, а также оригинальной статьи Jetty vs Tomcat: A Comparative Analysis. Greg Wilkins.