其中哪一个是与“最新导轨”应用程序一起使用的更好选择? Mongrel、Thin、WEBrick 和Passenger

Posted

技术标签:

【中文标题】其中哪一个是与“最新导轨”应用程序一起使用的更好选择? Mongrel、Thin、WEBrick 和Passenger【英文标题】:Which one of these is a better option to use alongside "latest rails" application? Mongrel, Thin, WEBrick and Passenger 【发布时间】:2012-10-17 08:14:43 【问题描述】:

我一直在玩并评估 Rails 的默认 WEBrick 服务器的其他选项,Thin 是最轻松、最干净的东西,效果很好!!

您会推荐 Mongrel、Thin、WEBrick 和Passenger 中的哪一个,为什么......? 是否有任何这些服务器附带的可扩展性特权(集群友好或可以处理某种规模的配置)......或者在评估它们时可扩展性甚至应该是一个参数?

【问题讨论】:

【参考方案1】:

Dipak 已经回答了你一半的问题,但让我稍微澄清一下。 (我是 Phusion Passenger 的作者之一。)

WEBrick 是一个玩具网络服务器。除了开发之外没有人使用它,因为它性能很差,据说会泄漏内存。 您说 Thin 效果很好。您是否已经在反向代理配置中进行了设置?因为这就是人们在生产场景中所做的事情。将 Thin(或 Mongrel 或 Unicorn)直接暴露在互联网上是不安全的。 您可能有兴趣阅读Ruby on Rails server options 和the Phusion Passenger architectural overview 以获得更详细的解释。

在可扩展性方面,差别不大。它们在生产中的表现都非常相似,它们的扩展方式大致相同,您遇到的任何问题很可能是由您的应用程序或 Rails 引起的。好吧,除了WEBrick,你真的不应该在生产中使用它。您可能会看到 hello world 基准测试的差异,但仅此而已。在生产使用中,大部分时间都花在应用程序上,因此在 hello world 基准测试中可见的任何微小速度差异都将变得完全不可见。

不过有一些微妙之处需要注意。

Phusion Passenger 提供称为全局排队的功能。它解决了一个特定的问题,explained in detail in the manual。默认情况下,nginx 和 Apache 代理请求以循环方式进行,因此它们会遇到这个问题,而 Phusion Passenger 则不会。在不使用 Phusion Passenger 时,有一些方法可以解决此问题,但它们需要特定配置或安装额外的 Web 服务器模块。

I/O 模型可能重要也可能不重要,具体取决于您的应用程序的性质。 Mongrel、Thin、Unicorn,都是多进程单线程。这对于在本地数据库中查找内容并呈现某些内容的传统 Web 应用程序非常有用,但对于执行大量 HTTP API 调用或必须在 I/O 上等待很多时间的应用程序来说主要是糟糕的。 Why Rails 4 Live Streaming is a Big Deal 详细解释了这一点。

Phusion Passenger 也是多进程单线程,但Phusion Passenger Enterprise 支持多线程。 Phusion Passenger Enterprise 是开源 Phusion Passenger 的商业变体,具有适用于大规模生产环境的各种功能。

在大型生产环境中,某些功能变得很重要,例如滚动重启,部署失败时不显示任何错误等。Mongrel、Thin、Unicorn、Phusion Passenger,它们都在一定程度上公开了这些功能,但有些需要比其他更多的管理工作。例如,要在 Mongrel 和 Thin 中实现滚动重启,您需要在部署脚本中执行很多步骤。独角兽不需要那么多步骤,但仍然很重要。这就是 Phusion Passenger Enterprise 大放异彩的地方:它采用所有这些功能并将它们变成一个单一的配置选项。打开该选项,软件会处理剩下的事情。

所以,选择您认为最适合您的方案的任何选项。

【讨论】:

离开了很长一段时间..感谢您的精彩回复..我现在已经开始使用乘客+nginx..要求不是那么特别,因此可扩展性还没有这样的问题!!再次感谢! @Hongli 我有一个Rails 应用程序,它大量使用了Faye ruby​​ gem,而它又大量使用了websockets 和comet(长HTTP 轮询)。换句话说,我有数百个 TCP 连接长时间保持打开状态。网站的各个部分都使用实时数据。最初我使用的是 Apache2,但由于其异步 i/o 多线程强度,我决定迁移到 nginx。作为应用服务器,Passenger 会比 Thin 更好吗? @Donato 如果您使用的是 WebSockets,那么带有 Nginx 的Passenger Enterprise(用于多线程)将非常有效,就像 Thin 一样。 Passenger Enterprise 相对于 Thin 的主要优势在于更好的工具和更好的文档。另外,请查看WebSocket tuning instructions。【参考方案2】:

Thin 对于开发和生产就像 gem 'thin' 一样简单

【讨论】:

【参考方案3】:

最容易为生产设置的可能是 Apache 和 mod_rails(乘客)。如果你想使用新的热点,你可以给nginx和乘客一个旋转。

对于开发来说,mongrel 通常是最容易使用的。大多数 Windows IDE(RadRails、Netbeans)让您可以选择使用 Webrick 或 Mongrel 进行开发工作,并让您从 IDE 本身控制服务器。

更新

四种选择

确实有四个选择,嗯,加上 WEBrick,但对于生产服务器来说,这将是一个不寻常的选择。大约按照复杂度递增的顺序...

nginx + Mongrel nginx + 乘客 阿帕奇+杂种 阿帕奇 + 乘客 (有PhusionPassenger Standalone,不过那真的是nginx+passenger一起编译的,所以没算,虽然对某些人来说可能是个不错的选择。)

然后,较大的站点可能会在服务器前面添加专门的第 7 层硬件(NetScaler、F5、...)。

【讨论】:

感谢您的回复..这更多是出于非开发目的..我想我会给 nginx 一个尝试..关于第二个问题的任何见解..? 我不同意您按复杂程度排序。 Phusion Passenger + Apache 和 Phusion Passenger + Nginx 在可用性方面的复杂性大致相同。但两者在可用性方面都没有 Apache/Nginx + Mongrel 复杂。 Phusion Passenger Standalone 应该是最简单的,因为它只是一个命令,不需要自己编译 Nginx,结果可以立即暴露在互联网上。此外,Phusion Passenger + Nginx 并不是“新热点”——它从 2009 年就已经存在。

以上是关于其中哪一个是与“最新导轨”应用程序一起使用的更好选择? Mongrel、Thin、WEBrick 和Passenger的主要内容,如果未能解决你的问题,请参考以下文章

选 Ubuntu?还是 Fedora?

其中哪一个更适合论坛的 ASP.NET Access 数据库[关闭]

Apollo Server:dataSources vs context 与数据库一起使用

什么是与应用内购买一起提交但我未能包含导致它被拒绝的二进制文件?

EXISTS 与 IN - MySQL 5.5 和 MySQL 5.7 中哪一个更好?

我的macbook pro 2015版,安装哪一代的Windows更流畅,更好用,兼容性更高