Как работает web сервер на компьютере. Архитектура сервера онлайн-игры на примере Skyforge

Как правило, у рядового пользователя такие понятия, как «веб-сервер» или «хостинг», ассоциируются с чем-то абсолютно непонятным. Между тем, ничего сложного в этом вопросе нет. Попытаемся объяснить, что собой представляет web server, зачем он нужен и как работает, особо не вдаваясь в технические подробности, а, так сказать, на пальцах. Отдельно остановимся на вопросе о том, как создать и настроить такой сервер на домашнем компьютерном терминале или ноутбуке.

Что такое веб-сервер?

Самое главное в данном вопросе - понять, что сервер такого типа является не чем иным, как компьютером в интернете с соответствующим установленным программным обеспечением.

Но это абсолютно не значит, что в домашних условиях нельзя создать собственную конфигурацию. Поскольку у нас более распространенными являются операционные системы Windows, вопросы о том, как создать веб-сервер на Ubuntu (Linux), рассматриваться не будут.

Для чего нужны web-серверы?

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

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

Как это все работает?

Все пользователи привыкли, что для входа на какой-то ресурс в интернете (веб-страницу), на котором располагается информация определенного типа, в адресной строке просто вводится префикс www (или http) и последующее имя. Но никто не задумывается о том, каким образом web server понимает запрос и выдает результат.

На самом деле здесь нужно различать понятия сервера и клиента. В нашем случае страница, размещенная в интернете, сохранена именно на удаленном сервере. Пользовательский компьютер выступает в роли клиента, от которого и производится обращение.

Для доступа в интернет применяются программы, называемые веб-браузерами. Они переводят пользовательский запрос в цифровой код, распознаваемый веб-сервером. Сервер его обрабатывает и выдает ответ в соответствующем коде, а браузер уже преобразует миллионы нулей и единиц в нормальный вид с текстовой, графической, звуковой или видеоинформацией, которая размещается на странице.

Самые популярные web-серверы

Из всего серверного программного обеспечения, как считается, самыми распространенными являются Apache и Microsoft IIS. Первый является более популярным и в большей степени используется в UNIX-подобных системах, хотя и может устанавливаться в среду Windows. Кроме того, сервер Apache является абсолютно бесплатным программрным обеспечением и совместим практически со всеми известными операционными системами. Однако, как отмечается, предназначено это ПО в основном для профессиональных программистов и разработчиков.

Программный продукт от Microsoft рассчитан на среднестатистического пользователя, который установить и настроить такой веб-сервер для Windows сможет без дополнительной помощи квалифицированного специалиста.

Тем не менее, если исходить из официальной статистики, программное обеспечение Apache использует порядка 60% всех существующих серверов, поэтому вопрос установки и настройки начальной конфигурации рассмотрим именно на его примере.

Веб-сервер на домашнем компьютере: установка

Для инсталляции потребуется скачать специальный серверный пакет, сокращенно обозначаемый как WAMP, в который входит три основных компонента:

  • Apache - программная оболочка сервера, которая может работать самостоятельно, но только в случае отсутствия на размещаемых страницах динамического контента.
  • PHP - язык программирования, используемый надстройками для управления серверами с динамическим содержимым вроде WordPress, Joomla, Drupal.
  • MySQL - унифицированная система управления базами данных, используемая, опять же, при создании сайтов с динамическим контентом.

Инсталляцию можно произвести из пакета WampServer. Для этого достаточно следовать указаниям «Мастера», который на одной из стадий предложит выбрать интернет-браузер, который будет использоваться по умолчанию.

Для этого нужно будет перейти в папку с исполняемым файлом браузера (если это не Internet Explorer, обычно она располагается в директории Program Files). Попутно сам браузер следует добавить в список исключений брэндмауэра Windows. На финишной стадии ставится галочка напротив пункта немедленного запуска, после чего в системном трее появится соответствующий значок, на который нужно нажать и изменю выбрать запуск локального хоста (localhost).

Если все сделано правильно, появится домашняя страница сервера. Далее будет предложено инсталлировать дополнительные компоненты (если этого не сделать, система выдаст ошибку). В основном инсталляция касается дополнительных надстроек, элементов и компонентов, которые будут использоваться сервером в дальнейшем.

