top of page

Лёгкие Web-серверы

Специализированные HTTP-приложения дополняют Apache и другие ведущие Web-серверы

Последние годы порадовали расцветом интересных реализаций Web-серверов, например, lighttpd, litespeed и mongrel. Достоинствами этих Web-серверов являются различные сочетания производительности, удобства администрирования, портативности, безопасности и других преимуществ. Представленный ниже технический анализ сегмента лёгких Web-серверов призван помочь вам найти среди них наиболее соответствующий требованиям вашего следующего проекта.

0 Комментарии:

Камерон Лейрд, вице-президент, Phaseit, Inc

23.10.2007

Применение в проектах "лёгких" Web-серверов, таких как lighttpd, litespeed и mongrel, дает впечатляющие преимущества. В этой статье мы представляем обзор возможностей и показываем, как их можно применять.

Что должен делать Web-сервер?

В первую очередь надо понять, что мы исследуем (подробности см. в разделе Ресурсы). Основное действие конечного пользователя в Интернете – это "переход на Web-страницу". На самом общем уровне это предполагает совместную работу пары приложений:

  • Web-браузера, такого как Firefox или Internet Explorer, который показывает в удобной для человеческого восприятия форме запрашиваемую страницу, которую он получает от…

  • Web-сервера, находящегося, как правило, на удалённой машине, который отвечает на запрос страницы потоком данных в формате HTML или аналогичном.

С браузерами имеют дело Web-пользователи, которые подходят к их выбору и анализу с надлежащей тщательностью. Напротив, серверы видны только техническому персоналу сайтов. Более того, хотя существует множество различных Web-серверов, около 90% всех сайтов, согласно недавним исследованиям Netcraft, работают всего на двух из них - Apache и Internet Information Server (IIS). Оба эти сервера – тщательно проработанные продукты, обладающие не только очень длинным списком встроенных возможностей, но и процветающим "вторичным рынком" книг, дополнений, консультаций, провайдеров и т.д. Надо ли вновь изобретать обычное колесо?

Да. Web-сервер оценивается по целому ряду важнейших параметров:

  • Эффективность: как быстро он отвечает на запрос?

  • Масштабируемость: продолжает ли сервер работать надёжно, когда к нему одновременно обращаются много пользователей?

  • Безопасность: совершает ли сервер только те операции, которые должен? Какие возможности он предлагает для аутентификации пользователей и шифрования потока обмена информацией? Делает ли его использование более уязвимыми соседние приложения или хосты?

  • Работоспособность: какие у сервера режимы отказа и аварийные ситуации?

  • Соответствие стандартам: поддерживает ли сервер соответствующие RFC?

  • Гибкость: можно ли настроить сервер для принятия большого количества запросов или динамических страниц, требующих значительных вычислений, или сложной аутентификации, или ...?

  • Требования к платформе: на каких платформах возможно использование сервера? Предъявляет ли он особые требования к аппаратной платформе?

  • Управляемость: легко ли установить и обслуживать сервер? Совместим ли он с организационными стандартами по ведению журналов, аудиту, оценке затрат и т.д.?

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

Самое интересное в лёгких Web-серверах, то, почему они заслуживают такого обзора, как этот – это их далеко не теоретическая конкурентоспособность. Внимательное исследование показывает, что они могут предложить очень многое и за счёт этого успешно конкурировать с Apache и IIS даже во многих обычных ситуациях. Хотя разумно было бы предположить, что лидеры рынка тщательно оптимизированы, чтобы быть непобедимыми (например) в производительности, многие мелкие конкуренты работают быстрее при простом отображении статических Web-страниц. Если вы проделаете свои собственные тесты с этими Web-серверами, у вас возникнет чувство, что вы случайно оказались на гоночном треке на карте и каким-то непостижимым образом обгоняете «порше» и «вайперы». И это еще не всё: временами лёгкие Web-серверы дополняют своих больших братьев, а не только соревнуются с ними. Даже если вы знаете, что будете использовать Apache, иногда удается получить от него гораздо больше, объединив его с лёгким партнёром. Часто наилучшее решение состоит в кооперации между двумя или более Web-серверами.

В начало

Лёгкость Web-сервера

"Лёгкость", на которой фокусируется этот обзор – это скорее субъективная характеристика, как "искусство" или "аромат". Обычно "лёгкий" подразумевает простой, легко инсталлируемый, хорошо налаженный, нетребовательный и устойчивый – меньшего размера и менее сложный, чем Apache и IIS, которые в попытке удовлетворить свой большой рынок превратились в довольно громоздкие конструкции. Из-за сложности и размера мы исключаем из рассмотрения Java Web Server, AOLserver и Zeus, несмотря на их интригующую переносимость и производительность.

