8

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

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

4

3 回答 3

9

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

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

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

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

  • Phusion Passenger 提供了一种称为全局排队的功能。它解决了一个特定的问题,在手册中有详细的解释。默认情况下,Nginx 和 Apache 代理请求以循环方式进行,因此它们会遇到此问题,而 Phusion Passenger 则不会。当不使用 Phusion Passenger 时,有一些方法可以解决这个问题,但它们需要特定的配置或安装额外的 Web 服务器模块。
  • 根据应用程序的性质,I/O 模型可能重要也可能不重要。Mongrel、Thin、Unicorn,都是多进程单线程。这对于在本地数据库中查找内容并呈现某些内容的传统 Web 应用程序非常有用,但对于执行大量 HTTP API 调用或必须在 I/O 上等待很多时间的应用程序来说主要是糟糕的。为什么 Rails 4 Live Streaming 很重要,详细解释了这一点。

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

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

因此,请选择您认为最适合您的方案的任何选项。

于 2012-10-31T08:41:47.393 回答
1

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

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

更新

四种选择

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

nginx + Mongrel nginx +Passenger Apache + Mongrel Apache +Passenger (有Phusion Passenger Standalone,不过那真的是nginx+passenger一起编译的,所以我不算,虽然对某些人来说可能是个不错的选择。)

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

于 2012-10-27T05:28:08.643 回答
0

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

于 2012-10-29T04:20:24.977 回答