Пример настройки и тестирования сервера

Настройка веб-сервера несколько сложнее. Сначала в меню системного трея выбирается переход в папку WWW (место хранения надстроек или файлов HTML). После этого прописать следующий текст в «Блокноте»:

WAMP тест!

Привет!

"; ?>

Можете просто скопировать текст в «Блокнот» и сохранить файл под именем index.php в той самой папке WWW (хотя можно обойтись и без того, поскольку этот шаг применяется исключительно для проверки локального хоста). Вместо приветствия можете вставить любой другой текст или фразу.

Затем в браузере нужно обновить страницу (F5), после чего на экране отобразится содержимое. Но для других компьютеров страница будет недоступна.

Чтобы открыть доступ, нужно изменить файл httpd.conf, прописав в разделе, который начинается с следующие строки:

Order Allow,Deny

Вместо послесловия

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

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

Составляющие клиент-серверной схемы

Посмотрим, из чего состоит сам сервер и без каких внешних компонент он не может обходиться. Во-первых, сервер теряет свой смысл в отсутствие клиентов. Принцип работы сервера - реализовывать нужды клиентов. Клиент формирует требования к серверу и берет на себя некоторую долю его работы. Поэтому чаще говорят не просто о сервере, а о системе клиенты-сервер. Клиент составляет запросы к серверу, посредством которых изъявляет свою волю. Посему следующим, вторым компонентом системы будет тот формальный язык, на котором эти запросы составляются. Этих языков великое множество и выбор того или иного напрямую зависит от сервера. Запросы до сервера должны как-то доставляться. Третий элемент - канал связи клиента и сервера, по которому передаются данные. Это чаще всего либо локальная сеть, либо Интернет, либо локальные связи одной машины. Пришедший запрос сервер должен как-то принять и распознать. Принимающее устройство - так называемый внешний интерфейс, представляет собой несколько портов, которые сервер непрерывно (или не непрерывно) слушает. Принятые запросы отправляются в программную часть сервера, где и обрабатываются в соответствии с тем, как сервер запрограммирован. И в зависимости от принятого запроса, запускается тот или иной сервис с теми или иными начальными данными. Сервисы и будут последней составляющей системы. После окончания работы сервиса результат выполнения отсылается клиенту по тому же каналу связи. Или, если сервис интерактивный, то и в процессе его работы будет интенсивный обмен данными по каналу «клиент-сервер».

Для чего нужен сервер

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

Плюсы и минусы модели

Плюсы очевидны - сам принцип работы сервера обеспечивает удобство работы с системой, простоту управления ею, правильное распределение нагрузки на машины. А минусом является язык запросов и связанные с ним компоненты. Если пользователь случайно или умышленно отсылает на сервер неверно сформулированный запрос, то если такая ошибка не была предусмотрена программистом, система даст сбой. Сведущие люди составляют заведомо неверные запросы так, чтобы система, призванная выдавать клиенту прогноз погоды, вывела злоумышленнику, например, данные кредитных карт всех пользователей (если, конечно, за данные карт и за прогноз погоды отвечает один и тот же сервер). И счастливый злоумышленник сначала идёт и перечисляет себе все деньги всех пользователей сервиса, а затем долго и вдумчиво убегает от управления «К», расследующего это преступление.

Безопасность

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

Внимание! Данная программа не является обязательной. Если Вы решили ее использовать, то рекомендуем поручить установку и настройку данной программы специалисту, например, администратору сети.

Скачать программу можно с сайта по следующему адресу:

Общее описание

Сервер предназначен для обслуживания баз данных в формате DВase и Paradox с использованием драйверов BDE фирмы Inprise (Borland). Кроме того, он может выступать в роли Web-сервера.

При модификации базы (добавление, удаление, изменение) используется технология «клиент-сервер». Доступ к базе данных на чтение обеспечивается стандартными средствами BDE по технологии «файл-сервер». При этом клиентские программы открывают файлы базы данных только на чтение, а любое изменение данных осуществляет сервер.

Использование сервера позволяет избежать проблем, связанных с одновременным изменением базы несколькими пользователями через сеть. Сервер модифицирует базу в монопольном режиме. Благодаря этому обеспечивается надежное хранение и безопасная модификация данных.

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

