Три самых популярных веб серверов. W3Tech: доля nginx в мире выросла до трети, Apache упал ниже половины

Несколько месяцев назад, в одной из своих прошлых статей, я опубликовал интересные данные от компании comScore, которая ежемесячно подсчитывает . Если вы читали ту статью, то, наверное, помните, что Россия стала лидером в Европе по числу интернет-пользователей. Так вот, сегодня я хочу предоставить вам еще одни достаточно интересные данные, но уже от другой, не менее популярной компании – от компании Netcraft. Сегодня мы с вами узнаем, сколько существует сайтов в сети Интернет, и какие web-серверы являются самыми популярными в мире.

Если верить компании Netcraft, то по состоянию на январь 2012 года в сети Интернет насчитывалось аж 582,72 млн. сайтов – это 27,23 млн. или на 4,9% больше, чем было зафиксировано месяцем ранее, то есть в декабре 2010 года. Как видите, с каждым месяцем «всемирная паутина» лишь разрастается, благодаря чему информационное пространство нашей планеты становиться все больше и больше. И заметьте, что это еще не предел. Эксперты прогнозируют, что количество пользователей и количество сайтов в сети Интернет продолжит увеличиваться, причем этот рост будет существенным – по крайней мере, в ближайшие годы.

Также расчеты компании Netcraft показывают, что web-сервер Apache продолжает оставаться самым популярным в мире – в январе 2012 года его рыночная доля составляла аж 64,91%.

А так, вообще-то, тройка лидеров выглядит следующим образом:

  • Apache – 64,91% (в декабре 2010 года было 65,22%);
  • Microsoft – 14,46% (14,86%);
  • nginx – 9,63% (8,85%).

Получается, что на текущий момент лишь российский web-сервер nginx увеличивает свою рыночную долю, в то время как лидеры ее теряют, хоть и очень медленными темпами. При этом стоит отметить один важный момент – если при статистических расчетах брать во внимание лишь активные сайты сети Интернет, то по итогам января 2012 года web-сервер nginx незначительно, но все-таки опередил в рейтинге web-сервер Microsoft.

  • Apache – 57,93% (месяц назад 58,21%);
  • nginx – 12,18% (11,61%);
  • Microsoft – 12,14% (12,31%);
  • Google – 7,90% (8,13%).

В этом случае рыночная доля также растет лишь у web-сервера nginx, тогда как остальные потихоньку теряют свои позиции. А ведь еще год назад, в январе 2011 года, рыночная доля российского web-сервера находилась на отметке 8,23%, в результате чего он занимал только четвертую позицию рейтинга, уступая и Microsoft (16,76%) и даже Google (11,90%). Таким образом, мы видим серьезный рост популярности nginx, и как говорят его представители, этот рост носит необратимый характер – по крайней мере, к концу 2012 года они рассчитывают увеличить свою рыночную долю до 18%. Цель реальная, поэтому пожелаем им удачи.

А чтобы достичь поставленных целей, летом 2011 года была создана компания «Nginx Inc.», которая теперь будет осуществлять все работы над проектом «nginx». При этом осенью того же 2011 года данная компания получила очень приличные инвестиции (3,0 млн. долларов), поэтому не стоит удивляться, если web-сервер nginx по итогам 2012 года все же увеличит свою рыночную долю до ожидаемых 18%. Так что нам остается лишь ждать и следить за новостями.

|

Приложения, разработанные в Ruby, можно развернуть в общий доступ при помощи одного из множества веб-серверов. Каждый веб-сервер уникален и имеет свои преимущества, однако у всех них есть кое-что общее: они основаны на интерфейсе Rack.

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

Примечание : Более подробную информацию о связующем программном обеспечении можно узнать .

Интерфейс Rack

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

Для этого в 2007 вышел Rack, модульный интерфейс веб-серверов Ruby. Сегодня он используется многими веб-серверами и фреймворками (Espresso, Mack, Ruby on Rails, Sinatra и т.п.).

Несмотря на соглашения об именовании и различные объяснения для разных языков программирования и доменов, спецификации для взаимодействия приложений очень похожи (если не идентичны). Хотя в отличие от спецификации Python WSGI, по примеру которой созданы Rack и множество других спецификаций, Rack является ещё и промежуточным программным обеспечением.

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

Обзор веб-серверов для Ruby

Теперь можно поговорить о наиболее популярных современных веб-серверах, понять их особенности и подобрать наиболее подходящее решение для своего приложения.

Примечание : Веб-серверы расположены в алфавитном порядке.

Phusion Passenger: быстрый веб-сервер и сервер приложений

Многие разработчики Ruby on Rails рекомендуют использовать для поддержки приложений именно Passenger. Это зрелый и многофункциональный сервер, который отвечает самым строгим требованиям развёртывания и позволяет упростить установку и запуск приложения. Он устраняет традиционную архитектуру на основе сервера-посредника путём прямой интеграции в веб-серверы Apache и Nginx. Поэтому в сообществе Ruby (Rails) он также часто упоминается как mod_rails и mod_rack.

