为什么使用Mongrel2?

我很困惑Mongrel2服务的目的是什么, Nginx没有提供。

(是的,我已经阅读了手册,但我必须是一个小白,以了解它是如何根本不同于nginx)

我目前的Web应用程序堆栈是:
nginx :webserver
Lua :编程语言
FastCGI + LuaJIT :将nginx连接到Lua
Postgres :数据库

如果你只能说出一件事情,那么Mongrel2是围绕ZeroMQ构build的,这意味着扩展你的Web服务器从未如此简单。

如果有请求,Mongrel2收到它(这里没什么不寻常的,和NginX和其他的httpd一样)。 接下来发生的事情是Mongrel2将编译响应的任务分配给n(启用了ZeroMQ的)后端,等待他们完成工作,接收结果,编译响应并将其发送给客户端。

现在,神奇的是,n可以是任意数字,n中的每一个都可以使用ZeroMQ(20左右)支持的任何语言编写,所有这些都通过networking,因此每个n可以是一个专用的盒子,可能在另一个数据中心。

换句话说,使用NginX和其他所有的function,你必须在你的逻辑层中进行可扩展性,Mongrel2允许你从请求到达你的基础设施的时候(从请求/响应周期的angular度来看),在httpd而不是让复杂性渗透到你的逻辑层,使复杂度至less上升一个数量级。

你应该看看每个的优势,并根据你的使用情况决定使用哪一种或哪两种。

而nginx看起来似乎是杂种2在表面上提供的一切,你会发现两者在重点上存在重大差异。

Nginx作为一个前端Web服务器,可以代理请求到您的后端Web服务器/应用服务器,也提供静态内容。

Mongrel2是一个小小的变化。 如前所述,它的function来自它使用zeromq作为它和后端appservers之间的传输层。 它可以为dynamic请求URL(应用程序请求)提供服务,并使用zeromq将任务的计算部分导出到不同的后端。mongrel2允许您不仅服务http,websockets等,而且其他协议(如果您倾向于这样做)全部来自同一台服务器。 用户将永远不会知道应用程序的部分是从不同的后端服务。

如果你的web应用程序的function要求不断变化,或者你想添加stream媒体,在后端使用不同语言编码的能力等等,那么我肯定会考虑mongrel2。 甚至有一个混合使用nginx / haproxy / varnish用于静态文件和caching,其他所有内容都是针对mongrel2的。