Сервер может работать на компьютерах с установленной операционной системой Windows 95/98/2000/XP/Vista, Windows NT и настроенным протоколом TCP/IP . При работе под Windows NT, возможна установка сервера как сервиса.

Сервер может одновременно обслуживать несколько баз данных.

Контроль работы сервера может осуществляться дистанционно с помощью любого Web-браузера, например, Netscape Navigator, Microsoft Internet Explorer и т.п.

Установка сервера

Программа сервера может работать на любом компьютере в сети. Предварительно на этом компьютере необходимо установить и настроить BDE . Настройка BDE для сервера аналогична настройке BDE для работы Инфо-Бухгалтера (см. раздел Ошибка: источник перёкрестной ссылки не найден «Ошибка: источник перёкрестной ссылки не найден»).

Если база данных располагается на этой же машине, что и программа-сервер, то необходимо использовать команду SUBST (для Windows 95/98/2000/XP/7), так как название сетевого диска и путь к базе должны быть одинаковы для всех машин, в том числе и для машины с сервером.

Установите сервер на выбранную машину.

Вставьте дистрибутивный диск в привод CD-ROM и запустите файл InfoSrv203_setup. exe , располагающийся в директории \Setup\Infosvr\Server2 . Далее следуйте инструкциям программы установки.

После установки в каталоге с сервером будут содержаться следующие файлы и подкаталоги:

    ibserv32.exe – сервер программы Инфо-Бухгалтер;

    ibserv32.ini – файл настроек сервера;

    WWW – подкаталог Web-сервера.В каталоге WWW по умолчанию содержатся файлы:

    index.html – HTML-скрипт для отображения статистики работы сервера. В этом каталоге Вы можете размещать свои файлы, которые будут доступны по HTTP протоколу.

    stat.html – пример файла шаблона статистики работы Инфо-Бухгалтера.

В процессе работы сервера создаются файлы:

    ibserv.log – информация о работе сервера.

    ibserv.jrn – журнал работы сервера.

Журнал создается только в том случае, если в файле ibserv32.ini параметр sqlTrace =1.

Установка сервера в качестве сервиса Windows NT

Для регистрации сервера необходимо запустить программу ibserv32 с ключом /i ., т.е. ibserv32. exe /i .

После этого средствами Windows NT (значок «Службы» в «Панели управления») установить необходимый режим работы сервиса (автомат или вручную). Имя сервиса – «InfoBuhDBServer».

Внимание! Необходимым условием правильной работы программы является эквивалентность путей к базе данных, а также путей к файлу P doxusrs.net , на сервере и рабочей станции (использование команды SUBST невозможно). Одному из локальных дисков сервера необходимо присвоить букву, совпадающую с названием сетевых дисков на рабочих станциях. Для правильного определения локальных и сетевых путей необходимо открыть корень этого диска на полный доступ, а с рабочих станций подключить корень этого диска в качестве сетевого диска.

Обязательно необходимо определить учетную запись, под которой будет запускаться сервер. В данной учетной записи должен быть указан пользователь с необходимыми полномочиями, например, Администратор.

Для удаления сервиса остановите его средствами Windows NT (Пункт «Службы» в «Панели управления»), а затем запустите ibserv32 с ключом /u .

Настройка сервера

Настройка сервера осуществляется посредством файла ibserv32.ini .

Рассмотрим назначение секций этого файла:

Запуск сервера

Запуск сервера осуществляется запуском файла ibserv32.exe . Если сервер установлен, как сервис для Windows NT, то запуск осуществляется автоматически или вручную с помощью значка «Службы» в «Панели управления».

Контроль работы сервера

Контроль работы сервера осуществляется с помощью консоли сервера:

Рис 19. Сервер программы «Инфо-Бухгалтер».

Внимание! При установке сервера в качестве сервиса Windows NT консоль недоступна.

Контроль работы сервера может также осуществляться удаленно при помощи Web-браузера (Netscape Navigator или Microsoft Internet Explorer).

Дополнение к HTML для контроля сервера

Для контроля работы сервера применяется динамический HTML, создаваемый по шаблону. В этом шаблоне Вы можете использовать следующие обозначения переменных:

##SERVREGIM# – режим работы сервера

