 |
Технология Клиент-Сервер 2007'4
|
|
Java EE встречает Web 2.0
Авторы: Константин Плотников (cap@isg.axmor.com)
Axmor
Артем Папков (artem@us.ibm.com)
IBM
Джим Смит (jamessmi@us.ibm.com)
IBM
Опубликовано: 21.10.2008
С использованием платформы Java ЕЕ создано множество удачных корпоративных приложений. Но принципы, на которых основывается Java EE, не рассчитаны на эффективную поддержку приложений Web 2.0. Глубокое понимание расхождений между принципами Java EE и Web 2.0 поможет вам принять обоснованные решения об использовании подходов и средств, способных до некоторой степени преодолеть эти расхождения. Эта статья объясняет, почему Web 2.0 и стандартная платформа Java EE являются проигрышной комбинацией, и демонстрирует, почему асинхронная, управляемая событиями архитектура лучше подходит для приложений Web 2.0. Здесь также описываются фреймворки и API, которые пытаются приспособить платформу Java к Web 2.0 с помощью асинхронного дизайна.
Принципы и допущения Java EE
Платформа Java EE была создана для поддержки разработки B2C- и B2B-приложений. Компании открыли для себя Интернет и начали использовать его для улучшения существующих бизнес-процессов. Их приложения часто взаимодействовали с существующими корпоративными интегрированными системами (enterprise integration system, EIS). Примеры использования в наиболее распространенных тестах, измеряющих производительность и масштабируемость Java EE-серверов – ECperf 1.1, SPECjbb2005 и SPECjAppServer2004 (см. Ресурсы) – отражают эту направленность на B2C, B2B и EIS. Аналогично, стандартный демонстрационный пример Java PetStore является типичным приложением для электронной торговли.
Тесты отражают много явных и неявных допущений о масштабируемости Java EE-архитектуры:
- Пропускная способность запросов - самая важная характеристика, влияющая на производительность с точки зрения клиентов.
- Длительность транзакции – наиболее важный фактор в производительности, и общую производительность приложения можно повысить, уменьшая продолжительность используемых им индивидуальных транзакций.
- Транзакции, как правило, не зависят друг от друга.
- Большинство транзакций, за исключением долгоживущих, затрагивает всего несколько бизнес-объектов.
- Продолжительность транзакций ограничена производительностью сервера приложений и корпоративных систем, размещенных в том же административном домене.
- Стоимость сетевой связи (при работе с локальными ресурсами) вполне компенсируется пулами подключений.
- Длительность транзакции можно сократить, инвестируя в конфигурацию сети, аппаратуру и программное обеспечение.
- Контентом и данными управляет владелец приложения. В отсутствие зависимостей от внешних сервисов, наибольшие ограничения на доставку контента потребителю накладывает ширина канала.
Проблемы производительности и масштабирования
Изменение ландшафта в Web 2.0
Java EE встречает SOA
SOA + B2C + Web 2.0 = высокая латентность
Большая интерактивность
Высокая латентность и клиенты с узким каналом
Больше контента
Постоянные соединения
Более высокий риск Slashdot-эффекта
Проблемы латентности
Асинхронный путь
Преимущества асинхронных API: модель-прототип
Общие решения
Параллелизм по требованию и неблокирующий ввод/вывод (NIO)
Staged event-driven architecture (SEDA)
Язык программирования Е
Фреймворк AsyncObjects
Waterken's ref_send
Frugal Mobile Objects
Actor-ы в Scala
API для работы с сервлетами и вводом/выводом
JSR 203 (NIO.2)
Glassfish Grizzly NIO
Continuations в Jetty 6
Apache Tomcat 6 Comet API
JAX WS 2.0 и Apache Axis2 Asynchronous Web Service Client API
Заключение
Необходимость в асинхронных Java-компонентах уже признана, а область асинхронных приложений активно разрабатывается. Два основных открытых движка сервлетов (Tomcat и Jetty) предоставляют некоторую поддержку по крайней мере для сервлетов, чьим разработчикам приходится особенно трудно. Java-библиотеки начинают предоставлять асинхронные интерфейсы, у этих интерфейсов нет общей темы, и их трудно сделать совместимыми друг с другом из-за проблем с управлением потоками и других расхождений. Это создает потребность в контейнерах, способных содержать множество разных асинхронных компонентов от разных разработчиков.
Сейчас пользователи стоят перед выбором из вариантов, каждый из которых имеет свои достоинства и недостатки. Apache MINA – это пример библиотеки, предоставляющей поддержку некоторых популярных сетевых протоколов, и способной быть неплохим выбором, если требуется использовать эти протоколы. В Apache Tomcat 6 имеется хорошая поддержка паттерна взаимодействия Comet, что делает его хорошим выбором, если асинхронные взаимодействия ограничены этим паттерном. Если вы создаете приложение с нуля, и ясно, что от существующих библиотек оно особо не выиграет, хорошим выбором может быть фреймворк AsyncObjects, поскольку он предоставляет множество удобных интерфейсов. Этот фреймворк может пригодиться и для создания оберток для существующих библиотек асинхронных компонентов.
Пора уже создать JSR, посвященный созданию общего фреймворка асинхронного программирования на языке Java. Предстоит долгий путь интеграции существующих асинхронных компонентов в этот фреймворк и создания асинхронных версий существующих синхронных интерфейсов. С каждым шагом масштабируемость корпоративных Java-приложений будет улучшаться, и мы сможем ответить на вызовы, которые появятся в будущем. Постоянный рост населения интернета и продолжающееся проникновение сетевых сервисов в нашу повседневную жизнь обязательно предоставит нам массу таких вызовов.
Ресурсы
- Стандартные Java EE-бенчмарки ECPerf 1.1 (http://jcp.org/en/jsr/detail?id=131), SPECjbb2005 (http://www.spec.org/jbb2005/docs/WhitePaper.html) и SPECjAppServer2004 (http://www.spec.org/jAppServer2004/docs/DesignDocument.html).
- Блог Грега Уилкинса - http://blogs.webtide.com/gregw/2007/11/18/1195421880000.html
- "Ease the integration of Ajax and Java EE" (Patrick Gan, developerWorks, июль 2006) исследует потенциальное влияние введения AJAX-технологий в Java EE Web-приложения на полный жизненный цикл разработки – http://www.ibm.com/developerworks/java/library/j-ajaxee/.
- JSR 109: Implementing Enterprise Web Services определяет модель программирования и архитектуру рантайма для реализации Web-сервисов на Java - http://jcp.org/en/jsr/detail?id=109
- "Why Ajax Comet?" (Greg Wilkins, webtide, июль 2006) – описание паттерна Comet – http://www.webtide.com/downloads/whitePaperWhyAjax.html
- "The Slashdot Effect: An Analysis of Three Internet Publications", Stephen Adler, хороший обзор Slashdot-эффекта.
- "SEDA: An Architecture for WellConditioned, Scalable Internet Services" (Matt Welsh, David Culler и Eric Brewer, University of California, Berkeley) – хороший обзор SEDA и преимуществ асинхронного дизайна приложений – http://www.eecs.harvard.edu/~mdw/papers/seda-sosp01.pdf
- Закон Мура в Википедии – http://en.wikipedia.org/wiki/Moore's_law
- Сайт проекта Apache MINA – http://mina.apache.org/
- Сайт SEDA - http://www.eecs.harvard.edu/~mdw/proj/seda/
- ERights.org, домашняя страница языка программирования E - http://www.erights.org/
- AsyncObjects Framework Home Page - http://asyncobjects.sourceforge.net/
- Ref_Send на сайте http://waterken.sourceforge.net/.
- "Frugal Mobile Objects", Benoit Garbinato и др., описывает фреймворк Frugal Mobile Objects – http://infoscience.epfl.ch/search.py?recid=83555
- Язык программирования Scala – http://www.scala-lang.org/
- "Actors that Unify Threads and Events" (Philipp Haller и Martin Odersky, январь 2007) описывает поддержку параллелизма в последних версиях Scala.
- JSR 203: More New I/O APIs for the Java Platform ("NIO.2") Определяет APIs для доступа к файловой системе, масштабируемым асинхронным операциям ввода/вывода, связывания сокетов и каналов, конфигурирования и направленных дейтаграмм – http://lamp.epfl.ch/~phaller/doc/haller07coord.pdf
- "Grizzly NIO Architecture: part II" (http://weblogs.java.net/blog/jfarcand/archive/2006/02/grizzly_part_ii.html) и "Grizzly part III: Asynchronous Request Processing (ARP)" (http://weblogs.java.net/blog/jfarcand/archive/2006/02/grizzly_part_ii.html), Jean-Francois Arcand, java.net, февраль 2006), описание архитектуры Grizzly.
- JETTY Continuations – http://docs.codehaus.org/display/JETTY/Continuations
- Apache Tomcat 6.0: Advanced IO and Tomcat, описание NIO HTTP-коннектора для Apache Tomcat, http://tomcat.apache.org/tomcat-6.0-doc/aio.html
- Apache Axis2 Advance User's Guide, обзор поддержки асинхронных вызовов Web-сервисов в Axis2 – http://ws.apache.org/axis2/1_1_1/adv-userguide.html
- "Asynchronous Web Service Invocation with JAX-WS 2.0." (Young Yange, java.net, сентябрь 2006 обзор поддержки асинхронных вызовов Web-сервисов в JAX-WS 2.0 - http://today.java.net/pub/a/today/2006/09/19/asynchronous-jax-ws-web-services.html
Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы
то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских
прав.
........................
"С полным содержанием данной статьи можно ознакомиться в печатной версии журнала"
Copyright © 1994-2016 ООО "К-Пресс"