Зачем использовать Mongrel2?
Я запутался, какую цель Mongrel2 выполняет / обеспечивает, что nginx еще не делает.
(Да, я прочитал руководство, но я должен быть слишком любопытным, чтобы понять, чем он в корне отличается от nginx)
Мой текущий стек веб-приложений:
- nginx: веб-сервер
- Lua: язык программирования
- FastCGI + LuaJIT: подключить nginx к Lua
- Postgres: база данных
2 ответа
Если бы вы могли назвать только одну вещь, то Mongrel2 строится вокруг ZeroMQ, что означает, что масштабирование вашего веб-сервера никогда не было таким простым.
Если приходит запрос, Mongrel2 получает его (здесь нет ничего необычного, как для NginX и любого другого httpd). Следующее, что происходит, - это то, что Mongrel2 распределяет задачу по компиляции ответа на n (с включенным ZeroMQ) бэкэндом, ждет, пока они выполнят работу, получает результаты, компилирует ответ и отправляет его клиенту.
Теперь волшебство заключается в том, что n может быть любым числом и что каждое из n может быть написано на любом языке, поддерживаемом ZeroMQ (20 или более) плюс, все идет по сети, поэтому каждый n может быть выделенным блоком возможно в другом датацентре.
Другими словами: с NginX и всем остальным вы должны выполнять масштабируемость на уровне логики, Mongrel2 позволяет вам начать (с точки зрения цикла запроса / ответа) именно там, где запрос попадает в вашу инфраструктуру, с httpd, а не с позвольте сложности проникнуть вниз к вашему логическому уровню, который увеличивает сложность как минимум на один порядок.
Вы должны посмотреть на сильные стороны каждого из них и решить использовать один или оба в зависимости от ваших вариантов использования.
Хотя кажется, что nginx делает все, что mongrel2 предоставляет на поверхности, вы обнаружите, что между ними есть серьезные различия.
Nginx великолепен как интерфейсный веб-сервер, который может прокси-запросы к вашим серверным веб-серверам / приложениям, а также обслуживать статический контент.
Mongrel2 - это небольшое изменение в стеке. Как уже упоминалось, его сила заключается в использовании zeromq в качестве транспортного уровня между ним и внутренними серверами приложений. Он может обслуживать динамические URL-адреса запросов (приложения) и направлять вычислительную часть задачи в разные бэкэнды с помощью zeromq. Mongrel2 позволяет обслуживать не только http, websockets и т. Д., Но и другие протоколы (если вы склонны делать это).) все с одного сервера. пользователь никогда не узнает, что части приложения обслуживаются из разных бэкэндов.
Если ваши требования к функциональности вашего веб-приложения постоянно меняются или вы хотите добавить такие вещи, как потоковая передача, возможность кодировать на разных языках в бэкэнде и т. Д., Тогда я определенно посмотрю на mongrel2. Или даже есть гибрид, где вы используете nginx/haproxy/varnish для статических файлов и кеширования, а все остальное направлено на mongrel2.