Зачем использовать Mongrel2?

Я смущен, какая цель Mongrel2 обслуживает/предоставляет nginx еще не делает.

(Да, я читал manual, но я должен быть слишком большим, чтобы понять, как это принципиально отличается от nginx)

Мой текущий стек веб-приложений:
- nginx: веб-сервер
- Lua: язык программирования
- FastCGI + LuaJIT: для подключения nginx к Lua
- Postgres: база данных

Ответ 1

Если бы вы могли назвать только одно, тогда было бы, что Mongrel2 будет строиться вокруг ZeroMQ, что означает, что масштабирование вашего веб-сервера никогда не было таким простым.

Если запрос приходит, Mongrel2 получает его (ничего необычного здесь, как и для NginX и любого другого httpd). Следующее, что происходит, это то, что Mongrel2 распределяет задачу компиляции ответа на n (ZeroMQ-enabled) бэкендов, ждет их выполнения работы, получения результатов, компиляции ответа и отправки его клиенту.

Теперь магия заключается в том, что n может быть любым числом и что каждый из n может быть записан на любом языке, поддерживаемом ZeroMQ (примерно 20 или около того), плюс все идет по сети, так что каждый n может быть выделенный блок, возможно, в другом центре данных.

Другими словами: с помощью NginX и всего остального вы должны сделать масштабируемость в своем логическом уровне, Mongrel2 позволяет начать (с точки зрения цикла запроса/ответа) это право, где запрос попадает в вашу инфраструктуру, на httpd вместо того, чтобы позволить сложности проникать вниз к вашему логическому уровню, который сбрасывает сложность вверх хотя бы на один порядок величины imo.

Ответ 2

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

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

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

Mongrel2 - небольшое изменение в стеке. Как уже упоминалось, это происходит от использования zeromq в качестве транспортного уровня между ним и бэкенд-серверами приложений. Он может обслуживать динамические запросы запросов (запросы приложений) и направлять вычислительную часть задания на разные серверы с помощью zeromq.. mongrel2 позволяет вам обслуживать не только http, websockets и т.д., но и другие протоколы (если вы склонны это делать) от одного и того же сервера. пользователь никогда не узнает, что части приложения обслуживаются с разных бэкэндов.

Если ваши требования к функциональности вашего webapp продолжают меняться или вы хотите добавить такие вещи, как потоковое вещание, возможность кодирования на разных языках в конце и т.д., тогда я определенно посмотрю на mongrel2. Или даже иметь гибрид где вы используете nginx/haproxy/lnish для статических файлов и кеширования, а все остальное направлено на mongrel2.