Разница между Nginx и Mongrel?

Я часто читал о совместном использовании Nginx и Mongrel. Может кто-нибудь объяснить мне, чем они отличаются? Зачем нужен Дворняга? Почему не рекомендуется напрямую связывать Nginx со многими серверами Rails?


person user782220    schedule 04.10.2012    source источник


Ответы (2)


Оба являются веб-серверами, но они не разделяют одну и ту же цель:

  • Mongrel — это, по сути, сервер приложений ruby, который представляет собой HTTP-интерфейс. Он делает одно: принимает запрос, передает его вашему ruby-коду и возвращает ответ в http. Он не обрабатывает параллелизм или какие-либо функции, связанные с производительностью. Один mongrel означает, что есть один ruby-процесс, который будет обрабатывать запросы.
  • Nginx — полнофункциональный веб-сервер, нацеленный на производительность. Он может обеспечить высокую производительность при работе со статическими файлами и не может напрямую обрабатывать Ruby, Python или любой другой язык. Для этого он использует FastGCI или прокси для других серверов приложений.

Чтобы было ясно, ваше приложение rails само по себе не может использоваться напрямую, ему нужно то, что вы можете назвать контейнером (я предлагаю вам прочитать кое-что о http://rack.github.com/), в данном случае Mongrel. Когда вы запускаете консоль rails, это обычно webrick, самый простой сервер веб-приложений, который у нас есть в Ruby (это часть стандартной библиотеки).

Тогда почему мы используем Nginx впереди? Давайте рассмотрим, что мы используем только Mongrel : мы запускаем экземпляр mongrel, прослушивая порт 80. Если для выполнения ваших запросов требуется, например, 500 мс, вы можете обрабатывать 2 клиента в секунду, не более того. Но подождите, этого явно недостаточно. Давайте запустим еще один экземпляр дворняги. Но мы не можем заставить его прослушивать порт 80, так как он уже используется первым экземпляром, и мы ничего не можем с этим поделать.

Итак, нам нужно что-то впереди, что может обрабатывать несколько экземпляров Mongrel, продолжая прослушивать порт 80. Вы добавляете сервер Nginx, который будет (прокси) отправлять запросы на множество ваших экземпляров mongrel, и теперь вы можете добавить больше экземпляров, чтобы обслуживать больше. клиентов одновременно.

Вернемся к ответу на ваш вопрос: наличие связи NGinx с сервером rails означает запуск одного или нескольких Mongrel (или Thin / Unicorn, независимо от того, какой сервер доступен) и информирование NGinx о том, что он должен передавать им запросы. Это популярный шаблон для размещения сервисов rails рядом с Passenger, который, по сути, предоставляет рабочим Apache способ обработки кода ruby.

person jhchabran    schedule 04.10.2012

Разница между Nginx и Mongrel

Оба действительно являются HTTP-серверами, но их цель различна. Mongrel — это быстрый HTTP-сервер, предназначенный в основном для приложений на основе Ruby. его легко расширить с помощью кода Ruby. Однако он не очень хорошо обслуживает статические файлы, т.е. медленнее, чем Apache и nginx. Кроме того, Rails является однопоточным, а это означает, что во время выполнения запроса (вызов метода контроллера до фактического рендеринга) дворняга блокируется.

Чтобы обойти упомянутые выше недостатки Mongrel и Rails, предпочтительнее установить в рабочем приложении Apache или nginx в качестве основного веб-сервера, а если получен запрос на нестатическую страницу Rails, передать его на номер нижележащих ублюдков, позвольте ублюдку передать обработанную страницу обратно в Apache/nginx и обслуживать эту страницу вместе со статическими файлами, такими как изображения/таблицы стилей/… Поначалу это может показаться немного пугающим и сложным, но как только вы на самом деле реализуете это чрезвычайно мощный и стабильный (у меня есть несколько приложений, которые работают на сервере месяцами и годами без единого перезапуска). Это сводится к следующему: пусть Apache/nginx делают то, что у них получается лучше всего, пусть ублюдочный кластер делает то, что у него получается лучше всего, все довольны.

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

для получения дополнительной информации

Apache против Nginx

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

Ни Apache, ни Nginx не могут обслуживать приложения Rails «из коробки». Для этого вам нужно использовать Apache/Nginx в сочетании с каким-либо дополнением, описанным ниже.

Apache и Nginx также могут действовать как обратные прокси-серверы, то есть они могут принимать входящие HTTP-запросы и перенаправлять их на другой сервер, который также использует HTTP. Когда этот сервер отвечает HTTP-ответом, Apache/Nginx пересылает ответ обратно клиенту. Позже вы узнаете, почему это важно.

Дворняга против WEBrick

Mongrel — это «сервер приложений» Ruby. Конкретно это означает, что Mongrel — это приложение, которое:

  1. Загружает ваше приложение Rails в собственное пространство процесса.
  2. Устанавливает сокет TCP, позволяя ему общаться с внешним миром (например, с Интернетом). Mongrel прослушивает HTTP-запросы на этом сокете и передает данные запроса в приложение Rails. Затем приложение Rails возвращает объект, описывающий, как должен выглядеть ответ HTTP, а Mongrel заботится о преобразовании его в фактический ответ HTTP (фактические байты) и отправляет его обратно через сокет.

WEBrick делает то же самое. Отличия от Дворняги:

  • Он полностью написан на Ruby. Mongrel — это часть Ruby, часть C; в основном Ruby, но его парсер HTTP написан на C для повышения производительности.
  • WEBrick медленнее и менее надежен. Он имеет некоторые известные утечки памяти и некоторые известные проблемы синтаксического анализа HTTP.
  • WEBrick обычно используется только как сервер по умолчанию во время разработки, потому что WEBrick по умолчанию включен в Ruby. Mongrel нужно устанавливать отдельно. Никто не использует WEBrick в производственной среде.

Еще один сервер приложений Ruby, относящийся к той же категории, — Thin. Хотя он внутренне отличается как от Mongrel, так и от WEBrick, он подпадает под одну категорию, когда речь идет об использовании и его общей роли в стеке серверов.

person Dipak Panchal    schedule 04.10.2012