Достаточно лёгкие серверы открывают возможности, недоступные лидерам рынка и другим "тяжёлым" альтернативам. К примеру, весь сервер может поместиться в одном файле. Это удобно для разработчика, так как позволяет носить с собой все инструменты, которые нужны ему для продуктивной работы; даже если вы используете на вашем производственном сервере Apache, вы можете сидеть в гостиничном номере и экспериментировать с новыми идеями, запуская их на лёгком сервере, инсталляция которого занимает секунды. Также из-за своей нетребовательности лёгкие серверы успешно функционируют на машинах, которые просто не могут выдержать тяжесть IIS.

Упаковка в один файл

Упаковка в один файл

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

Маленькие лёгкие Web-серверы также неплохо работают на машинах малой производительности. В нашей собственной компании (Phaseit – см. врезку) мы используем специализированное оборудование, работающее на промышленных компьютерах в удалённых системах, в жёстких условиях или в условиях недостаточного электропитания. В этих ситуациях большим преимуществом является возможность обрабатывать Web-страницы каким-то приложением, которое не требует большой производительности или пространства на диске; это значит, что наши машины могут иметь встроенные доступные через Web управляющие консоли, без сложностей разработки и накладных расходов, характерных для Apache.

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

  • YouTube использует lighttpd для быстрой доставки архивированного контента, например, видео;

  • cdServe работает на CD-дисках "German Woodworking Machinery and Tools";

  • LiteSpeed «отметился» в twitter, www.funnyoride.com, www.airliners.com, WordPress.com, fanfiction.com, SlashGear, www.forumactif.com и в других заметных Web-сайтах;

  • OpenSUSE, RubyOnRails, MarkaBoo и несколько других заметных сайтов опираются на Mongrel;

  • thttpd работает на ht.com, mtv.com, The Drudge Report, garfield.com и др.

  • и т.д.

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

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

Лёгкие серверы играют свою роль даже в реальных вычислительных центрах, включая перечисленные выше солидные сайты и не только их. Особо высокопроизводительные сайты сегментируют свои операции, чтобы извлечь максимальную выгоду из кэширования, прокси-серверов и т.д. Сайт на основе Apache, к примеру, может иметь архитектуру, в которой медленно изменяющиеся изображения доставляются посредством «минималистского» Web-сервера из выделенной файловой системы. То, что видит в действительности конечный пользователь – это результат командной работы Apache и одного или нескольких дополнительных Web-серверов, каждый из которых играет роль, в которой он превосходит остальных. Такая конструкция может дать очень быстрые результаты с минимальными затратами на вычисления.

В начало

Цели и средства

Хотя лёгкие Web-серверы имеют много общего, внутри данной категории есть и различия. Большинство серверов написаны на C, но среди серверов, которые я тестировал, есть и ряд успешных реализаций на других языках, в том числе на Erlang, Java, Lisp, Lua, Perl, Python и Tcl. Если вы предпочитаете какой-либо язык, вы, возможно, найдёте Web-сервер, написанный на нем.

Для того чтобы выбрать "редкий" язык, может быть множество специфических причин:

  • Образование: работа с лёгким Web-сервером – это серьёзная, но не запредельная задача. Это хороший способ получить опыт работы с языком.

  • Кооперация: в то время как лёгкий Web-сервер, написанный на С, обычно укладывается в 10-50 килобайт, а исполняемые файлы более высокоуровневых языков занимают от 100 килобайт до нескольких мегабайт, исходный код для полного Web-сервера на языке высокого уровня может занимать всего несколько тысяч байт. Такой небольшой код намного легче использовать совместно с коллегами, чем модифицировать Apache.

  • Исследование: языки высокого уровня делают облегчают эксперименты – например, для добавления новых возможностей HTTP/1.1 может потребоваться всего несколько дополнительных строчек кода. Эти лёгкие серверы – удобный экспериментальный материал.

  • Модификация: добавление HTTP-сервера к существующему приложению, уже написанному на языке высокого уровня, может потребовать увеличения исходного кода всего на несколько строк.

Хорошим примером здесь может служить Athana. Это Web-сервер, написанный на Python. Он поддерживает HTTP multipart (uploading), сессии, cookies и многое другое. Существующий в настоящее время в версии 0.2.1, Athana пока помещается в одном прекрасно организованном исходном файле.

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

