76

我很困惑Mongrel2服务/提供nginx还没有做什么的目的。

(是的,我已经阅读了手册,但我必须太菜鸟才能理解它与 nginx 的根本不同)

我当前的 Web 应用程序堆栈是:
- nginx:网络服务器
- Lua:编程语言
- FastCGI + LuaJIT:将 nginx 连接到 Lua
- Postgres:数据库

4

2 回答 2

116

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

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

现在,神奇之处在于 n 可以是任何数字,并且 n 中的每一个都可以用 ZeroMQ 支持的任何语言(大约 20 个)加上,所有这些都通过网络进行,因此每个 n 都可以是一个专用的盒子,可能在另一个数据中心。

换句话说:使用 NginX 和您必须在逻辑层中进行可扩展性的所有其他操作,Mongrel2 允许您(从请求/响应周期的角度)从请求到达您的基础架构的地方开始,在 httpd 而不是让复杂性渗透到您的逻辑层,这将复杂性提高了至少一个数量级。

于 2011-05-26T09:21:31.377 回答
13

您应该查看每个的优势,并根据您的用例决定使用其中一个或两个。

虽然看起来 nginx 完成了 mongrel2 表面上提供的所有功能,但您会发现两者在关注点上存在重大差异。

Nginx 作为前端网络服务器大放异彩,它可以将请求代理到您的后端网络服务器/应用服务器,还可以提供静态内容。

Mongrel2 是堆栈中的一个细微变化。如前所述,它的强大之处在于它使用 zeromq 作为它与后端应用服务器之间的传输层。它可以提供动态请求 url(应用程序请求)并使用 zeromq 将任务的计算部分定向到不同的后端。mongrel2 允许您不仅提供 http、websockets 等服务,还提供其他协议(如果您愿意这样做) ) 都来自同一台服务器。用户永远不会知道应用程序的某些部分是从不同的后端提供的。

如果您对 webapp 功能的要求不断变化,或者您想添加流式传输、在后端以不同语言编写代码的能力等,那么我肯定会考虑 mongrel2。或者甚至有一个混合,你使用 nginx/haproxy/varnish 进行静态文件和缓存,而其他一切都指向 mongrel2。

于 2012-01-04T18:32:03.740 回答