'

World Wide Web Обработка запросов на стороне сервера

Понравилась презентация – покажи это...





Слайд 0

World Wide Web Обработка запросов на стороне сервера Тема 8


Слайд 1

Обзор web-серверов Apache IIS – Internet Information Server (Microsoft) lighttpd tux (Red Hat) сервера, встроенные в платформы web-приложений (Zope)


Слайд 2

Взаимодействие web-приложений с web-серверами CGI – Common Gateway Interface FastCGI / PCGI (web-приложение – отдельный процесс) Подключаемые модули (использющие API web-сервера) примеры API: Apache API, isapi, nsapi примеры модулей: mod_perl, mod_php, mod_python, Использование CGI как шлюза для подключения к внешним приложениям и сервисам


Слайд 3

Преимущества CGI Прозрачность использования; "Языковая" независимость - CGI-программы могут быть написаны на любом языке программирования или командном языке, имеющим средства работы со строками; Процессная изолированность - при запуске CGI-програмы на сервере порождается отдельный процесс и ошибочный CGI-скрипт не может сломать Web-сервер или получить доступ к закрытой информации; Открытость стандарта - CGI интерфейс применим на каждом Web-сервере; Архитектурная независимость - CGI не зависит от особенностей реализации архитектуры сервера (однопоточности, многопоточности и т.д.);


Слайд 4

Недостатки CGI Большое время отклика, т.к. ко времени выполнения CGI-приложения добавляется время на старт процесса Не подходит для использования при интенсивной обработки запросов, т.к. создаёт большую нагрузку на сервер (накладные расходы на старт процессов, большой расход памяти при одновременном запуске множества скриптов) CGI-программы не могут быть использованы на этапах HTTP-аутентификации пользователя и проверки прав доступа к ресурсу.


Слайд 5

Преимущества FastCGI Быстродействие, увеличенная пропускная способность Простота применения и легкость миграции из CGI. "Языковая" независимость Изолированность процессов - "неисправные" FastCGI-программы не могут разрушить ядро сервера, нельзя получить служебную информацию сервера. Совместимость – поддерживается рядом web-серверов. Архитектурная независимость - интерфейс не зависит от особенностей реализации серверной архитектуры и прикладные программы могут быть как одно-, так и многопоточными. Распределённость - FastCGI обеспечивает возможность выполнять приложения удаленно, что используется для распределенной загрузки и управления внешними Web-сайтами.


Слайд 6

Недостатки FastCGI Нестабильная работа (при подвисании обслуживающих процессов) Необходимость жёстко следить за освобождением ресурсов (возможны утечки памяти и т.п.)


Слайд 7

Преимущества API Максимальное быстродействие Возможность тесного взаимодействия с сервером, обработки запроса на любой стадии


Слайд 8

Недостатки API Неизолированность процесса –снижение общей надёжности, т.к. стабильность всего web-сервера зависит от стабильности web-приложения "Языковая" зависимость Ограниченность применения – написанные программы в соответствии с данным API могут использоваться только на данном сервере Повышенный расход памяти процесса web-сервера (каждый процесс web-сервера содержит в том числе код web-приложения)


Слайд 9

Основные переменные окружения в 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)


Слайд 10

Пример CGI-скрипта #!/usr/bin/perl -w use strict; use CGI qw(:standard); print header; print start_html; print ‘<H1>Hello, World!</H1>'; print end_html;


Слайд 11

Пример 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; }


Слайд 12

Отделение логики от представления Отделение бизнес-логики от контента Отделение контента от дизайна Преимущества: Упрощение разработки Разделение сложного целого на составные части Стимулирует бoльшую степень абстракции и структуризации Разделение труда Программист Верстальщик Дизайнер


Слайд 13

Web-шаблоны Шаблоны служат для отделения логики (программной части) динамического web-сайта от представления (вёрстки, дизайна) Виды шаблонов: Статические – страница генерируется перед публикацией на сервере Функционирующие на стороне сервера (server-side) – страница генерируется сервером «на лету» Функционирующие на стороне клиента (client-side) – страница формируется на стороне клиента


Слайд 14

Виды шаблонов по набору возможностей Простые – только подстановка переменных. Примеры: команда print в Perl, echo в PHP "Hello $x“ С поддержкой итерации – возможности простых шаблонов + возможность повторения блоков с разными наборами данных. Примеры: HTML::Template (Perl), phpBB-шаблоны Сложные – поддержка логики, параметризация блоков, циклы, выражения. Примеры: XSL, Template::Toolkit (Perl), Smarty (PHP)


