为啥使用 Mongrel2?

Posted

技术标签:

【中文标题】为啥使用 Mongrel2?【英文标题】:Why use Mongrel2?为什么使用 Mongrel2? 【发布时间】:2011-08-30 15:39:32 【问题描述】:

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

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

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

【问题讨论】:

做同样的事情,只是不同。选一个你喜欢的 【参考方案1】:

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

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

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

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

【讨论】:

@MarkusGattol fastcgi 的目的是什么?我可以用它做到这一点。用任何语言,不是吗?【参考方案2】:

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

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

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

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

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

【讨论】:

以上是关于为啥使用 Mongrel2?的主要内容,如果未能解决你的问题,请参考以下文章

带有 RVM 的 Rails mongrel 无法启动 - mongrel_rails (MissingSourceFile)

使用 Mongrel 在 Windows 上运行 Ruby On Rails

Nginx 和 Mongrel 的区别?

与 Mongrel 集群相比,使用乘客有啥优势?

如何在 Mongrel 下重启 Rails,而不停止和启动 Mongrel

何时使用 Mongrel 作为 Rails 应用程序的 Web 服务器?