##SERVOSVERSION# – версия ОС сервера

##SERVVERSION# – версия сервера

##SERVTIME# – текущее время на сервере

##LONGTIME# – время работы сервера

##IBZAPROS# – количество выполненных запросов

##IBBASE# – количество открытых баз

##IBERROR# – возникло ошибок

В каталоге WWW директории, где установлена программа, находится файл stat.html , содержащий пример файла шаблона статистики работы Инфо-Бухгалтера.


Рис 20. Файл статистики stat.html .

Настройка программы для работы с сервером

На компьютере с установленным Инфо-Бухгалтер в каталоге Windows (или другом каталоге, в который установлен Windows) находится файл ibw.ini . В этот файл в секцию необходимо внести следующие изменения:

После изменения параметров в этом файле, необходимо перезагрузить программу и, если изменился параметр UseServer , то удалить файлы Eventnet.db и Eventnet.px во всех используемых базах данных.

Внимание!

  • Нельзя одновременно работать с одной базой данных пользователям, использующим и не использующим сервер;
  • При переходе к использованию сервера и обратно (параметр UseServer ) необходимо уничтожать файлы Eventnet.db и Eventnet.px во всех используемых Вами базах. Невыполнение этого требования может привести к непредсказуемым последствиям;
  • При использовании сервера невозможна проверка базы данных.
  • 283 просмотра

В этой статье я постараюсь максимально широко изложить схемы работы веб-серверов. Это поможет выбрать сервер или решать, какая архитектура быстрее, не основываясь на часто необъективных бенчмарках.

В общем - статья представляет собой глобальный обзор "что бывает". Без циферок.

Статья написана на основе опыта работы с серверами:

  • Apache, Lighttpd, Nginx (на C)
  • Tomcat, Jetty (на Java)
  • Twisted (Python)
  • Erlang OTP (язык Erlang)
  • и операционными системами Linux, FreeBSD

Тем не менее, принципы достаточно общие, поэтому должны распространяться в каком-то виде на OS Windows, Solaris, и на большое количество других веб-серверов.

Цель веб-сервера

Цель веб-сервера проста - обслуживать одновременно большое количество клиентов, максимально эффективно используя hardware. Как это сделать - в этом основная заморочка и предмет статьи;)

Работа с соединениями

С чего начинается обработка запроса? Очевидно - с приема соединения от пользователя.

Для этого в разных OS используются разные системные вызовы. Наиболее известный и медленный на большом количестве соединений - select . Более эффективные - poll, kpoll, epoll.

Современные веб-серверы постепенно отказываются от select.

Оптимизации ОС

Еще до приема соединения возможны оптимизации на уровне ядра ОС. Например, ядро ОС, получив соединение, может не беспокоить веб-сервер, пока не произошло одно из событий.

  • пока не пришли данные (dataready)
  • пока не пришел целиком HTTP-запрос (httpready)

На момент написания статьи оба способа поддерживаются во FreeBSD (ACCEPT_FILTER_HTTP, ACCEPT_FITER_DATA), и только первый - в Linux (TCP_DEFER_ACCEPT).

Эти оптимизации позволяют серверу меньше времени простаивать в ожидании данных, повышая таким образом общую эффективность работы.

Соединение принято

Итак, соединение принято. Теперь на плечи сервера ложится основная задача - обработать запрос и отослать ответ посетителю. Будем здесь рассматривать только динамические запросы, существенно более сложные, чем отдача картинок.

Во всех серверах используется асинхронный подход.

Он заключается в том, что обработка запроса спихивается куда-нибудь "налево" - отдается на выполнение вспомогательному процессу/потоку, а сервер продолжает работать и принимать-отдавать на выполнение все новые соединения.

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

Основные стратегии работы с worker"ами

Работа с воркерами состоит из нескольких элементов, которые можно по-разному комбинировать и получать разный результат.

Тип worker"а

Основных типов два - это процесс и поток. Для улучшения производительности иногда используют оба типа одновременно, порождая несколько процессов и кучу потоков в каждом.

Процесс

Различные worker"ы могут быть процессами. В этом случае они не взаимодействуют между собой, и данные различных worker"а полностью независимы друг от друга.

Поток