Особенности Passenger

Passenger предоставляет возможность работать с несколькими приложениями, размещёнными на одном сервере.

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

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

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

Также коммерческая версия предоставляет множество «продвинутых» функций: параллелизм, многопоточность, массовое развертывание, управление ресурсами, ограничение ресурсов и др.

Примечание : Больше информации о Passenger можно найти на сайте проекта . О версии Passenger Enterprise – .

Puma: современный веб-сервер для Ruby

Puma – это высокопроизводительный веб-сервер для приложений Ruby. Он основан на веб-сервере Mongrel, который в своё время добавил несколько революционных функций и во многом повлиял на разработку приложений Ruby. Разработчик Puma (Evan Phoenix) трансформировал операционную структуру Mongrel, перейдя на Rack (и, таким образом, устраняя некоторые проблемы с производительностью), и разработал приложение для поддержки параллелизма.

Особенности Puma

Puma не требует много места и использует мало ресурсов.

Веб-сервер Puma предоставляет несколько режимов работы: он позволяет задать минимальное и максимальное количество потоков, а также поддерживает кластерный режим, в котором вы можете использовать разветвлённые процессы для одновременной обработки запросов.

Он основан на парсере Mongrel и во многом унаследовал его код.

Веб-сервер Puma разработан для Rubinius, но может работать и с JRuby

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

«Из коробки» Puma не поддерживает размещения и производства нескольких приложений, но это можно сделать с помощью специального инструмента Jungle.

Thin: простой и быстрый HTTP-сервер

Thin – это очень популярный сервер приложений; его создатели утверждают, что это наиболее «безопасный, стабильный, быстрый и расширяемый веб-сервер Ruby». Thin активно развивается. Он основан на трех основных библиотеках Ruby:

  • Парсер Mongrel.
  • Сетевая библиотека EventMachine
  • Промежуточное программное обеспечение Rack

Особенности Thin

HTTP-сервер Thin предназначен для работы с любым фреймворком, который реализует спецификацию Rack. Для этого он загружает конфигурационные файлы Rack.

Будучи основанным на EventMachine,Thin может обрабатывать длинные запросы без помощи обратного прокси-сервера (в отличие от некоторых других веб-серверов).

Примечание : Чтобы узнать о Thin больше, перейдите на сайт проекта .

Unicorn: HTTP-сервер на основе Rack для быстрых клиентов и Unix

Unicorn – это зрелый полнофункциональный сервер приложений для Ruby. Позже он был адаптирован для работы с Python. Принцип работы Unicorn таков: веб-сервер выполняет не все задачи, а только те, за которые отвечает непосредственно он, остальные задачи он передаёт другим программам, которые лучше справляются с их выполнением.

Особенности Unicorn

Главный процесс Unicorn порождает рабочие процессы для обработки запросов согласно заданным параметрам. Также этот процесс отслеживает рабочие процессы, чтобы предотвратить проблемы с ресурсами. То есть, если процесс требует много времени или ресурсов, сервер остановит его Unicorn.

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

Как и NGINX, Unicorn позволяет развертывать приложения, не сбрасывая текущих подключений клиентов. Это очень полезная функция при обновлении приложения.

Другие полезные функции Unicorn:

  • Все рабочие процессы запускаются в пределах определенного изолированного адресного пространства и обслуживают запросы по одному.
  • Хуки before_fork и after_fork позволяют бороться с ветвлением процессов.
  • Механизм копирования при записи для управления памятью позволяет экономить память.
  • Веб-сервер может прослушивать несколько интерфейсов.

Примечание : Больше о Unicorn – .

Tags: ,

Как правило, у рядового пользователя такие понятия, как «веб-сервер» или «хостинг», ассоциируются с чем-то абсолютно непонятным. Между тем, ничего сложного в этом вопросе нет. Попытаемся объяснить, что собой представляет 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. С другой стороны, для публикации примитивных страниц, содержащих в основном только текстовую информацию, можно использовать и эти начальные сведения.

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

Существует множество факторов, которые необходимо учитывать при выборе серверного окружения (environment), такие как производительность, масштабируемость, доступность, надежность, стоимость и простота управления.

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

1. Все на одном сервере

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

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

Плюсы:

  • Простота

Минусы:

  • Приложение и база данных используют одни и те же ресурсы сервера (CPU, память, I/O и т.д.), что, помимо потенциально низкой производительности, затрудняет определение источника (приложение или база данных) этой самой низкой производительности.
  • Затруднительно осуществлять горизонтальное масштабирование.

2. Выделенный сервер баз данных

