Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Проектирование информационных систем. Учебное пособие
.pdf
формирования пользовательского интерфейса и клиентской функциональности. По этой причине в последнее время сложился стереотип
о том, что серьезные приложения (например, бизнес-приложения) –
это, как правило, настольные приложения. Однако развитие веб-технологий доказало обратное. Существует также ряд технологий, добавляющих интерактивности приложению за счет внедрения в браузер
специальных модулей, которые
могут отображать специальные типы
файлов [7, 9].
Несмотря на то что существуют технологии, упрощающие создание
динамичных веб-приложений, их разработка по-прежнему остается
довольно трудоемкой задачей. Оба этих фактора существенно влияют
на процесс разработки веб-приложений, из-за этого при построении
любого веб-приложения приходится решать следующие типовые задачи: способы хранения
информации о пользователе, организация сеансов работы пользователя, способы перехода от страницы к странице,
механизмы оптимизации эффективности (например, кеширование).
При реализации каждого веб-приложения разработчику придется
столкнуться с этими проблемами и решить их. Поскольку набор подобных задач является достаточно стандартным и одинаково решается
для большинства веб-приложений, то его реализация
вынесена в отдельные технологии, которые называются технологиями для разработки веб-приложений. К таким технологиям относятся PHP, Ruby on Rails
и др. В них фактически содержатся все компоненты, необходимые для
реализации веб-приложений и обеспечения их всеми необходимыми
ресурсами.
Основное преимущество веб-приложений заключается в процессе
развертывания приложения, т. е. установке приложения конечному
клиенту. Если настольное приложение необходимо установить на
каждое рабочее место, где оно будет использоваться, то веб-приложение нужно разместить на сервере и дать ссылку на него всем пользователям. Особенно актуален указанный аспект там, где имеется
большое количество рабочих мест. Кроме того, в случае обновления
программного кода веб-приложения также
имеют преимущество –
для их обновления требуется только обновить код на сервере. При
этом настольное приложение потребовалось бы обновлять на каждом
рабочем месте.
51

4.2. ПРИНЦИПЫ РАБОТЫ ВЕБ-СЕРВЕРА
Основу функционирования веб-приложений составляет веб-сервер,
представляющий собой программу, которая принимает входящие
HTTP-запросы, обрабатывает эти запросы, генерирует HTTP-ответ
и отправляет его клиенту. Общий алгоритм работы веб-сервера приведен на рис. 4.1, где серым цветом отмечены действия, которые обрабатываются веб-сервером.
Рис. 4.1. Схема работы веб-сервера
После того как пользователь обратился к определенному ресурсу
по протоколу HTTP, клиент (обычно браузер) формирует HTTPзапрос к веб-серверу. При этом обычно указывается символическое
имя сервера, а браузер предварительно преобразует это имя в IPадрес при помощи сервисов DNS. После этого по протоколу HTTP на
веб-сервер отправляется сформированное HTTPсообщении браузер указывает, какой ресурс необходимо загрузить,
а также всю дополнительную информацию. Задача веб-сервера – прослушивать определенный TCP-порт и принимать все входящие HTTPсообщения. Если входящие данные не соответствуют формату сообщения HTTP, то такой запрос игнорируется, а клиенту возвращается
сообщение об ошибке.
В простейшем случае при поступлении HTTP-запроса
должен считать содержимое запрашиваемого файла с жесткого диска,
сообщение. В этом
веб-сервер
52

упаковать его содержимое в HTTP-ответ и отправить клиенту. В случае
если требуемый файл не найден на жестком диске, веб-сервер сгенерирует ошибку с указанием статусного кода 404 и отправит это сообщение клиенту. Такой вариант работы веб-сервера принято называть статическими сайтами. В этом случае на стороне сервера не запускается
никакой программный код, кроме программного кода самого вебсервера. Однако подобные сценарии работы все чаще оказываются непригодными, а им на смену приходят полноценные веб-приложения.
Отличие таких приложений состоит в том, что HTML-документы
и другие ресурсы не хранятся на сервере в виде неизменяемых данных.
Вместо этого на сервере хранится
рировать требуемые данные в момент обработки запроса. Разумеется,
некоторые ресурсы, такие как файлы каскадных стилей, изображения
и другие, могут храниться как статическое содержимое, но основные
страницы HTML генерируются в процессе обработки. В таком случае
веб-сервер при обработке запроса HTTP должен обращаться к программному коду, который сгенерирует содержимое
веб-сервера приведен на рис. 4.2.
программный код, способный сгене-
. Алгоритм работы
Рис. 4.2. Алгоритм работы веб-сервера
53

