Слайд 1World Wide Web
Обработка запросов на стороне сервера
Тема 8
Слайд 2Обзор web-серверов
Apache
IIS – Internet Information Server (Microsoft)
lighttpd
tux (Red Hat)
сервера, встроенные в
платформы web-приложений (Zope)
Слайд 3Взаимодействие web-приложений
с web-серверами
CGI – Common Gateway Interface
FastCGI / PCGI (web-приложение –
отдельный процесс)
Подключаемые модули (использющие API web-сервера)
примеры API: Apache API, isapi, nsapi
примеры модулей: mod_perl, mod_php, mod_python,
Использование CGI как шлюза для подключения к внешним приложениям и сервисам
Слайд 4Преимущества CGI
Прозрачность использования;
"Языковая" независимость - CGI-программы могут быть написаны на
любом языке программирования или командном языке, имеющим средства работы со строками;
Процессная изолированность - при запуске CGI-програмы на сервере порождается отдельный процесс и ошибочный CGI-скрипт не может сломать Web-сервер или получить доступ к закрытой информации;
Открытость стандарта - CGI интерфейс применим на каждом Web-сервере;
Архитектурная независимость - CGI не зависит от особенностей реализации архитектуры сервера (однопоточности, многопоточности и т.д.);
Слайд 5Недостатки CGI
Большое время отклика, т.к. ко времени выполнения CGI-приложения добавляется время
на старт процесса
Не подходит для использования при интенсивной обработки запросов, т.к. создаёт большую нагрузку на сервер (накладные расходы на старт процессов, большой расход памяти при одновременном запуске множества скриптов)
CGI-программы не могут быть использованы на этапах HTTP-аутентификации пользователя и проверки прав доступа к ресурсу.
Слайд 6Преимущества FastCGI
Быстродействие, увеличенная пропускная способность
Простота применения и легкость миграции из CGI.
"Языковая" независимость
Изолированность процессов - "неисправные" FastCGI-программы не могут разрушить ядро сервера, нельзя получить служебную информацию сервера.
Совместимость – поддерживается рядом web-серверов.
Архитектурная независимость - интерфейс не зависит от особенностей реализации серверной архитектуры и прикладные программы могут быть как одно-, так и многопоточными.
Распределённость - FastCGI обеспечивает возможность выполнять приложения удаленно, что используется для распределенной загрузки и управления внешними Web-сайтами.
Слайд 7Недостатки FastCGI
Нестабильная работа (при подвисании обслуживающих процессов)
Необходимость жёстко следить за освобождением
ресурсов (возможны утечки памяти и т.п.)
Слайд 8Преимущества API
Максимальное быстродействие
Возможность тесного взаимодействия с сервером, обработки запроса на любой
стадии
Слайд 9Недостатки API
Неизолированность процесса –снижение общей надёжности, т.к. стабильность всего web-сервера зависит
от стабильности web-приложения
"Языковая" зависимость
Ограниченность применения – написанные программы в соответствии с данным API могут использоваться только на данном сервере
Повышенный расход памяти процесса web-сервера (каждый процесс web-сервера содержит в том числе код web-приложения)
Слайд 10Основные переменные окружения в 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)
Слайд 11Пример CGI-скрипта
#!/usr/bin/perl -w
use strict;
use CGI qw(:standard);
print header;
print start_html;
print ‘Hello, World!';
print end_html;
Слайд 12Пример 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;
}
Слайд 13Отделение логики от представления
Отделение бизнес-логики от контента
Отделение контента от дизайна
Преимущества:
Упрощение разработки
Разделение
сложного целого на составные части
Стимулирует бóльшую степень абстракции и структуризации
Разделение труда
Программист
Верстальщик
Дизайнер
Слайд 14Web-шаблоны
Шаблоны служат для отделения логики (программной части) динамического web-сайта от представления
(вёрстки, дизайна)
Виды шаблонов:
Статические – страница генерируется перед публикацией на сервере
Функционирующие на стороне сервера (server-side) – страница генерируется сервером «на лету»
Функционирующие на стороне клиента (client-side) – страница формируется на стороне клиента
Слайд 15Виды шаблонов по набору возможностей
Простые – только подстановка переменных.
Примеры: команда print
в Perl, echo в PHP "Hello $x“
С поддержкой итерации – возможности простых шаблонов + возможность повторения блоков с разными наборами данных.
Примеры: HTML::Template (Perl), phpBB-шаблоны
Сложные – поддержка логики, параметризация блоков, циклы, выражения.
Примеры: XSL, Template::Toolkit (Perl), Smarty (PHP)
Слайд 16Процессор шаблонов Template::Toolkit
Подстановка переменных:
[% variable %], [% var.subvar %]
Вызов процедур и
методов:
[% function() %], [% password.length %]
Выражения:
[% discount / 100 + 1 %]
Итераторы:
[% FOREACH r = rows %]
[% 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 %]
Слайд 17Пример шаблона Template::Toolkit
[% INCLUDE header title = 'This is an example'
%]
Some Interesting Links
[% webpages = [
{ url => 'http://foo.org',
title => 'The Foo Organisation' },
{ url => 'http://bar.org',
title => 'The Bar Organisation' }
]%]
Links:
[% INCLUDE footer %]
Слайд 18Схема работы web-приложения
Шаблон
Template
processor
Данные
БД
Готовая
HTML-
страница
Бизнес-
логика
Входные
пара-
метры
Слайд 19Архитектура MVC
(Model View Controller)
Слайд 20Архитектура MVC и классическая архитуктура domain/UI
View
Controller
Model
Бизнес-логика
предметной
области
(domain logic)
Пользова-
тельский
интерфейс
(UI)
Преимущества отделения пользовательского интерфейса от
логики предметной области:
это наиболее простой путь облегчить решение сложных задач
возможно создание нескольких различных интерфейсов, не изменяя логику предметной области
Слайд 21Компоненты архитектуры MVC
Шаблон MVC позволяет разделить данные,
представление и обработку действий
пользователя на
три отдельных компонента
Модель (Model). Модель предоставляет данные (обычно для View), а также реагирует на запросы (обычно от контролера), изменяя свое состояние .
Представление (View). Отвечает за отображение информации (пользовательский интерфейс).
Контролер (Controller). Интерпретирует данные, введенные пользователем, и информирует модель и представление о необходимости соответствующей реакции.
Слайд 22
Уточнённая схема работы
web-приложения
Шаблон
Template
processor
Данные
БД
Готовая
HTML-
страница
Вх. пара-
метры
C
M
V
Слайд 23Web-каркасы
Web-сервер
Каркас
web-приложения
Web-приложение
(бизнес-логика)
Сессии
Процессор
шаблонов
БД
Слайд 24Функции каркаса
Работа с сессией
Взаимодействие с web-сервером (раз-бор параметров, Cookie и т.п.)
Взаимодействие
с БД
Обработка шаблонов
Обработка ошибок
Базовая архитектура приложения (MVC и т.п.)
Журналирование
Вызов обработчиков страниц, поддержка переадресации между обработчиками
Слайд 25Примеры каркасов
Catalyst (Perl)
ASP.NET (C#, VB.NET)
Zope (Python)
Ruby On Rails (Ruby)
Spring, GRails (Java)
Cold
Fusion (CFML)
Слайд 26Web-сервер apache
Команды запуска/остановки/перезапуска:
/etc/init.d/httpd start|stop|restart|reload
apachectl start|stop|restart|reload
Файлы конфигурации:
/etc/httpd/
/etc/httpd/conf/httpd.conf
Слайд 27Файл конфигурации 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
Слайд 28Пример секции VirtualHost
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
AllowOverride All
DirectoryIndex /cgi-bin/index.fcgi
Redirect /icons/ http://www.icons.ru/
ScriptAlias /cgi-bin/ /www/site.ru/perl/
AddHandler cgi-script .cgi
Слайд 29Увеличение производительности web-решений
Модернизация аппаратного обеспечения
Оптимизация настройки ОС и web-сервера (введение кэширования,
отключение лишних модулей и т.п.)
Модернизация web-приложения
оптимизация узких мест
уменьшение объема требуемой памяти (отказ от лишних библиотек и т.п.)
кэширование данных из БД
Распределение нагрузки
Слайд 30Распределение нагрузки. Кластеры
Виды кластеров
Кластеры высокой надежности (HA)
Кластеры повышенной производительности (HPC)
Кластеры распределения
нагрузки (Load Balancing)
Серверные фермы (server farms)
Слайд 31Способы распределения нагрузки
Без использования посредников (Round robin DNS, использование разных доменов/поддоменов)
IP-level
(transparent proxy, layer 4 router)
Web-server level (reverse proxy, caching HTTP proxy)
Web-приложение делегирует выполнение определённых операций другим машинам
Распределённые базы данных
Выполнение сложных вычислений и обработки с привлечением дополнительных серверов
Эти способы могут произвольно комбинироваться.
Слайд 32Без использования посредников
Сервер 1
(IP 1)
Сервер 2
(IP 2)
Сервер 3
(IP 3)
Слайд 33Layer 4 router / transparent
IP proxy
Сервер 1
Сервер 2
Сервер 3
Transparent
IP proxy
(real IP)
Слайд 34Reverse HTTP proxy
Сервер 1
Сервер 2
Сервер 3
Reverse
HTTP proxy
(real IP)
Слайд 35Функции reverse proxy
Обеспечение безопасности (Security)
Шифрование (Encryption)
Компрессия (Compression)
Распределение нагрузки (load distribution)
Кэширование (caching)
Работа
с медленными клиентами (spoon feeding)
Слайд 36Делегирование отдельных задач / распределение нагрузки между БД
БД 1
БД 2
Application
server 1
Web
server
(real IP)
Application
server 2
Слайд 37Литература
Протокол CGI
http://python.onego.ru/course/lect8.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_%28computing%29
http://en.wikipedia.org/wiki/Layer_4_router