Презентация. Обзор Web

advertisement
Тема 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-запросах
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
print
print
print
header;
start_html;
‘<H1>Hello, World!</H1>';
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
(Model View Controller)
Архитектура MVC и классическая
архитуктура domain/UI
View
Пользовательский
интерфейс
(UI)
Бизнес-логика
предметной
области
(domain logic)
Controller
Model
Преимущества
отделения
пользовательского
интерфейса от логики
предметной области:
• это наиболее простой
путь облегчить
решение сложных
задач
•возможно создание
нескольких различных
интерфейсов, не
изменяя логику
предметной области
Компоненты архитектуры MVC
Шаблон MVC позволяет разделить данные,
представление и обработку действий
пользователя на три отдельных компонента
• Модель (Model). Модель предоставляет данные (обычно
для View), а также реагирует на запросы (обычно от
контролера), изменяя свое состояние .
• Представление (View). Отвечает за отображение
информации (пользовательский интерфейс).
• Контролер (Controller). Интерпретирует данные,
введенные пользователем, и информирует модель и
представление о необходимости соответствующей
реакции.
Уточнённая схема работы
web-приложения
Вх. параметры
Шаблон
Template
processor
Готовая
HTMLстраница
Данные
V
БД
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 / 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/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
Download