ОБЗОР СОВРЕМЕННЫХ WEB ТЕХНОЛОГИЙ ПОСТРОЕНИЯ ПРИЛОЖЕНИЙ СЕРВЕРНОЙ СТОРОНЫ
ID этой статьи:300 По материалам: <http://scitelclibrary.ru> (C) pale_rider@inbox.ru Добавил Крюков Дмитрий aka rius
При разработке
приложений серверной стороны необходимо выбрать базовую технологию, на которой
это приложение будет основано. В статье рассматриваются наиболее популярные
технологии - PHP, JSP, Java Servlets, ASP.NET, приводятся преимущества и
недостатки каждой из технологий для разных классов задач и делаются общие
выводы о применимости технологий для разработки сложного Web приложения или
платформы.
Введение
На данный момент
существуют и успешно применяются различные виды технологий построения Web
приложений серверной стороны. Все такие приложения имеют общую цель -
реализацию бизнес - логики на стороне сервера и генерацию кода для клиента.
Также у всех этих приложений одинакова архитектура взаимодействия сервера и
клиента и общий протокол взаимодействия - HTTP. Общая логика работы приложения
серверной стороны представлена на рис. 1.
Как видно из
рисунка, работа серверных приложений происходит в три основных этапа:
Запрос. Клиент, используя web -
браузер, инициирует запрос к серверу.
Обработка запроса, подготовка
ответа. После получения запроса web - сервер
проводит обработку запрашиваемого ресурса. В случае, если запрашивается
статический ресурс, такой как HTML страница, рисунок, документ, эта
информация форматируется для протокола HTTP и передается клиенту в
качестве ответа. Если же запрашивается динамический ресурс, запрос
передается на обработку соответствующему контейнеру web - приложений, где
и происходит дальнейшая работа.
После формирования, данные
передаются клиенту посредством протокола
HTTP в качестве ответа. Ответ содержит данные (обычно HTML код, либо
двоичные данные), а также дополнительные параметры, передаваемые в
заголовках HTTP ответа.
Работа
приложений серверной стороны всегда происходит по описанному выше сценарию.
Очевидно, что такой подход создает сложности при создании web -приложений,
основной из которых является отсутствие состояния у web - приложения (так называемое
stateless programming). Это означает, что приложение работает исключительно в
режиме запрос-ответ, не имея данных о предыдущих шагах пользователя или
какой-либо иной постоянной информации. Для решения этой проблемы применяется
понятие пользовательской сессии, которая позволяет хранить данные на сервере в
течение сеанса работы пользователя.
Однако наличием
сессий сложности при создании web - приложений полностью не устраняются. Чем
больше возможностей предоставляет платформа реализации для приложений серверной
стороны в преодолении этих сложностей, тем быстрее и эффективнее может вестись
разработка. Далее будут рассмотрены различные подходы к созданию приложений
серверной стороны, их достоинства и недостатки, а также рассмотрены конкретные
платформы.
Требования к
приложениям серверной стороны
При рассмотрении
платформ для создания приложений серверной стороны необходимо выделить два
основных существующих подхода:
Непосредственная обработка
запросов и формирование ответов.
Встраивание программного кода в
шаблоны HTML страниц.
Первый подход
предоставляет наибольшие возможности по управлению обработкой и повышению
производительности. Он предусматривает передачу всех данных о запросе
непосредственно исполняемому коду, который может как сформировать ответ со
страницей для пользователя, так и открыть на передачу поток двоичных данных,
например для передачи изображения. Однако при таком подходе все данные для
передачи формируются программным путем, что замедляет разработку простых
страниц и усложняет взаимодействие между верстальщиком и программистом.
Примерами этого подхода служат технологии CGI, Java Servlets.
Второй подход
использует шаблоны страниц пользователя, оформленные особым образом, что
позволяет вставлять в них участки программного кода. Этот подход особенно
эффективен при создании простых приложений, основная информация в которых
статична, а динамическая информация может быть сгенерирована простыми
программными конструкциями. При разработке сложных программных систем этот
вариант усложняет взаимодействие между компонентами и затрудняет реализацию
сложной архитектуры. Также он менее эффективен по производительности и
ограничивает возможности по реализации сложных страниц. Примерами этого подхода
служат очень популярные на данный момент технологии PHP, ASP, JSP.
Помимо
различного подхода к генерации страниц платформы разработки в разной степени
удовлетворяют современным требованиям, выдвигаемым при создании сложных Web
систем. Наиболее важные из этих требований, наличие которых делает систему
привлекательной для использования, приведены ниже:
Платформная независимость.
Язык реализации.
Производительность,
масштабируемость.
Возможности расширения и
интеграции.
Простота использования, наличие
средств разработки.
Наличие необходимых программных
библиотек.
Итак, мы
определили ряд требований, необходимых для современной платформы разработки.
Ниже рассматриваются наиболее популярные на данный момент платформы, их
особенности, а также оценка с точки зрения приведенных критериев.
Обзор базовых
технологий
На данный момент
существует множество разработанных технологий серверной стороны, как
коммерческих, так и свободно распространяемых. В данной статье рассматриваются
наиболее распространенные или перспективные технологии, поскольку основная
конкуренция идет между ними и при выборе основной технологии реализации в
большинстве случаев предпочтение отдается одной из них, как проверенной и
надежной.
Платформы
рассматриваются с точки зрения построения на них сложных гетерогенных Web
систем, поэтому некоторые из популярных технологий не приводятся в подробном
обзоре по причине невозможности или нецелесообразности их использования в
качестве базовой платформы. Например, технология ISAPI и другие расширения Web
- серверов, не подходят для применения по причине привязки к конкретному Web -
серверу. Ниже приводятся только основные технологии, потенциально пригодные для
создания сложных гетерогенных Web систем.
Технология Common Gateway
Interface
Технология
Common Gateway Interface (CGI), отличается от остальных рассматриваемых
технологий тем, что является наиболее низкоуровневой и является стандартом
интерфейса, который служит для связи внешней программы с web-сервером.
Сам протокол
разработан таким образом, чтобы можно было использовать любой язык
программирования, который может работать со стандартными устройствами
ввода/вывода. Поскольку такая возможность имеется на уровне операционной
системы, то, если не требуется сложный скрипт, его можно оформить в виде
командного файла.
Рассмотрим
основные достоинства и недостатки технологии CGI по выделенным критериям:
• CGI не
налагает особых условий на платформу и web - сервер, поэтому работает на всех
популярных платформах и web - серверах. Также технология не привязана к
конкретному языку программирования и может быть использована на любом языке,
работающем со стандартными потоками ввода/вывода.
Производительность CGI -
программ не высока. Основной причиной этого
является то, что при очередном обращении к серверу для работы CGI -
программы
создается отдельный процесс, что требует большого количества системных
ресурсов.
Встроенных средств
масштабируемости технология не предусматривает, об этом
разработчикам приходится заботиться отдельно.
CGI - программа представляет из
себя готовый к исполнению файл, что
препятствует легкому расширению системы.
Эти причины
привели к тому, что сейчас разработке CGI - приложений предпочитают более
развитые платформы, предоставляющие больше удобства разработчикам, обладающие
повышенной производительностью. Однако большая масса уже разработанных приложений
заставляет считаться с технологией CGI, а ее знание необходимо для понимания
работы высокоуровневых платформ.
Технология
Personal Home Page
Технология
Personal Home Page (PHP) получила очень широкое распространение благодаря своей
бесплатности и поддержке самых популярных платформ. Она базируется на принципе
построения страниц из шаблонов, впервые появившемся в Active Server Pages, но
развивает и дополняет его. Страницы РНР имеют вид обычных HTML страниц, в
которых могут использоваться специальные тэги вида <?php и ?>. Между
тэгами вставляются строки программного кода на специальном языке сценариев РНР.
Принцип шаблонов
позволил разработчикам писать программы гораздо быстрее и без ошибок, присущих
традиционным CGI - программам, выдающим HTML содержимое в поток вывода. На
сегодняшний день диапазон систем, построенных на шаблонах простирается от
простых страниц с выборками из базы данных до крупных приложений электронной
коммерции, основанных на XML. Шаблонные системы пользуются большой популярностью
среди разработчиков, поскольку наиболее подходят для типовых сайтов. Такие
решения включают ColdFusion, PHP, JSP и ASP, из которых РНР является наиболее
распространенной.
Рассмотрим
основные достоинства и недостатки платформы:
Применяемый в РНР язык прост и
удобен, однако не является в полном смысле
объектно-ориентированным;
Для РНР существуют обширные
библиотеки, а также масса встроенных
функций для решения самых разнообразных задач.
При использовании РНР с Web
сервером Apache есть возможность
эффективного исполнения ядра, как расширения сервера. В остальных случаях
производительность платформы невысока.
Собственных средств
масштабирования РНР не имеет, все возможности по
кластеризации целиком ложатся на Web - сервер и разработчиков.
• Возможности
интеграция ограничены включением модулей и использованием
внешних функций, что не соответствует современным требованиям.
Шаблонный подход
РНР, при всех больших возможностях, скрывает серьезные недостатки. Из общих
недостатков этого подхода, применимых как к РНР, так и ASP, JSP необходимо
выделить следующие:
Файл - страницу может
поддерживать только человек, хорошо владеющий как
программированием, так и HTML, что требует повышенной квалификации.
Один файл, в конкретный момент
времени, может править только один человек.
Это означает, что работает либо программист, либо дизайнер. Т.е.
наблюдается
невозможность разделения труда там, где она потенциально возможна.
Хранение бизнес логики в
файлах - страницах в распределенном по управляющим элементам виде
приводит к затруднению ее вынесения в объекты второго уровня.
Как общий итог рассмотрения
платформы можно заключить, что, благодаря простоте использования, наличию
большого числа функций и библиотек, распространенности и поддержке
большинства существующих Web - серверов и платформ, РНР является очень
удобным средством разработки небольших систем. В то же время ограничения
по производительности, масштабируемости, языку программирования и
возможностям расширения и интеграции препятствуют использованию платформы
при разработке масштабных систем.
Технология Java
Servlets
Технология Java
Servlets (сервлеты) была разработана компанией Sun Microsystems, чтобы
использовать преимущества платформы Java для решения проблем технологии CGI и
API расширений сервера. Технология решает проблему производительности, выполняя
все запросы как нити в одном процессе. Сервлеты также могут легко разделять
ресурсы, и не зависят от платформы, поскольку выполняются внутри Java Virtual
Machine (JVM).
Технология
обладает широкими функциональными возможностями. Большое количество библиотек
предоставляет самые разнообразные средства, необходимые в разработке. Модель
безопасности Java делает возможным точное управление уровнем доступа, например
позволяя доступ только к определенной части файловой системы. Обработка
исключений Java делает сервлеты более надежным средством, чем расширения
серверов на C/C++.
Любой сервлет
является классом Java, и, поэтому, должен быть выполнен внутри Java VM так
называемым сервлет - контейнером (servlet container, servlet engine). Сервлет -
контейнер загружает класс сервлета при первом обращении к нему, либо сразу при
запуске сервера при специальном указании. Далее сервлет остается загруженным
для обработки запросов, пока он не выгружается явным образом, либо до остановки
контейнера.
Технология
является распространенной, и может быть использована со всеми популярными Web -
серверами (Enterprise Server от Netscape, Microsoft Internet Information Server
(IIS), Apache, Java Web Server от Sun).
Программный
интерфейс позволяет сервлетам обрабатывать запросы на любом уровне, при
необходимости используя любые низкоуровневые данные, такие как заголовки
запросов, их тип, и т.д. Это дает большую гибкость при разработке нестандартных
обработчиков, например при работе с двоичным или мультимедийным содержимым.
Поскольку
сервлеты обрабатываются в одном процессе с помощью создания потоков внутри
него, программный код сервлетов должен быть потоке - безопасным. Это
накладывает определенную ответственность на программиста, но с помощью стандартных
приемов, таких как отказ от использования полей в классах сервлетов, и хранение
необходимых данных в контексте или внешнем хранилище такие свойства кода легко
достигаются. При этом сервлеты приобретают такое неоценимое преимущество как
масштабируемость.
Итак, сервлеты
обеспечивают компонентный, платформе - независимый метод для построения
web-приложений без ограничений производительности CGI программ. Они имеют
широкий диапазон доступных прикладных API, позволяют использовать все
преимущества Java, легко расширяются и масштабируются, поддерживаются всеми
популярными Web - серверами. Все это делает их отличным средством разработки
крупных Web - систем.
Технология Java
Server Pages
Технология Java
Server Pages (JSP) от компании Sun Microsystems явилась надстройкой над
технологией Java Servlets, обеспечивающей более быструю и простую разработку
web - приложений с помощью применения шаблонного подхода.
Для понимания
архитектуры и преимуществ JSP необходимо знать технологию Java Servlets,
поскольку они тесно связаны. Страницы Java Server Pages представляют из себя
шаблоны страниц HTML, схожие с шаблонами РНР и ASP. Основным отличием от других
подобных технологий является то, что код, находящийся внутри специальных тэгов
не интерпретируется при обращении к странице, а предварительно компилируется в
Java Servlet. Статические участки шаблона преобразуются в вызовы к функциям для
их помещения в поток вывода. Код компилируется так, как если бы он находился
внутри сервлета. Компиляция JSP страниц в сервлеты является трудоемкой, но
проводится один раз - либо при первом обращении к странице, либо при запуске
сервлет - контейнера.
Технология JSP
удачно объединяет шаблонный подход к построению сайтов и все преимущества Java
платформы. Благодаря этому технология получила широкое распространение как
среди профессиональных коммерческих разработчиков, так и
при создании
открытых бесплатных проектов. Важным шагом к расширению шаблонного подхода
стали так называемые библиотеки тэгов (tag libraries). Это гибкая возможность
интегрировать стандартные, сторонние, или собственные программные компоненты в
страницы. Простота создания и использования привели к большой популярности
библиотек тэгов.
Благодаря работе
на основе Java технология JSP не привязана к конкретной аппаратной или
программной платформе. Таким образом JSP являются отличным решением для
использования в гетерогенных средах.
Производительность
технологии ограничена объективными особенностями архитектуры. Во-первых,
страницы должны быть откомпилированы в сервлеты, что занимает значительное
время. Во-вторых сервлеты выполняются в среде выполнения Java, т.е. в режиме
интерпретации. Однако эти ограничения компенсируются дополнительными
возможностями. Современные контейнеры поддерживают кластеризацию серверов, что
перекладывает нагрузку на аппаратное обеспечение. Это является экономически
оправданным и простым решением. Задача же компиляции в сервлеты является
разовой и производится либо при первом обращении, либо при запуске сервлет -
контейнера. Таким образом это не сказывается на общей производительности
системы при рассмотрении за достаточный период времени.
Основными
достоинствами JSP является простота разработки, характерная для шаблонного
подхода, наличие большого количества сторонних библиотек, легкость их
использования, мощные и разнообразные среды разработки. Благодаря всем этим
факторам JSP является наиболее перспективной базовой технологией разработки при
создании Web - сайтов. Однако при создании сложных Web - систем ограничения,
накладываемые шаблонным подходом становятся серьезным препятствием к развитию.
Технология Microsoft .NET и
среда ASP .NET
Технология .NET
является новейшей разработкой компании Microsoft и заявлена как новый этап в
развитии средств взаимодействия между приложениями. В настоящий момент она
доступна в качестве дополнения .NET Framework к семейству операционных систем
Microsoft Windows, а также в новом продукте Windows Server 2003. Также ведутся
работы по созданию .NET Framework на других операционных системах. Платформа
.NET упрощает разработку приложений и повышает надежность кода. В частности,
она обеспечивает автоматическое управление временем жизни объектов, нейтральные
к языкам библиотеки классов и пересекающие границы языков наследование,
обработку исключений и отладку.
Основа .NET -
Common Language Runtime (общая среда исполнения языков) опирается на системные
службы операционной системы и управляет выполнением кода, написанного на любом
современном языке программирования. Набор базовых классов дает доступ к
сервисам платформы, которые разработчики могут использовать из любого языка
программирования. Common Language Runtime и базовые классы вместе составляют
основу .NET платформы. NET предлагает также высокоуровневые сервисы:
ADO .NET - новое поколение ADO,
которое использует XML и SOAP для
обмена данными;
ASP .NET - новая версия ASP,
позволяющая использовать любой (.NET
совместимый) язык для программирования Web страниц;
Windows Forms и Web Forms -
набор классов для построения пользовательского
интерфейса локальных и Web-ориентированны приложений.
Развертывание
систем на платформе .NET осуществляется особым образом. Исходные коды
компилируются не в команды процессора х86 или другие машинные коды. Вместо
этого компилятор создает код на Промежуточном Языке Microsoft (Microsoft
intermediate language - MSIL). Файл, содержащий MSIL, может выполняться на
платформе любого процессора, если операционная система, предоставляет .NET CLR.
Важной
составляющей частью платформы .NET является новая среда ASP.NET (ранее
использовалось название ASP+). Возможности ASP.NET настолько велики, что ее
сложно назвать следующей версией ASP. В ее основе лежит другая платформа, и
основными языками программирования для нее выбраны С# и Visual Basic, вместо
бывших скриптинг языков. В то же время, новая технология позволяет писать ASP
страницы на любом подходящем языке.
В ASP.NET
заложено все, для того, чтобы сделать весь цикл разработки web -приложения
более быстрым, а поддержку проще. Ниже приведены основные возможности и
принципы работы ASP.NET.
Компилирование кода при первом
обращении.
Широкий выбор библиотек
компонентов, поставляемых с .NET.
Поддержка мощного средства
разработки - Visual Studio. NET.
Языковая независимость в
пределах платформ для которых реализована общая
языковая среда исполнения CLR.
Возможности расширения с
помощью мультипроцессорных и кластерных
решений.
Новые возможности по обработке
ошибок.
Объектно-ориентированные языки
разработки (новый язык С#).
Расширенные возможности
повторного использования компонент.
Очевидно, что
платформа .NET и ASP.NET предоставили новые возможности по разработке Web -
систем. Они отвечают всем современным требованиям и позволяют значительно
ускорить и упростить разработку сложных приложений. Однако, на данный момент,
.NET в полном объеме существует только для платформы Windows. Разработки по
переносу на другие системы ведутся, но еще не завершены и их будущие результаты
трудно оценить. Что касается разработки сайтов, то ASP.NET
сильно привязана
к серверу IIS, и, хотя архитектура .NET позволяет перенести приложения ASP.NET
на другую платформу, на данный момент реальная возможность отсутствует. Таким
образом важнейшее - многоплатформенность пока еще не может быть удовлетворено
платформой .NET, а значит ее использование для такой системы пока не оправдано.
Однако необходимо отметить, что такая система должна иметь возможности
интеграции с платформой .NET (особенно Web -сервисы), поскольку ее будущее
широкое использование не вызывает сомнений.
Анализ
существующих базовых технологий
Итак, в
предыдущем материале были рассмотрены наиболее популярные базовые технологии
построения приложений серверной стороны. Из рассмотренного можно выделить
следующие основные подходы к архитектуре серверных приложений:
Отдельное выполнение запросов.
При каждом запросе динамического
содержимого, запускается отдельная программа для обработки запросов.
Программа генерирует содержимое, передаваемое клиенту. Этот подход
используется в классических CGI-скриптах.
Накопление исполняемых
процессов. Подход аналогичен предыдущему, но при
этом если запрос выполняется повторно, нового запуска программы не
происходит, а обработка передается существующему процессу. Данный подход
применяется в технологиях Java Servlets, Fast CGI.
Шаблоны страниц. При запросе
шаблоны заполняются динамическим
содержимым, обычно, но необязательно, создаваемым интерпретируемым
языком сценариев. Подход применяется в технологиях ASP, JSP, PHP.
Расширения Web - сервера. Web -
сервер обращается к особым расширениям
для обработки динамического содержания. Расширения специфичны для Web -
сервера. Этот подход используется в IS API, NSAPI, mod_perl.
Каждый из
указанных подходов имеет свои возможности и ограничения, и, соответственно,
свою область применения. Модель отдельного выполнения запросов существенно
ограничивает производительность. Вариант накопления процессов является
развитием этой технологии, повышает производительность, при этом сохраняя
максимальную гибкость разработки. Шаблонный подход чрезвычайно удобен при
разработке небольших систем, однако при увеличении сложности он начинает
тормозить процесс разработки и не является подходящим для крупных систем. Он
также отличается невысокой производительностью, хотя исследования [1]
показывают, что в определенных условиях могут демонстрировать достаточно
высокие показатели и конкурировать с подходом 2). Расширения Web - сервера не
являются самым удобным средством разработки, жестко привязывают систему к
определенному Web - серверу, но демонстрируют максимальную производительность и
дают наибольшую гибкость в разработке.
Рассмотрим
платформы по требованиям, определенным ранее. CGI не входит в обзор, поскольку
является неудобной в использовании, и имеющей низкую эффективность, а
расширения серверов слишком сильно привязаны к конкретным программным
продуктам. По схеме обработки запросов платформы распределяются следующим
образом:
РНР - шаблоны. При выполнении
на Web - сервере Apache интерпретатор
может являться расширением сервера (в экспериментальном режиме IIS).
Java Servlets - накапливание
процессов для каждого сервлета.
JSP - шаблоны. При обработке
выполняется их предкомпиляция в Java Servlets,
позволяя использовать схему накапливания процессов.
ASP.NET - шаблоны. Используется
схема предварительной компиляции, а не
интерпретации кода. В результате используется расширение Web - сервера
IIS.
Могут использоваться и низкоуровневые обработчики.
Основные
оценочные характеристики платформ сравним в сводной таблице, где
"-"-полное отсутствие поддержки, "-/+" - недостаточная
поддержка, "+/-" - поддержка не в полном объеме, и "+" -
полная поддержка. Для сравнительных характеристик, таких как язык реализации
или производительность, оценки соответствуют степени превосходства технологии.
РНР
Java Servlets
JSP
ASP .NET
Многоплатформенность
+/-
+
+
-/+
Производительность
-/+
+/-
+/-
+
Масштабируемость
-
+
+
+
Язык
реализации
+/-
+
+
+
Возможности
расширения и интеграции
-
+
+/-
+
Простота
использования, наличие средств разработки