Какие конкретные продукты стоят за этими возможностями? Даже ограничившись "лёгкими" серверами, мы получаем необозримо огромный выбор. Рассмотрим эти серверы по подкатегориям: ультралёгкие, особо защищенные, использующие особый язык и так далее.

Среди этих категорий я особенно люблю ультралёгкие Web-серверы – те, которые намного меньше, чем Apache. Приложения такого размера могут уместиться в голове обычного человека; их работу можно представить себе систематически и строго, чтобы строго доказать их безопасность или масштабируемость. К числу очень маленьких Web-серверов относятся:

  • Cheetah Server, содержащий менее тысячи строк на C.

  • DustMote, очень маленький Web-сервер, реализованный в одном Tcl-исходнике размером примерно 3000 байт.

  • fnord занимает менее 20K, в зависимости от платформы и конфигурации. Несмотря на маленький размер, он поддерживает виртуальный хостинг, CGI и keep-alive.

  • ihttpd, имея менее 800 строчек C, умеет обслуживать страницы, включая CGI, посредством inetd.

  • mattows поддерживает CGI, насчитывая при этом всего лишь 600 строк на C.

  • Scrinchy, несмотря на маленький размер - около 30 KB - поддерживает примечательно много языков сценариев, включая специализированный стековый язык под названием Sy.

  • ZWS показывает, как можно написать содержательное приложение – в данном случае сервер HTTP 0.9+ – немногим более чем из 500 строк хорошо откомментированного zsh (!).

Маленький размер не препятствует серьёзному использованию этих серверов; fnord, например, обслуживает тысячи одновременных соединений.

Возможно, наиболее впечатляющая категория легких серверов по достижениям – высокопроизводительные серверы:

  • cghttpd – минимальный Web-сервер, который можно рассматривать как эксперимент по использованию асинхронных средств, доступных в ядрах Linux серии 2.6.

  • darkhttpd – быстрый однопоточный сервер HTTP/1.1.

  • Gatling специально разработан для высокой производительности. Поддерживает FTP, IPv6, виртуальный хостинг, CGI и т.п.

  • Kernux – модуль ядра Linux, который обеспечивает выполнение HTTP-демона.

  • lighttpd – пятый по популярности Web-сервер в мире (и его доля растет!). Он оптимизирован под большое количество одновременных соединений: "Типичный сценарий – использование lighttpd как сервера, разгружающего основной сервер, для выдачи статического контента..."

  • LiteSpeed Web Server – коммерческий лёгкий Web-сервер, в котором особый упор сделан на производительность и безопасность. LiteSpeed Technologies Inc. заявляет об ускорении в шесть раз для статического контента и несколько более скромных показателях для интерпретируемых страниц.

  • Miniature JWS, известный также как tjws - написанный на Java Web-сервер, который обрабатывает сервлеты, JSP и тысячи параллельных соединений, занимая 77 килобайт. Его автор характеризует его так: "на 10% быстрее, чем Apache 2.x."

  • Yaws – высокопроизводительный сервер HTTP/1.1, написанный на Erlang.

Многие Web-серверы реализованы как классы или библиотеки, разработанные для встраивания в большие приложения. Среди них особенно интересны:

  • EHS – "встраиваемый HTTP сервер," класс C++, разработанный для встраивания в большие C++ приложения; и

  • Embedded TCL Web Server, простейший Web-сервер, поддерживающий SSL и Basic Authentication и при этом фантастически быстрый – по замерам автора, не менее быстрый, чем lighttpd и AOLserver. Содержит меньше сотни строк Tcl.

На языке Python реализованы несколько Web-серверов, которые заполняют необычные ниши, в том числе:

  • cdServer - маленький простой http-сервер на Python, "разработанный для выдачи (статического) контента с CD-ROM". Имеет ограниченные возможности в обслуживании динамического контента. У нас есть несколько проектов, которые включают доставку непортящихся "live CD", и инструменты типа cdServer являются для них критическими.

  • edna – остроумный MP3-сервер на Python, основанный на HTTP.

