Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

Чтобы обойти вышеупомянутые недостатки Mongrel и Rails, предпочтительной настройкой в ​​производственном приложении является Apache или nginx в качестве основного веб-сервера, и если запрос на не- получена статическая страница Rails, чтобы передать это в ряд основных mongrels, пусть mongrel рука назад отведенная страница к Apache/nginx и обслуживать эту страницу вместе со статическими файлами, такими как изображения / stylesheets/â € | Сначала это может показаться немного сложным и сложным, но как только вы на самом деле его реализуете, он чрезвычайно мощный и стабильный (I имеют несколько приложений, которые работают от нескольких месяцев до нескольких лет на сервер без единого перезапуска). Это сводится к этому, пусть Apache/nginx делает то, на что лучше всего, пусть mongrel кластер делать то, что он лучше всего, все счастливы.

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

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

Apache vs Nginx

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

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

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

Mongrel vs WEBrick

Mongrel - это сервер приложений Ruby. В конкретных терминах это означает, что Mongrel - это приложение, которое:

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

WEBrick делает то же самое. Различия с Монгрелем:

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

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