1 / 37

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

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

step
Télécharger la présentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  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-запросах 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 Имя файла со скриптом

  11. Пример CGI-скрипта #!/usr/bin/perl -w use strict; use CGI qw(:standard); print header; print start_html; print ‘<H1>Hello, World!</H1>'; 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. Отделение логики от представления • Отделение бизнес-логики от контента • Отделение контента от дизайна Преимущества: • Упрощение разработки • Разделение сложного целого на составные части • Стимулирует бóльшую степень абстракции и структуризации • Разделение труда • Программист • Верстальщик • Дизайнер

  14. Web-шаблоны • Шаблоны служат для отделения логики (программной части) динамического 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 %] <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 %]

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

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

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

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

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

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

  23. Web-каркасы 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)

  26. Web-сервер 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 <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>

  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)

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

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

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

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

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

More Related