К дополнительным функциям веб-сервера относятся следующие:
1) аутентификация и авторизация пользователей;
2) ведение серверного лога (для отладки работы веб-сервера);
3) поддержка нескольких веб-сайтов на одном сервере (виртуаль-
ный хостинг);
4) поддержка безопасных подключений по протоколу HTTPS.
Нередко на одном и том же веб-сервере располагается множество
независимых веб-сайтов
. Более того, все эти веб-сайты используют
один и тот же IP-адрес – т. е. веб-сервер, имеющий только один IP-адрес, может размещать внутри себя несколько веб-сайтов, и при этом
каждый такой веб-сайт будет ассоциирован с собственным адресом.
Такое явление называется виртуальным хостингом. Работа вебсервера в данном
случае осуществляется следующим образом. Браузер отправляет HTTP-запрос на IP-адрес веб-сервера, который ассоциирован с доменным именем. Разрешение IP-адреса происходит
с помощью служб DNS. Однако несмотря на то что запрос отправляется с использованием полученного IP-адреса, клиент указывает дополнительный HTTP-заголовок «Host», в котором определяется оригинальное имя веб-сайта. Благодаря этой
информации веб-сервер может разграничить доступ к нескольким веб-сайтам и при этом использовать один и тот же IP-адрес. Это очень важный момент, поскольку
если бы для каждого доменного имени приходилось регистрировать
отдельный IP-адрес, то адресное пространство протокола IP (v.4)
очень быстро бы закончилось, а стоимость размещения веб-сайта в
глобальной сети Интернет была бы намного выше.
Исторически сложилось так, что существует два главных типа интерфейсов взаимодействия внешнего приложения и веб-сервера – CGI
и ISAPI.
CGI (Common Gateway Interface) – наиболее ранний способ взаимодействия веб-сервера и веб-приложения. Основная идея, которая
лежит в основе CGI, заключается в том, что при поступлении очередного HTTP-запроса веб-
сервер инициирует создание нового процесса
и передает ему все необходимые данные HTTP-запроса. После того
как этот процесс отработает, он завершается, передав результат обратно веб-серверу. Поскольку веб-сервер и приложение – разные процессы с точки зрения операционной системы, то для обмена инфор-
54

мацией между ними используются средства межпроцессного взаимодействия (IPC) – зачастую это переменные окружения, именованные
каналы и др. Основным преимуществом CGI является то, что процессы веб-сервера и приложения изолированы друг от друга, и в случае
неполадок в веб-приложении завершится с ошибкой именно процесс
приложения, при этом процесс самого веб-сервера будет
продолжать
функционировать. С другой стороны, необходимость создания каждый раз нового процесса влечет за собой дополнительные накладные
расходы на создание процесса и передачу данных через границы процессов. Это является серьезным недостатком и оказывает существенное влияние на масштабируемость веб-приложения и его способность
обрабатывать большее количество поступающих запросов.
ISAPI (Internet Server API) – альтернативный
способ взаимодей-
ствия веб-сервера и веб-приложения. В отличие от CGI при взаимодействии в рамках интерфейса ISAPI с поступлением очередного запроса веб-сервер инициирует создание нового потока в рамках основного процесса, в котором работает веб-сервер. Поскольку с точки
зрения операционной системы создание потока – это менее дорогостоящая
операция, чем создание процесса, то такие приложения на
практике оказываются более масштабируемыми. Кроме того, упрощается взаимодействие веб-сервера и веб-приложения, так как в этом
случае используется единое адресное пространство в рамках операционной системы (поскольку весь код работает в одном и том же процессе). Однако в случае серьезных
неполадок в веб-приложении,
которое взаимодействует с веб-сервером в рамках ISAPI, веб-сервер
также потенциально подвергается риску быть завершенным. Поскольку веб-сервер и веб-приложение работают в одном и том же
процессе, это действительно так. Поэтому разработчикам программного кода веб-сервера, поддерживающего ISAPI, следует уделить этому вопросу особое
внимание.
На сегодняшний день наиболее распространенным способом взаимодействия веб-сервера и веб-приложения является интерфейс
ISAPI, поскольку он обеспечивает оптимальные показатели по
накладным расходам и масштабируемости. Однако при работе нескольких веб-приложений на одном и том же веб-сервере существует
потенциальная опасность влияния одного приложения на другое. Для
55

