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

Nginx (engine X)

Автором Web-сервераnginxявляется Игорь Сысоев. Первая версия сервера вышла осенью 2004 года. Данный сервер специально разрабатывался как решение для испытывающих большую нагрузкуWeb-серверов. В отличие отApache, он использует другую идеологию, а именно: идеологию событий. Поступивший от клиента запрос не передается напрямуюworker'у, а вызывает событие, доходящее до свободного в данный моментworker'а через очередь событий. При этом каждыйworkerобслуживает одновременно несколько соединений, переключаясь между ними с помощью вызовов функций операционной системы. Точно так же и в обратную сторону: сервер не будет ждать, покаworkerотработает запрос. Как толькоworkerбудет готов - он "сообщит" об этом серверному процессу, тот заберет данные и передаст их клиенту. В результате распределение нагрузки получается более оптимальным. Соответственно, на одной и той же аппаратной платформеnginxможет обработать большее число запросов, чемApache.

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

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

Можно утверждать, что с почти 100% вероятностью все крупные существующие в интернете проекты имеют nginxв качестве "основного"Web-сервера (fron-end). А вот в качествеback-end'а, формирующего динамический контент, выбор технологий для разработчика довольно широк и некоего общепринятого решения здесь не существует.