Потоки, в отличие от процессов, имеют общие, разделяемые структуры данных. В коде worker"а должна быть реализована синхронизация доступа, чтобы одновременная запись одной и той же структуры не привела к хаосу.

Адресное пространство

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

Внутри сервера

При работе внутри сервера - worker имеет доступ к данным сервера. Он может поменять любые структуры и делать разные гадости, особенно если написан с ошибками.

Плюсом является отсутствие пересылки данных из одного адресного пространства в другое.

Снаружи сервера

Worker может быть запущен вообще независимо от сервера и принимать данные на обработку по специальному протоколу (например FastCGI).

Конечно, этот вариант - самый безопасный для сервера. Но требует дополнительной работы по пересылке запроса - результата между сервером и worker"ом.

Рождение worker"ов

Чтобы обрабатывать много соединений одновременно - нужно иметь достаточное количество рабочих.

Основных стратегий - две.

Статика

Количество рабочих может быть жестко фиксированно. Например, 20 рабочих процессов всего. Если же все рабочие заняты и приходит 21й запрос - сервер выдает код Temporary Unavailable - "временно недоступен".

Динамика

Для более гибкого управления ресурсами - рабочие могут порождаться динамически, в зависимости от загрузки. Алгоритм порождения рабочих может быть параметризован, например (Apache pre-fork), так:

  • Минимальное количество свободных рабочих = 5
  • Максимальное количество свободных рабочих = 20
  • Всего рабочих не более = 30
  • Начальное количество рабочих = 10

Чистка между запросами

Рабочие могут либо заново инициализовать себя между запросами, либо - просто обрабатывать запросы один за другим.

Чистый

Перед каждым запросом очищается от того, что было раньше, чистит внутренние переменные и пр.

В результате нет проблем и ошибок, связанных с использованием переменных, оставшихся от старого запроса.

Персистентный

Никакой очистки состояния. В результате - экономия ресурсов.

Разбор типичных конфигураций

Посмотрим, как эти комбинации работают на примере различных серверов.

Apache (pre-fork MPM) + mod_php

Для обработки динамических запросов используется модуль php, работающий в контексте сервера.
  • Процесс
  • Внутри сервера
  • Динамика
  • Чистый

Apache (worker MPM) + mod_php

Для обработки динамических запросов используется модуль php, работающий в контексте сервера.

При этом, так как php работает в адресном пространстве сервера, разделяемые потоками данные периодически портятся, поэтому связка нестабильна и не рекомендована. Это происходит из-за ошибок в mod_php, который включает в себя ядро PHP и различные php-модули.

Ошибка в модуле, благодаря одному адресному пространству, может повалить весь сервер.

  • Поток
  • Внутри сервера
  • Динамика
  • Чистый

Apache (event mpm) + mod_php

Event MPM - это стратегия работы с worker"ами, которую использует только Apache. Все - точно так же, как с обычными потоками, но с небольшим дополнением для обработки Keep-Alive

Установка Keep-Alive служит для того, чтобы клиент мог прислать много запросов в одном соединении. Например, получить веб-страницу и 20 картинок. Обычно, worker заканчивает обработку запроса - и ждет какое-то время (keep-alive time), не последуют ли в этом соединении дополнительные запросы. То есть, просто висит в памяти.

Event MPM создает дополнительный поток, который берет на себя ожидание всех Keep-Alive запросов, освобождая рабочего для других полезных дел. В результате, общее количество worker"ов значительно сокращается, т.к никто теперь не ждет клиентов, а все работают.

  • Поток
  • Внутри сервера
  • Динамика
  • Чистый

Apache + mod_perl

Особенность связки Apache с mod_perl - в возможности вызывать Perl-процедуры по ходу обработки запроса апачем.

Благодаря тому, что mod_perl работает в одном адресном пространстве с сервером - он может регистрировать свои процедуры через Apache hooks, на разных стадиях работы сервера.

Например, можно работать на той же стадии, что и mod_rewrite, переписывая урл в хуке PerlTransHandler.

Следующий пример описывает rewrite с /example на /passed, но на перле.