того чтобы избежать подобной ситуации, используется совмещенный
подход – для каждого приложения может создаваться пул приложения
(application pool), представляющий собой отдельный процесс, в котором функционируют потоки для обработки входящих HTTP-запросов
от пользователей. В этом случае если какое-то из приложений будет
содержать код, завершающий работу процесса с ошибкой, то будет
завершаться процесс
только этого приложения.
Одной из наиболее важных задач, которые решаются при построении веб-сервера, является задача обеспечения масштабируемости,
т. е. возможности увеличения количества обслуживаемых пользователей и защищенности от внешних атак. Поскольку веб-сервер работает
в открытой среде – глобальной сети Интернет, – то зачастую доступ
к нему может осуществляться откуда угодно
. Это делает веб-сервер
подверженным большим нагрузкам и потенциальным атакам. Наиболее распространенными атаками на веб-сервер являются обращения
к нему с большим количеством запросов и их высокой частотой.
В этом случае веб-сервер не сможет быстро обрабатывать все запросы, и это может сказаться на его производительности для настоящих
пользователей. Особенно остро подобным атакам подвержены вебсерверы, на которых исполняется какой-то внешний программный код
помимо программного кода самого веб-сервера. Обычно для борьбы
с подобными атаками блокируются все запросы, приходящие с определенного IP-адреса. Кроме того, в подобных случаях следует позаботиться об оптимизации программного кода приложения – например,
использовать
кеширование. В этом случае при обработке каждого запроса нагрузка на центральный процессор будет меньше, что может
существенно усложнить задачу атакующим.
На сегодняшний день существует большое количество различных
реализаций веб-серверов. Одним из наиболее популярных и универсальных веб-серверов является веб-сервер с открытым исходным кодом Apache. Он был
создан для работы в среде Linux, существует
также его реализация для работы в рамках Microsoft Windows. На его
основе были построены другие различные вариации, например
Apache Tomcat для запуска веб-приложений на основе Java. Другим
наиболее серьезным продуктом в этой области является веб-сервер
Microsoft Internet Information Services (IIS), который работает в рам-
56

ках операционной системы MS Windows. Как правило, в рамках этого
веб-сервера работают приложения на базе ASP.NET (и родственных
технологий), а также приложения PHP и статические веб-сайты.
Наконец, существуют другие, менее масштабные проекты по разработке веб-серверов, например Nginx. Этот проект был создан одним
из разработчиков Rambler с целью оптимизации производительности
данной поисковой системы. Впоследствии
проект оказался настолько
удачным, что нашел применение и для работы в других приложениях.
Обычно Nginx используют, когда необходимо построить высоконагруженную инфраструктуру.
4.3. ПОНЯТИЕ И ХАРАКТЕРИСТИКА ФРЕЙМВОРКОВ
Фреймворк – это платформа (каркас) для разработки информаци-
онных систем, веб-приложений и др.
Фреймворк – это программное обеспечение, облегчающее разра-
ботку и объединение разных компонентов большого
программного
проекта. Данная платформа подходит для создания сайтов, бизнесприложений и веб-сервисов.
Фреймворк отличается от библиотеки тем, что библиотека может
быть использована в программном продукте просто как набор подсистем близкой функциональности, но не влияет на архитектуру основного программного продукта и не накладывает на нее никаких ограничений.
Фреймворк диктует правила построения архитектуры приложения, задавая на начальном этапе разработки поведение по умолчанию и формируя каркас, который нужно будет расширять и изменять согласно указанным требованиям. Фреймворк может включать
в себя вспомогательные программы, библиотеки кода, язык сценариев
и другое программное обеспечение, облегчающее разработку и объединение разных компонентов
большого программного проекта.
Одним из главных преимуществ фреймворков является то, что
информационная система и веб-приложения часто используют стандартизированную структуру организации компонентов. Создание
структуры при разработке на фреймворках очень упрощается. По сути, фреймворк – это множество конкретных и абстрактных классов,
а также определений способов их взаимоотношения. Конкретные
57

классы обычно реализуют взаимные отношения между классами,
а абстрактные классы представляют собой точки расширения, в которых каркасы могут быть использованы или адаптированы. Для обеспечения расширения возможностей обычно применяются техники
объектно-ориентированного программирования (например, части
приложения могут наследоваться от базовых классов фреймворка).
Любая конфигурация фреймворка состоит из двух частей:
постоянная часть – каркас, не меняющийся от конфигурации
1)
к конфигурации и несущий в себе гнезда, в которых размещается вторая, переменная часть;
2) сменные модули или точки расширения, настраиваемые под
конкретную задачу.
Каждый фреймворк привязан к конкретной технологии и (или)
языку программирования.
К основным преимуществам фреймворков относятся следующие.
1. Разработка на
фреймворке, в отличие от «самописных» реше-
ний, позволяет добиться простоты сопровождения проекта.
2. Возможна и относительно проста реализация любых бизнес-
процессов, а не только тех, которые изначально заложены в систему.
Благодаря этому проекты на базе фреймворков легко масштабируемы
и модернизируемы.
3. Решения на фреймворках, как правило, работают значительно
быстрее и выдерживают
большую нагрузку, чем CMS и «самописные» системы. Именно поэтому много популярных интернет-магазинов работают не на коробочных CMS, а на фреймворках. По уровню безопасности решения на фреймворках значительно превосходят
«самописные» системы и сравнимы с CMS. На практике сайты на
фреймворках даже безопаснее.
К недостаткам фреймворков относятся следующие.
1. Сроки разработки
типового функционала на фреймворках
больше, чем при использовании CMS. Фреймворки содержат только
базовые компоненты бизнес-логики уровня приложения, поэтому
многие функции реализуются индивидуально.
2. Для разработки на фреймворке требуется понимание бизнес-
процессов, которые необходимо реализовать. Например, если в CMS
58