Система управления базами данных (СУБД) может быть отделена от остального окружения, чтобы исключить конкуренцию за ресурсы сервера между приложением и базой данных и усилить безопасность, убрав базу данных из DMZ, общедоступного интернета.

Пример использования: Хорошо подходит для быстрого развертывания приложения, но при этом устраняет проблему конкуренции приложения и базы данных за одни системные ресурсы.

Плюсы:

  • Приложение и база данных не конкурируют за одни и те же ресурсы сервера (CPU, память, I/O и т.д.).
  • Вы можете вертикально масштабировать каждый компонент (приложение и базу данных) независимо друг от друга, добавляя дополнительные ресурсы к нужному серверу.
  • При определенных настройках это может повысить безопасность, убрав базу данных из DMZ.

Минусы:

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

3. Балансировщик нагрузки (обратный прокси)

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

Примеры программного обеспечения, поддерживающего обратный прокси: HAProxy, и Varnish.

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

Плюсы:

  • Делает возможным горизонтальное масштабирование, то есть ресурсы окружения могут быть увеличены путем добавления в него новых серверов.
  • Может защитить от DDOS-атак путем ограничения клиентских соединения до приемлемого количества и частоты.

Минусы:

  • Балансировщик нагрузки может стать узким местом в производительности, если он испытывает нехватку ресурсов или плохо настроен.
  • Может создать дополнительные сложности, требующие дополнительных усилий от администратора, например, работа с приложениями, которые требуют так называемых «липких сессий» (sticky session).

4. HTTP Accelerator (кэширующий обратный прокси)

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

Примеры программного обеспечения, поддерживающего HTTP acceleration: Varnish, Squid, Nginx.

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

Плюсы:

  • Повышает производительность сайта путем снижения нагрузки на процессор веб-сервера за счет кэширования и сжатия, тем самым увеличивая количество обслуживаемый пользователей.
  • Может быть использован как балансировщик нагрузки обратного прокси.
  • Некоторое программное обеспечение для кэширования может защищать от DDOS атак.

Минусы:

  • Требуется настройка для достижения наилучшей производительности.
  • Если сам характер запросов пользователей не предполагает возможности эффективного кэширования, это может снизить производительность сервера.

5. Репликация базы данных по схеме ведущий-ведомый (Master-Slave)

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

Пример использования: Дает хорошее увеличение производительности приложения в части чтения из базы данных.

Вот пример репликации базы данных по схеме ведущий-ведомый с одним ведомым узлом:

Плюсы:

  • Улучшает производительность чтения из базы данных путем распределения запросов на чтение между ведомыми узлами.
  • Может улучшить производительность записи путем использования ведущего узла исключительно для записи (таким образом он не тратит время на обслуживание запросов на чтение)

Минусы:

  • Приложение, работающее с базой данных, должно иметь механизм определения узлов, на которые необходимо отправлять запросы на чтение и запись.
  • Обновления ведомых узлов асинхронны, поэтому есть вероятность получить не самые свежие данные при запросе.
  • Если ведущий узел перестает работать, нельзя делать какие-либо обновления базы, пока проблема не будет устранена.
  • Не имеет встроенных резервных средств на случай выхода из строя главного узла.

Пример: комбинирование концепций

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

Вот примерная диаграмма того, как может выглядеть серверное окружение:

Давайте предположим, что балансировщик нагрузки настроен на распознавание статических запросов (таких как изображения, CSS, JavaScript и т.д.) и отправляет эти запросы к серверам кэширования, а все другие запросы — к серверам приложений.

Вот что будет происходить, когда пользователь отправит запрос на динамический контент:

  1. Пользователь запрашивает динамический контент с http://example.com/ (балансировщик нагрузки).
  2. Балансировщик нагрузки посылает запрос на сервер приложения (app-backend).

Если пользователь запрашивает статический контент:

  1. Балансировщик нагрузки проверяет кэш (cache-backend) на предмет того, закэширован ли запрашиваемый контент.
  2. Если закэширован , то запрашиваемый контент возвращается балансирощику нагрузки, переходим в шагу 7. Если не закэширован , то сервер кэширование перенаправит запрос на сервер приложения через балансировщик нагрузки.
  3. Балансировщик нагрузки перенаправит запрос на сервер приложения.
  4. Сервер приложения (app-backend) читает из базы и возвращает запрашиваемый контент обратно балансировщику нагрузки.
  5. Балансировщик нагрузки перенаправляет ответ к серверу кэширования (cache-backend).
  6. Сервер кэширования кэширует полученный контент и возвращает его балансировщику нагрузки.
  7. Балансировщик нагрузки возвращает запрашиваемый контент пользователю.

Данное окружение имеет две возможные точки отказа (балансировщик нагрузки и ведущий сервер базы данных), но обеспечивает другие преимущества в области надежности и производительности, описанные ранее в каждом из пунктов.

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



Загрузка...
Top