Web-серверы
Web-сервер - это совокупность аппаратно-программных средств, которая принимаетHTTP-запросы от клиентов (как правило -Web-браузеров) и выдаетHTTP-ответы. В простом случае "ответ"Web-сервера - это содержание расположенных на нем файлов: документов, изображений, фильмов и так далее. Такие данные называют статическими: если пользователь запросит несколько раз информацию по одному и тому же адресу -Web-сервер выдаст в точности одно и то же содержимое. Для динамического подхода, то есть когда выдаваемая информация будет меняться во времени и/или зависеть от параметров запроса, одногоWeb-сервера недостаточно. В этом случаеWeb-сервер служит переходным звеном между клиентом и некой программной средой, формирующей содержимоеHTML-страницы. И здесь напрашивается вопрос: а зачем тогда нуженWeb-сервер, если динамическую страницу все равно формирует приложение?
Действительно, если нагрузка на приложение невелика - скажем, несколько одновременно подключенных пользователей (единицы) - то Web-сервер не является абсолютно необходимым звеном. Практически все существующие на сегодняшний день пакеты разработкиWeb-приложений (фреймворки) имеет в своем составе "легковесный"Web-сервер. Достаточно запустить среду разработки на выполнение - и к ней можно подсоединиться браузером и работать с ней по протоколуHTTP.
Проблемы начинаются тогда, когда число одновременно работающих клиентов превышает некоторое критическое значение. И одна из функций Web-сервера - это максимально возможное снижение нагрузки за счет ее распределения по разным частям системы. Оптимизация может затрагивать не только работу самогоWeb-сервера, но и начинаться непосредственно с уровня ядра операционной системы. Современные операционные системы могут быть настроены таким образом, что - после соединения от клиента - они не будут "беспокоить"Web-сервер до тех пор, пока не произойдет одно из следующих событий:
в клиентской сокете приняты данные, с нее можно что-то читать.
пришел HTTP-запрос целиком.
Такой подход позволяет Web-серверу меньше времени простаивать в ожидании получения данных, повышая эффективность системы в целом.
Все современные ("полновесные") Web-серверы используют асинхронную обработку поступающих от клиентов запросов. То есть, после получения запроса от клиента сервер переадресует этот запрос потоку обработчика (worker'у). Сам сервер при этом продолжает принимать запросы от клиентов и переадресовывать их обработчикам. Существует несколько стратегий работы с обработчиками.
Количество worker'ов может быть жестко задано. При старте сервера запускается, например, 10 потоков. При получении 11-го запроса сервер выдаст клиенту ответ "временно недоступен".
Worker'ы могут порождаться сервером динамически в зависимости от загрузки. При этом оговаривается начальное числоworker'ов, максимально допустимое количество, минимальное и максимальное количество свободныхworker'ов.
Workerможет быть как процессом, так и потоком. Различные процессы не взаимодействуют между собой и не могут разделять данные. В отличие от процессов, потоки имеют общее разделяемое пространство данных и могут обмениваться информацией между собой.
Worker'ы - процессы могут запускаться как внутри "родительского" серверного процесса, так и снаружи. При последнем вариантеworker'ы могут быть распределены по разным компьютерам.
Worker'ы - вне "родительского" сервера могут представлять собой непосредственно процессы средыWeb-приложения (фреймворка).
Сервер может отслеживать разные варианты распределения нагрузки между порожденными Worker'ами: равномерную или поочередную загрузку.
Комбинируя эти факторы, можно попытаться добиться наилучшей производительности системы в целом.
Для логического разделения, оптимального распределения нагрузки по вычислительным мощностям Worker'ы могут запускаться и на другом (-их) компьютере (-ах), не обязательно на том же самом, где расположен сам принимающий запросы от клиентов сервер. В этом случае общение между сервером иWorker'ом происходит по определенному сетевому протоколу. Это уже не может бытьHTTP, потому что вместе с полученным запросомworker'у передается расширенная информация об окружении сервера. В частности, в качестве такого протокола общения может применятьсяFastCGI.
В современном интернете существует, как минимум, несколько десятков решений на тему Web-серверов, как бесплатных, так и коммерческих. Как правило, коммерческие продукты имеют графический интерфейс управления и настройки сервера, с ними работать гораздо проще. В противоположность этому, свободно распространяемые программные продукты обычно конфигурируются при помощи текстовых файлов.
Ниже приводится график популярности применяемых в интернете серверов по данным сайта netcraft.
Apache
Apacheимеет ряд достоинств:
Он бесплатен. Распространяется под своей собственной лицензией, которая по своей сути сводится к одному требованию: пользователь должен быть извещен, что в данном программном продукте использован код оригинального сервера Apache. При этом сам код может быть как угодно модифицирован и не обязательно оставаться бесплатным. Пользователь имеет право использовать данныйWeb-сервер так, как считает нужным: извлекать с его помощью прибыль, продавать его и так далее.
Распространяется в открытых исходных кодах. Как следствие, существуют сборки Apacheпрактически под все существующие операционные системы, в том числе и под встраиваемые (embedded) ОС. Кроме готовых сборок, всегда есть возможность собрать сервер из исходных текстов под Ваш вариант конфигурации операционной системы.
Является очень гибким, допуская в своей конфигурации большое число настроек. Это достоинство одновременно является и его недостатком: для правильной конфигурации Apacheнеобходима соответствующая квалификация.
Поддерживает расширения в виде подключаемых модулей. При этом модуль может как войти в состав сервера, так и быть собран в виде отдельной динамически загружаемой библиотеки. За счет использования модулей Apacheможет объединить в себе обе составные частиWeb-приложения: какHTTP-сервер, так и среду программирования. Для этой цели существуют модули, позволяющие выполнять - либо в рамкахWorker'а, либо прямо в рамках работающегоHTTP-серверного процесса - скрипты на нескольких языках:PHP,Python,Ruby,Perl,ASP,Tcl.
Поддерживает виртуальные хосты. Причем для каждого из виртуальных хостов может быть своя конфигурация сервера за счет разных подключаемых модулей.
Поддерживает мультипроцессный режим, мультипоточный, а так же комбинации из этих режимов.
Умеет работать с протоколами CGI,FastCGI,WSGIи другими "переходными" протоколами (gatewayinterfaces). Что позволяет в качествеworker'ов запускать приложения, написанные на любых языках программирования и расположенные не обязательно на том же самом хосте, где и сам сервер.
Позволяет создавать распределенные системы за счет механизмов кластеризации и распределения нагрузки.
Кроме режима работы с Worker'ами, серверapacheимеет режим работыprefork. Отличается от тем, что для работы каждого клиентаapacheсоздает отдельный процесс, полностью обслуживающий данного клиента: принятие от него запроса, формирование контента и выдачи результата.
Конфигурирование сервера в оригинальном его варианте (без использования сторонних утилит) происходит с помощью текстовых файлов. Основным из них является файл httpd.conf. В зависимости от операционной системы, файл этот может располагаться в разных каталогах на диске. Например, при установке сервера дляMSWindows, конфигурация читается из файлаc:\Apache2\conf\httpd.conf. Однако этот файл, скорее всего, не будет являться единственным местом, определяющим конфигурацию запускаемого сервера. Во-первых, он может включать в себя другие конфигурационные файлы при помощи директивыInclude. При этом располагаться они могут в любом месте дискового пространства. Во-вторых, как правило, каждый создаваемый виртуальный хост имеет свою отдельную часть конфигурации, где указывается корневой директорий этого виртуального хоста, местоположение журналов доступа и ошибок и так далее.
Такой подход нельзя назвать наглядным, хотя он и позволяет реализовать абсолютно все допустимые для сервера функции. Для придания процессу конфигурирования визуальности существует несколько Web-интерфейсов для сервераApache. Как правило,Web-конфигураторы являются платными сторонними продуктами.
Сервер Apacheбыл написан в начале 1995 года, является одним из старейших серверов интернета. Однако его идеология не позволяет говорить об обработке большой нагрузки наWeb-сервера. Он работает по принципу "новый запрос - новый поток". Поэтому возможна ситуация, когдаApacheна данном оборудовании исчерпал свои возможности. Есть несколько вариантов улучшения данной ситуации, и один из них связан с использованием сервераnginx.
- Оглавление
- Введение.
- Предмет рассмотрения данного курса.
- Одно-, двух- и многоуровневые приложения.
- Интернет.
- Адрес в интернете
- 2001:0Db8:11a3:09d7:1f34:8a2e:07a0:765d
- Имя в интернете
- Службы (сервисы)
- Сокета.
- Что такое "сокета" (socket) ?
- Создание серверной сокеты (пример на языке c).
- Сериализация
- Основы верстки: таблицы
- Основы верстки: фреймы
- Основы верстки: позиционирование участков сайта
- Протокол http
- Структура запроса (Request).
- Структура ответа (Response).
- Перспективы развития http.
- Интернет-приложения
- Web-приложения
- Web-сервисы
- Особенности проектирования
- Особенности пользовательского интерфейса
- Программирование интернет-приложений
- Объектно-ориентированное программирование
- Классы и объекты
- Жизненный цикл класса
- Статические члены класса
- Инкапсуляция
- Наследование
- Полиморфизм
- Интерфейсы
- Событийно-ориентированное программирование
- Совместная работа над проектом
- Технологии создания web-клиентов
- Dom (Document Object Model)
- Каскадные таблицы стилей
- JavaScript
- Обфускация и динамическое получение скриптов
- Java Applets
- ActiveX/npapi
- Adobe Flash
- Web-серверы
- Nginx (engine X)
- Технологии, применяемые на стороне сервера
- ИнтерфейсCgi
- КонцепцияMvc
- Сервлеты
- JavaScript
- Хранение данных