fa0175361aca3e2461e4875119cd055a.ppt
- Количество слайдов: 37
Тема 8 World Wide Web Обработка запросов на стороне сервера
Обзор web-серверов • • • Apache IIS – Internet Information Server (Microsoft) lighttpd tux (Red Hat) сервера, встроенные в платформы webприложений (Zope)
Взаимодействие web-приложений с web-серверами • CGI – Common Gateway Interface • Fast. CGI / 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-аутентификации пользователя и проверки прав доступа к ресурсу.
Преимущества Fast. CGI • • Быстродействие, увеличенная пропускная способность Простота применения и легкость миграции из CGI. "Языковая" независимость Изолированность процессов - "неисправные" Fast. CGIпрограммы не могут разрушить ядро сервера, нельзя получить служебную информацию сервера. • Совместимость – поддерживается рядом web-серверов. • Архитектурная независимость - интерфейс не зависит от особенностей реализации серверной архитектуры и прикладные программы могут быть как одно-, так и многопоточными. • Распределённость - Fast. CGI обеспечивает возможность выполнять приложения удаленно, что используется для распределенной загрузки и управления внешними Webсайтами.
Недостатки Fast. CGI • Нестабильная работа (при подвисании обслуживающих процессов) • Необходимость жёстко следить за освобождением ресурсов (возможны утечки памяти и т. п. )
Преимущества API • Максимальное быстродействие • Возможность тесного взаимодействия с сервером, обработки запроса на любой стадии
Недостатки API • Неизолированность процесса –снижение общей надёжности, т. к. стабильность всего web-сервера зависит от стабильности webприложения • "Языковая" зависимость • Ограниченность применения – написанные программы в соответствии с данным API могут использоваться только на данном сервере • Повышенный расход памяти процесса webсервера (каждый процесс web-сервера содержит в том числе код web-приложения)
Основные переменные окружения в CGI-запросах QUERY_STRING Строка запроса REMOTE_ADDR IP-адрес клиента REMOTE_USER Имя клиента (если он был авторизован) SCRIPT_NAME Имя скрипта SCRIPT_FILENAME Имя файла со скриптом SERVER_NAME Имя сервера HTTP_USER_AGENT Название браузера клиента REQUEST_URI Строка запроса (URI) CONTENT_TYPE Тип контента (для запросов POST) CONTENT_LENGTH Длина контента (для запросов POST)
Пример CGI-скрипта #!/usr/bin/perl -w use strict; use CGI qw(: standard); print header; start_html; ‘<H 1>Hello, World!</H 1>'; end_html;
Пример Fast. CGI-скрипта #!/usr/bin/perl –w use CGI: : Fast qw(: standard); $COUNTER = 0; while (new CGI: : Fast) { print header; print h 1("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), php. BBшаблоны • Сложные – поддержка логики, параметризация блоков, циклы, выражения. Примеры: 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' %] <h 1>Some Interesting Links</h 1> [% 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 (Model View Controller)
Архитектура MVC и классическая архитуктура domain/UI View Пользовательский интерфейс (UI) Бизнес-логика предметной области (domain logic) Controller Model Преимущества отделения пользовательского интерфейса от логики предметной области: • это наиболее простой путь облегчить решение сложных задач • возможно создание нескольких различных интерфейсов, не изменяя логику предметной области
Компоненты архитектуры MVC Шаблон MVC позволяет разделить данные, представление и обработку действий пользователя на три отдельных компонента • Модель (Model). Модель предоставляет данные (обычно для View), а также реагирует на запросы (обычно от контролера), изменяя свое состояние. • Представление (View). Отвечает за отображение информации (пользовательский интерфейс). • Контролер (Controller). Интерпретирует данные, введенные пользователем, и информирует модель и представление о необходимости соответствующей реакции.
Уточнённая схема работы web-приложения Вх. параметры C Шаблон Template processor Готовая HTMLстраница Данные V M БД
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/conf/httpd. conf
Файл конфигурации Apache Listen 80 Server. Admin admin@site. ru Error. Log logs/error_log Directory. Index index. php index. shtml index. htm Add. Handler cgi-script. cgi Add. Handler cgi-script. pl Add. Type text/html. shtml Add. Default. Charset windows-1251 Name. Virtual. Host *: 80
Пример секции Virtual. Host <Virtual. Host *: 80> Server. Name site. ru Server. Alias www. site. ru Document. Root /www/site. ru Error. Log /var/log/httpd/site. ru-errors Custom. Log /var/log/httpd/site. ru-access combined <Directory "/www/site. ru"> Allow. Override All </Directory> <Location. Match "^/$"> Directory. Index /cgi-bin/index. fcgi </Location. Match> Redirect /icons/ http: //www. icons. ru/ Script. Alias /cgi-bin/ /www/site. ru/perl/ Add. Handler cgi-script. cgi </Virtual. Host>
Увеличение производительности 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 / transparent IP proxy Сервер 1 Сервер 2 Transparent IP proxy (real IP) Сервер 3
Reverse HTTP proxy Сервер 1 Сервер 2 Reverse HTTP proxy (real IP) Сервер 3
Функции reverse proxy • • Обеспечение безопасности (Security) Шифрование (Encryption) Компрессия (Compression) Распределение нагрузки (load distribution) • Кэширование (caching) • Работа с медленными клиентами (spoon feeding)
Делегирование отдельных задач / распределение нагрузки между БД Application server 1 БД 1 Web server (real IP) БД 2 Application server 2
Литература • Протокол CGI http: //python. onego. ru/course/lect 8. html • Модуль CGI http: //search. cpan. org/~lds/CGI. pm-3. 25/CGI. pm • Модуль CGI: : Fast http: //search. cpan. org/author/LDS/CGI. pm-3. 25/CGI/Fast. pm • Архитектура MVC http: //en. wikipedia. org/wiki/Model-view-controller http: //ru. wikipedia. org/wiki/Model_View_Controller • Распределение нагрузки http: //en. wikipedia. org/wiki/Reverse_proxy http: //en. wikipedia. org/wiki/Load_balancing_%28 computing%29 http: //en. wikipedia. org/wiki/Layer_4_router
fa0175361aca3e2461e4875119cd055a.ppt