уже есть некий предустановленный процесс обработки заказов, то
фреймворки такого не предоставляют.
При разработке информационной системы особую значимость
приобретает вопрос выбора базовой архитектуры разрабатываемого
программного обеспечения. При этом классической ситуацией для
большинства отечественных компаний на сегодняшний день является
наличие разнообразного парка компьютеров с широким набором используемых операционных систем и прикладного
программного
обеспечения.
Оптимальным подходом в таком случае представляется разработка информационной системы на основе применения современных
веб-технологий и клиент-серверной архитектуры. Веб-приложение
представляет собой клиент-серверное приложение, в котором клиентом выступает браузер, а сервером – веб-сервер. Логика веб-приложения распределена между сервером и клиентом, хранение данных
осуществляется преимущественно на сервере, обмен информацией
происходит по сети. Одно из преимуществ такого подхода состоит
в том, что клиенты не зависят от конкретной операционной системы
пользователя, поэтому веб-приложения являются кроссплатформенными сервисами.
При рассмотрении архитектуры веб-приложений следует обратить
внимание на то, что они состоят из клиентской и серверной частей
,
тем самым реализуя технологию «клиент-сервер». Клиентская часть
отвечает за пользовательский интерфейс, формирует запросы к серверу и обрабатывает ответы от него. Серверная часть получает запрос
от клиента, выполняет вычисления, после этого формирует вебстраницу и отправляет ее клиенту по сети с использованием протокола HTTP. Таким образом, само веб-приложение
может выступать
в качестве клиента других служб, например базы данных или другого
веб-приложения, расположенного на другом сервере.
Для разработки полноценных веб-приложений существует большое количество современных механизмов, библиотек и языков программирования. Причем популярный в конце 1990-х годов и первой
половине 2000-х подход к разработке веб-приложения «с нуля
» сегодня абсолютно не эффективен, поскольку сопряжен с большой вероятностью возникновения критических ошибок и с необходимостью
59

наличия высокой квалификации у основных разработчиков программного обеспечения. Для реализации подобного ИТ-решения целесообразно использовать фреймворки. В последнее время для эффективного решения задач, связанных с разработкой веб-приложений,
широкое применение получили веб-фреймворки. Это связано с тем,
что данная технология позволяет использовать готовые универсальные компоненты, сокращает дублирование
кода, упрощает отладку
и повышает надежность готового программного продукта. В связи
с этим на практике вопрос обоснованного выбора фреймворка приобретает все большую актуальность.
Веб-фреймворк по сути представляет собой платформу, предназначенную для создания сайтов и веб-приложений. Такая программная среда позволяет облегчить разработку и интеграцию разных компонентов большого программного проекта в одно целое. Этот эффект
достигается за счет возможностей реализации бизнес-логики и высокой производительности, в результате чего фреймворки прекрасно
подходят для разработки сложных сайтов, бизнес-приложений и вебсервисов.
Основные преимущества использования фреймворков можно разделить на две группы, одна из которых связана с их
экономической
эффективностью, а другая – с их техническими особенностями.
С точки зрения управления компанией разработка на фреймворке почти всегда экономически эффективнее и качественнее по результату,
чем разработка проекта на чистом языке программирования без применения каких-либо платформ. Кроме того, если сравнивать фреймворки с другими классами платформ, такими как SaaS, CMS
или CMF,
то фреймворки значительно эффективнее использовать в проектах со
сложной бизнес-логикой и с высокими требованиями к скорости работы, надежности и безопасности. Одним из главных технических
преимуществ при использовании фреймворков является то, что данная платформа определяет унифицированную структуру для построенных на ее базе приложений. Поэтому приложения на фреймворках
значительно проще сопровождать и дорабатывать, так как стандартизированная структура организации компонентов понятна всем разработчикам на этой платформе и не требуется долго разбираться в архитектуре, чтобы понять принцип работы приложения или найти место
реализации того или иного функционала.
60
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