Есть и другие интересные лёгкие Web-серверы, реализованные на Perl и на других, не так хорошо известных, языках:

  • Camlserv – полный Web-сервер, написанный на ocaml и нацеленный на "высокоинтерактивные Web-страницы". Умещается в нескольких тысячах строчек ocaml, большинство из которых посвящено специальным возможностям работы с MySQL и HTML.

  • dhttpd протоколирует обращения в том же формате, что и Apache. Имеет встроенный Perl-интерпретатор для поддержки CGI, виртуальный хостинг, IPv6, управление пропускной способностью и возможности безопасности.

  • DNHTTPD написан на Perl для UNIX®. Он поддерживает виртуальные хосты, SSL соединения, CGI и другое.

  • Jellybean – написанный на Perl сервер Perl Object Server, основанный на HTTP.

  • lns.http – общая Web-среда на LISP HTTP/1.1.

  • Mongrel – библиотека и сервер для HTTP, написанные на Ruby.

  • Nanoweb – быстрый, устойчивый Web-сервер, написанный на PHP. Имеет обширный список возможностей, включая полное соответствие HTTP/1.1, контроль обращений, аутентификацию, виртуальный хостинг, SSL совместимость и т.д.

  • Naridesh – написанный на Perl Web-сервер.

  • OpenAngel – написан на Perl. Его фокус – безопасность.

  • Xavante – HTTP/1.1 Web-сервер, написанный на Lua.

  • XSP написан на C# и выполняет роль ведущего узла ASP.NET.

Однажды вам могут понадобиться и некоторые другие написанные на C лёгкие Web-серверы с необычными дополнительными возможностями:

  • ABYSS переносим между UNIX и Win32 и претендует на то, чтобы "быть полностью HTTP/1.1-совместимым Web-сервером". Экономичен в использовании памяти.

  • Anti-Web HTTPD (также "Anti-Web", "awhttpd" и "AW") однопроцессный (не многопоточный), поддерживающий CGI сервер, в котором особое внимание уделено безопасности и простоте.

  • MHTTPD поддерживает MHTTPD Basic Authentication как из внешнего файла, так и при помощи LDAP-сервера.

  • mini-httpd обрабатывает параллельные запросы в одном потоке и нетребователен к хосту в плане памяти и процессора.

  • Naken Web похож на множество других лёгких серверов – поддерживает Basic Authentication, статический контент и т.д. – но авторы нацеливали его на операции для Web-камер и применяли на Gumstix, WRT54GL, OpenWrt и других инновационных платформах.

  • Null httpd – многопоточный, но простой и портативный Web-сервер.

  • Seminole – коммерческий Web-сервер, не требует много памяти и имеет много возможностей.

  • thttpd поддерживает регулирование пропускной способности, реализует chroot, Basic Authentication и т.д.

В начало

Заключение

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

 

Ресурсы

Научиться

  • Lightweight Web servers – оригинал этой статьи на developerWorks (EN).

  • LinuxLinks и Wikipedia – обновляемый список лёгких Web-серверов.(EN)

  • Хотите узнать, какое серверное ПО работает на данном сайте (или Заявлено как работающее)? Посмотрите в Netcraft(EN).

  • Netcraft считает что 1.2% (или пятое место) на рынке Web-серверов принадлежит lighttpd, и Serverwatch считает, что рост обусловлен администраторами, которые ищут альтернативу Apache(EN).

  • Три венгерских исследователя описывают "Портативные минимальные Web-серверы (Portableminimal Web servers)" на примерах двух серверов, написанных ими на C и bash, соответственно (EN).

  • "Реализация лёгкого Web-сервера для объединения ресурсов и масштабируемости (Implementing a Lightweight Web Server for Resource Pooling and Scalability)" – типичные для всех упомянутых здесь серверов рекомендации по применению и модели использования, хотя язык реализации, Java, представлен среди них в меньшинстве (EN).

  • Изобретатель REBOL показывает возможности языка на примере этого одностраничного Web-сервера, написанного на REBOL (EN).

  • Другие статьи для Web-разработчиков можно найти в нашей технической библиотеке (EN).

  • Подписка на наши новости.(EN)

Получить продукты и технологии

  • Скачать бесплатно пробное ПО от IBM, включая таких любимцев публики, какIBMHTTP-сервер, WebSphereApplication Server Community Edition и другие.(EN)

Обсудить

  • Примите участие в обсуждении материала на форуме.

  • Вступайте в сообщество developerWorks: исследуйте блоги, форумы, рабочее пространство и т.д.(EN)

 

Комментарии

Войти or зарегистрироваться чтобы оставить комментарий.

Добавить комментарий:

Внимание: HTML элементы не поддерживаются в комментариях.

                                            2015  Даниил Никифоров

bottom of page