390 likes | 565 Views
Тема 8. World Wide Web Обработка запросов на стороне сервера. Обзор web-серверов. Apache IIS – Internet Information Server (Microsoft) lighttpd tux (Red Hat) сервера, встроенные в платформы web-приложений (Zope). Взаимодействие web-приложений с web-серверами.
E N D
Тема 8 World Wide WebОбработка запросов на стороне сервера
Обзор web-серверов • Apache • IIS – Internet Information Server (Microsoft) • lighttpd • tux (Red Hat) • сервера, встроенные в платформы web-приложений(Zope)
Взаимодействие web-приложенийс web-серверами • CGI – Common Gateway Interface • FastCGI / PCGI (web-приложение – отдельный процесс) • Подключаемые модули (использющие API web-сервера)примеры API: Apache API, isapi, nsapiпримерымодулей: mod_perl, mod_php, mod_python, • Использование CGI как шлюза для подключения к внешним приложениям и сервисам
Преимущества CGI • Прозрачность использования; • "Языковая" независимость - CGI-программы могут быть написаны на любом языке программирования или командном языке, имеющим средства работы со строками; • Процессная изолированность - при запуске CGI-програмы на сервере порождается отдельный процесс и ошибочный CGI-скрипт не может сломать Web-сервер или получить доступ к закрытой информации; • Открытость стандарта - CGI интерфейс применим на каждом Web-сервере; • Архитектурная независимость - CGI не зависит от особенностей реализации архитектуры сервера (однопоточности, многопоточности и т.д.);
Недостатки CGI • Большое время отклика, т.к. ко времени выполнения CGI-приложения добавляется время на старт процесса • Не подходит для использования при интенсивной обработки запросов, т.к. создаёт большую нагрузку на сервер (накладные расходы на старт процессов, большой расход памяти при одновременном запуске множества скриптов) • CGI-программы не могут быть использованы на этапах HTTP-аутентификации пользователя и проверки прав доступа к ресурсу.
Преимущества FastCGI • Быстродействие, увеличенная пропускная способность • Простота применения и легкость миграции из CGI. • "Языковая" независимость • Изолированность процессов - "неисправные" FastCGI-программы не могут разрушить ядро сервера, нельзя получить служебную информацию сервера. • Совместимость – поддерживается рядом web-серверов. • Архитектурная независимость - интерфейс не зависит от особенностей реализации серверной архитектуры и прикладные программы могут быть как одно-, так и многопоточными. • Распределённость - FastCGI обеспечивает возможность выполнять приложения удаленно, что используется для распределенной загрузки и управления внешними Web-сайтами.
Недостатки FastCGI • Нестабильная работа (при подвисании обслуживающих процессов) • Необходимость жёстко следить за освобождением ресурсов (возможны утечки памяти и т.п.)
Преимущества API • Максимальное быстродействие • Возможность тесного взаимодействия с сервером, обработки запроса на любой стадии
Недостатки API • Неизолированность процесса –снижение общей надёжности, т.к. стабильность всего web-сервера зависит от стабильности web-приложения • "Языковая" зависимость • Ограниченность применения – написанные программы в соответствии с данным API могут использоваться только на данном сервере • Повышенный расход памяти процесса web-сервера (каждый процесс web-сервера содержит в том числе код web-приложения)
Основные переменные окружения в CGI-запросах SERVER_NAME Имя сервера HTTP_USER_AGENT Название браузера клиента REQUEST_URI Строка запроса (URI) CONTENT_TYPE Тип контента (для запросов POST) CONTENT_LENGTH Длина контента (для запросов POST) QUERY_STRING Строка запроса REMOTE_ADDR IP-адрес клиента REMOTE_USER Имя клиента (если он был авторизован) SCRIPT_NAME Имя скрипта SCRIPT_FILENAME Имя файла со скриптом
Пример CGI-скрипта #!/usr/bin/perl -w use strict; use CGI qw(:standard); print header; print start_html; print ‘<H1>Hello, World!</H1>'; print end_html;
Пример FastCGI-скрипта #!/usr/bin/perl –w use CGI::Fast qw(:standard); $COUNTER = 0; while (new CGI::Fast) { print header; print h1("Fast CGI Rocks"), "Invocation number ",b($COUNTER++), " PID ",b($$),".", hr; }
Отделение логики от представления • Отделение бизнес-логики от контента • Отделение контента от дизайна Преимущества: • Упрощение разработки • Разделение сложного целого на составные части • Стимулирует бóльшую степень абстракции и структуризации • Разделение труда • Программист • Верстальщик • Дизайнер
Web-шаблоны • Шаблоны служат для отделения логики (программной части) динамического web-сайта от представления (вёрстки, дизайна) Виды шаблонов: • Статические – страница генерируется перед публикацией на сервере • Функционирующие на стороне сервера (server-side) – страница генерируется сервером «на лету» • Функционирующие на стороне клиента (client-side) – страница формируется на стороне клиента
Виды шаблонов по набору возможностей • Простые – только подстановка переменных.Примеры: команда print в Perl, echo в PHP "Hello $x“ • С поддержкой итерации – возможности простых шаблонов + возможность повторения блоков с разными наборами данных.Примеры: HTML::Template (Perl), phpBB-шаблоны • Сложные – поддержка логики, параметризация блоков, циклы, выражения.Примеры: XSL, Template::Toolkit (Perl), Smarty (PHP)
Процессор шаблонов Template::Toolkit • Подстановка переменных:[% variable %], [% var.subvar %] • Вызов процедур и методов:[% function() %], [% password.length %] • Выражения:[% discount / 100 + 1 %] • Итераторы:[% FOREACH r = rows %] <li>[% r %][% END %] • Условные конструкции:[% IF condition %]истина[% ELSE %]ложь[% END %][% UNLESS condition %]ложь[% END %] • Операция выбора:[% SWITCH code %] [% CASE ‘a’ %]Выбран вариант A [% CASE %]Выбран неизвестный вариант[% END %] • Подстановка шаблонов:[% INCLUDE header.inc %], [% PROCESS header.inc %] • Фильтры:[% content | html %] [% INCLUDE myfile | trim %]
Пример шаблона Template::Toolkit [% INCLUDE header title = 'This is an example' %] <h1>Some Interesting Links</h1> [% webpages = [ { url => 'http://foo.org', title => 'The Foo Organisation' }, { url => 'http://bar.org', title => 'The Bar Organisation' } ]%] Links: <ul> [% FOREACH link = webpages %] <li><a href="[% link.url %]">[% link.title %]</a> [% END %] </ul> [% INCLUDE footer %]
Схема работы web-приложения Входные пара- метры Template processor Бизнес- логика Данные Шаблон БД Готовая HTML- страница
Архитектура MVC и классическая архитуктура domain/UI • Преимущества отделения пользовательского интерфейса от логики предметной области: • это наиболее простой путь облегчить решение сложных задач • возможно создание нескольких различных интерфейсов, не изменяя логику предметной области View Пользова- тельский интерфейс (UI) Controller Бизнес-логика предметной области (domain logic) Model
Компоненты архитектуры MVC Шаблон MVC позволяет разделить данные, представление и обработку действий пользователя на три отдельных компонента • Модель (Model). Модель предоставляет данные (обычно для View), а также реагирует на запросы (обычно от контролера), изменяя свое состояние . • Представление (View). Отвечает за отображение информации (пользовательский интерфейс). • Контролер (Controller). Интерпретирует данные, введенные пользователем, и информирует модель и представление о необходимости соответствующей реакции.
Уточнённая схема работыweb-приложения Вх. пара- метры C Template processor Данные Шаблон V M Готовая HTML- страница БД
Web-каркасы Web-сервер Сессии БД Каркасweb-приложения Процессор шаблонов Web-приложение (бизнес-логика)
Функции каркаса • Работа с сессией • Взаимодействие с web-сервером (раз-бор параметров, Cookie и т.п.) • Взаимодействие с БД • Обработка шаблонов • Обработка ошибок • Базовая архитектура приложения (MVC и т.п.) • Журналирование • Вызов обработчиков страниц, поддержка переадресации между обработчиками
Примеры каркасов • Catalyst (Perl) • ASP.NET (C#, VB.NET) • Zope (Python) • Ruby On Rails (Ruby) • Spring, GRails (Java) • Cold Fusion (CFML)
Web-сервер apache Команды запуска/остановки/перезапуска: /etc/init.d/httpd start|stop|restart|reload apachectl start|stop|restart|reload Файлы конфигурации: /etc/httpd/ /etc/httpd/conf/httpd.conf
Файл конфигурации Apache Listen 80 ServerAdmin admin@site.ru ErrorLog logs/error_log DirectoryIndex index.php index.shtml index.html index.htm AddHandler cgi-script .cgi AddHandler cgi-script .pl AddType text/html .shtml AddDefaultCharset windows-1251 NameVirtualHost *:80
Пример секции VirtualHost <VirtualHost *:80> ServerName site.ru ServerAlias www.site.ru DocumentRoot /www/site.ru ErrorLog /var/log/httpd/site.ru-errors CustomLog /var/log/httpd/site.ru-access combined <Directory "/www/site.ru"> AllowOverride All </Directory> <LocationMatch "^/$"> DirectoryIndex /cgi-bin/index.fcgi </LocationMatch> Redirect /icons/ http://www.icons.ru/ ScriptAlias /cgi-bin/ /www/site.ru/perl/ AddHandler cgi-script .cgi </VirtualHost>
Увеличение производительности web-решений • Модернизация аппаратного обеспечения • Оптимизация настройки ОС и web-сервера (введение кэширования, отключение лишних модулей и т.п.) • Модернизация web-приложения • оптимизация узких мест • уменьшение объема требуемой памяти (отказ от лишних библиотек и т.п.) • кэширование данных из БД • Распределение нагрузки
Распределение нагрузки. Кластеры Виды кластеров • Кластеры высокой надежности (HA) • Кластеры повышенной производительности (HPC) • Кластеры распределения нагрузки (Load Balancing) Серверные фермы (server farms)
Способы распределения нагрузки • Без использования посредников (Round robin DNS, использование разных доменов/поддоменов) • IP-level (transparent proxy, layer 4 router) • Web-server level (reverse proxy, caching HTTP proxy) • Web-приложение делегирует выполнение определённых операций другим машинам • Распределённые базы данных • Выполнение сложных вычислений и обработки с привлечением дополнительных серверов Эти способы могут произвольно комбинироваться.
Без использования посредников Сервер 1 (IP 1) Сервер 2 (IP 2) Сервер 3 (IP 3)
Layer 4 router / transparentIP proxy Сервер 1 Сервер 2 Сервер 3 Transparent IP proxy (real IP)
Reverse HTTP proxy Сервер 1 Сервер 2 Сервер 3 Reverse HTTP proxy (real IP)
Функции reverse proxy • Обеспечение безопасности (Security) • Шифрование (Encryption) • Компрессия (Compression) • Распределение нагрузки (load distribution) • Кэширование (caching) • Работа с медленными клиентами (spoon feeding)
Делегирование отдельных задач / распределение нагрузки между БД Application server 1 БД 1 Web server (real IP) Application server 2 БД 2
Литература • Протокол CGIhttp://python.onego.ru/course/lect8.html • Модуль CGIhttp://search.cpan.org/~lds/CGI.pm-3.25/CGI.pm • Модуль CGI::Fasthttp://search.cpan.org/author/LDS/CGI.pm-3.25/CGI/Fast.pm • Архитектура MVChttp://en.wikipedia.org/wiki/Model-view-controllerhttp://ru.wikipedia.org/wiki/Model_View_Controller • Распределение нагрузкиhttp://en.wikipedia.org/wiki/Reverse_proxyhttp://en.wikipedia.org/wiki/Load_balancing_%28computing%29http://en.wikipedia.org/wiki/Layer_4_router