Слайд 15

Процессор шаблонов 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 %]


Слайд 16

Пример шаблона 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 %]


Слайд 17

Схема работы web-приложения Шаблон Template processor Данные БД Готовая HTML- страница Бизнес- логика Входные пара- метры


Слайд 18

Архитектура MVC (Model View Controller)


Слайд 19

Архитектура MVC и классическая архитуктура domain/UI View Controller Model Бизнес-логика предметной области (domain logic) Пользова- тельский интерфейс (UI) Преимущества отделения пользовательского интерфейса от логики предметной области: это наиболее простой путь облегчить решение сложных задач возможно создание нескольких различных интерфейсов, не изменяя логику предметной области


Слайд 20

Компоненты архитектуры MVC Шаблон MVC позволяет разделить данные, представление и обработку действий пользователя на три отдельных компонента Модель (Model). Модель предоставляет данные (обычно для View), а также реагирует на запросы (обычно от контролера), изменяя свое состояние . Представление (View). Отвечает за отображение информации (пользовательский интерфейс). Контролер (Controller). Интерпретирует данные, введенные пользователем, и информирует модель и представление о необходимости соответствующей реакции.


Слайд 21

Уточнённая схема работы web-приложения Шаблон Template processor Данные БД Готовая HTML- страница Вх. пара- метры C M V


Слайд 22

Web-каркасы Web-сервер Каркас web-приложения Web-приложение (бизнес-логика) Сессии Процессор шаблонов БД


Слайд 23

Функции каркаса Работа с сессией Взаимодействие с web-сервером (раз-бор параметров, Cookie и т.п.) Взаимодействие с БД Обработка шаблонов Обработка ошибок Базовая архитектура приложения (MVC и т.п.) Журналирование Вызов обработчиков страниц, поддержка переадресации между обработчиками


Слайд 24

Примеры каркасов Catalyst (Perl) ASP.NET (C#, VB.NET) Zope (Python) Ruby On Rails (Ruby) Spring, GRails (Java) Cold Fusion (CFML)


Слайд 25

Web-сервер apache Команды запуска/остановки/перезапуска: /etc/init.d/httpd start|stop|restart|reload apachectl start|stop|restart|reload Файлы конфигурации: /etc/httpd/ /etc/httpd/conf/httpd.conf


Слайд 26

Файл конфигурации 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


Слайд 27

Пример секции 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>


Слайд 28

Увеличение производительности web-решений Модернизация аппаратного обеспечения Оптимизация настройки ОС и web-сервера (введение кэширования, отключение лишних модулей и т.п.) Модернизация web-приложения оптимизация узких мест уменьшение объема требуемой памяти (отказ от лишних библиотек и т.п.) кэширование данных из БД Распределение нагрузки


Слайд 29

Распределение нагрузки. Кластеры Виды кластеров Кластеры высокой надежности (HA) Кластеры повышенной производительности (HPC) Кластеры распределения нагрузки (Load Balancing) Серверные фермы (server farms)


Слайд 30

Способы распределения нагрузки Без использования посредников (Round robin DNS, использование разных доменов/поддоменов) IP-level (transparent proxy, layer 4 router) Web-server level (reverse proxy, caching HTTP proxy) Web-приложение делегирует выполнение определённых операций другим машинам Распределённые базы данных Выполнение сложных вычислений и обработки с привлечением дополнительных серверов Эти способы могут произвольно комбинироваться.


Слайд 31

Без использования посредников Сервер 1 (IP 1) Сервер 2 (IP 2) Сервер 3 (IP 3)


Слайд 32

Layer 4 router / transparent IP proxy Сервер 1 Сервер 2 Сервер 3 Transparent IP proxy (real IP)


Слайд 33

Reverse HTTP proxy Сервер 1 Сервер 2 Сервер 3 Reverse HTTP proxy (real IP)


Слайд 34

Функции reverse proxy Обеспечение безопасности (Security) Шифрование (Encryption) Компрессия (Compression) Распределение нагрузки (load distribution) Кэширование (caching) Работа с медленными клиентами (spoon feeding)


Слайд 35

Делегирование отдельных задач / распределение нагрузки между БД БД 1 БД 2 Application server 1 Web server (real IP) Application server 2


Слайд 36

Литература Протокол 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


×

HTML:





Ссылка: