logo search
Проектирование инт-прил / лекции / Проектирование инет приложений

Web-серверы

Web-сервер - это совокупность аппаратно-программных средств, которая принимаетHTTP-запросы от клиентов (как правило -Web-браузеров) и выдаетHTTP-ответы. В простом случае "ответ"Web-сервера - это содержание расположенных на нем файлов: документов, изображений, фильмов и так далее. Такие данные называют статическими: если пользователь запросит несколько раз информацию по одному и тому же адресу -Web-сервер выдаст в точности одно и то же содержимое. Для динамического подхода, то есть когда выдаваемая информация будет меняться во времени и/или зависеть от параметров запроса, одногоWeb-сервера недостаточно. В этом случаеWeb-сервер служит переходным звеном между клиентом и некой программной средой, формирующей содержимоеHTML-страницы. И здесь напрашивается вопрос: а зачем тогда нуженWeb-сервер, если динамическую страницу все равно формирует приложение?

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

Проблемы начинаются тогда, когда число одновременно работающих клиентов превышает некоторое критическое значение. И одна из функций Web-сервера - это максимально возможное снижение нагрузки за счет ее распределения по разным частям системы. Оптимизация может затрагивать не только работу самогоWeb-сервера, но и начинаться непосредственно с уровня ядра операционной системы. Современные операционные системы могут быть настроены таким образом, что - после соединения от клиента - они не будут "беспокоить"Web-сервер до тех пор, пока не произойдет одно из следующих событий:

Такой подход позволяет Web-серверу меньше времени простаивать в ожидании получения данных, повышая эффективность системы в целом.

Все современные ("полновесные") Web-серверы используют асинхронную обработку поступающих от клиентов запросов. То есть, после получения запроса от клиента сервер переадресует этот запрос потоку обработчика (worker'у). Сам сервер при этом продолжает принимать запросы от клиентов и переадресовывать их обработчикам. Существует несколько стратегий работы с обработчиками.

Комбинируя эти факторы, можно попытаться добиться наилучшей производительности системы в целом.

Для логического разделения, оптимального распределения нагрузки по вычислительным мощностям Worker'ы могут запускаться и на другом (-их) компьютере (-ах), не обязательно на том же самом, где расположен сам принимающий запросы от клиентов сервер. В этом случае общение между сервером иWorker'ом происходит по определенному сетевому протоколу. Это уже не может бытьHTTP, потому что вместе с полученным запросомworker'у передается расширенная информация об окружении сервера. В частности, в качестве такого протокола общения может применятьсяFastCGI.

В современном интернете существует, как минимум, несколько десятков решений на тему Web-серверов, как бесплатных, так и коммерческих. Как правило, коммерческие продукты имеют графический интерфейс управления и настройки сервера, с ними работать гораздо проще. В противоположность этому, свободно распространяемые программные продукты обычно конфигурируются при помощи текстовых файлов.

Ниже приводится график популярности применяемых в интернете серверов по данным сайта netcraft.

    1. Apache

Apacheимеет ряд достоинств:

Кроме режима работы с Worker'ами, серверapacheимеет режим работыprefork. Отличается от тем, что для работы каждого клиентаapacheсоздает отдельный процесс, полностью обслуживающий данного клиента: принятие от него запроса, формирование контента и выдачи результата.

Конфигурирование сервера в оригинальном его варианте (без использования сторонних утилит) происходит с помощью текстовых файлов. Основным из них является файл httpd.conf. В зависимости от операционной системы, файл этот может располагаться в разных каталогах на диске. Например, при установке сервера дляMSWindows, конфигурация читается из файлаc:\Apache2\conf\httpd.conf. Однако этот файл, скорее всего, не будет являться единственным местом, определяющим конфигурацию запускаемого сервера. Во-первых, он может включать в себя другие конфигурационные файлы при помощи директивыInclude. При этом располагаться они могут в любом месте дискового пространства. Во-вторых, как правило, каждый создаваемый виртуальный хост имеет свою отдельную часть конфигурации, где указывается корневой директорий этого виртуального хоста, местоположение журналов доступа и ошибок и так далее.

Такой подход нельзя назвать наглядным, хотя он и позволяет реализовать абсолютно все допустимые для сервера функции. Для придания процессу конфигурирования визуальности существует несколько Web-интерфейсов для сервераApache. Как правило,Web-конфигураторы являются платными сторонними продуктами.

Сервер Apacheбыл написан в начале 1995 года, является одним из старейших серверов интернета. Однако его идеология не позволяет говорить об обработке большой нагрузки наWeb-сервера. Он работает по принципу "новый запрос - новый поток". Поэтому возможна ситуация, когдаApacheна данном оборудовании исчерпал свои возможности. Есть несколько вариантов улучшения данной ситуации, и один из них связан с использованием сервераnginx.