# в конфиге апача при включенном mod_perl PerlModule MyPackage::Example PerlTransHandler MyPackage::Example # в файле MyPackage/Example.pm package MyPackage::Example use Apache::Constants qw(DECLINED); use strict; sub handler { my $r = shift; $r->uri("/passed") if $r->uri == "/example" return DECLINED; } 1;

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

В отличие от mod_php, перловый модуль персистентен, т.е не инициализует себя заново каждый раз. Это удобно, т.к освобождает от необходимости загружать заново большую пачку модулей перед каждым запросом.

  • Процесс/поток - зависит от MPM
  • Внутри сервера
  • Динамика
  • Персистентный

Twisted

Этот асинхронный сервер написан на Python. Его особенность - в том, что программист веб-приложения сам создает дополнительных рабочих и дает им задания. # пример кода на сервере twisted # долгая функция, обработка запроса def do_something_big(data): .... # в процессе обработки запроса d = deferToThread (do_something_big, "параметры") # привязать каллбеки на результат do_something_big d.addCallback(handleOK) # .. и на ошибку при выполнении do_something_big d.addErrback(handleError)

Здесь программист, получив запрос, использует вызов deferToThread для создания отдельного потока, которому поручено выполнить функцию do_something_big. При успешном окончании do_something_big, будет выполнена функция handleOK, при ошибке - handleError.

А текущий поток в это время продолжит обычную обработку соединений.

Все происходит в едином адресном пространстве, поэтому все рабочие могут разделять, например, один и тот же массив с пользователями. Поэтому на Twisted легко писать многопользовательские приложения типа чата.

  • Поток
  • Внутри сервера
  • Динамика
  • Персистентный

Tomcat, Servlets

Сервлеты - классический пример поточных веб-приложений. Единый Java-код приложения запускается во множестве потоков. Синхронизация обязательна и должна выполняться программистом.

  • Поток
  • Внутри сервера
  • Динамика
  • Персистентный

FastCGI

FastCGI - интерфейс общения web-сервера с внешними worker"ами, которые обычно запущены как процессы. Сервер в специальном (не HTTP) формате передает переменные окружения, заголовки и тело запроса, а worker - возвращает ответ.

Есть два способа порождения таких worker"ов.

  1. Интегрированный с сервером
  2. Отдельный от сервера

В первом случае сервер сам создает внешние рабочие процессы и управляет их числом.

Во втором случае - для порождения рабочих процессов используется отдельный "spawner", второй, дополнительный сервер, который умеет общаться только по FastCGI-протоколу и управлять рабочими. Обычно spawner порождает рабочих в виде процессов, а не потоков. Динамика/Статика - определяется настройками spawner"а, а Чистый/Персистентный - характеристиками рабочего процесса.

Пути работы с FastCGI

С FastCGI можно работать двумя путями. Первый способ - самый простой, его использует Apache.

получить запрос -> отдать на обработку в FastCGI -> подождать ответа -> отдать ответ клиенту.

Второй способ используют сервера типа lighttpd/nginx/litespeed/и т.п.

получить запрос -> отдать на обработку в FastCGI -> обработать других клиентов -> отдать ответ клиенту, когда придет.

Отмеченное отличие позволяет Lighttpd + fastcgi работать эффективнее, чем это делает Apache, т.к пока процесс Apache ждет - Lighttpd успевает обслужить другие соединения.

Режимы работы FastCGI

У FastCGI есть два режима работы.
  • Responder - обычный режим, когда FastCGI принимает запрос и переменные, и возвращает ответ
  • Authorizer - режим, когда FastCGI в качестве ответа разрешает или запрещает доступ. Удобно для контроля за закрытыми статическими файлами

Оба режима поддерживаются не во всех серверах. Например, в сервере Lighttpd - поддерживаются оба.

FastCGI PHP vs PERL

PHP-интерпретатор каждый раз очищает себя перед обработкой скрипта, а Perl - просто обрабатывает запросы один за другим в цикле вида:

Подключить модули; while (пришел запрос) { обработать его; print answer; } Поэтому Perl-FastCGI гораздо эффективнее там, где большУю часть времени выполнения занимают include вспомогательных модулей.

Резюме

В статье рассмотрена общая структура обработки запросов и виды worker"ов. Кроме того, заглянули в Apache Event MPM и способы работы с FastCGI, посмотрели сервлеты и Twisted.

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