在“最新的rails”应用程序旁边使用哪个更好?Mongrel、Thin、WEBrick和Passenger中的哪一个是更好的选择?

8

我一直在尝试和评估其他替代Rails默认WEBrick服务器的选项,Thin是最轻松和干净的选择,非常好用!

这些服务器中的哪一个——Mongrel、Thin、WEBrick和Passenger——您会推荐使用?为什么呢?是否有任何可扩展性优势(集群友好或可以处理某种规模的配置),这些服务器是否应该考虑可扩展性作为评估参数?

3个回答

9
Dipak已经回答了你问题的一半,但让我稍微澄清一下。 (我是Phusion Passenger的作者之一。)
  • WEBrick是一个玩具Web服务器。由于性能差且据说会泄漏内存,因此没有人在除开发以外的任何场景中使用它。
  • 您说Thin运行良好。您是否已经将其设置为反向代理配置?因为这就是人们在生产环境中所做的。直接将Thin(或Mongrel或Unicorn)暴露在互联网上是不安全的。
  • 您可能会对阅读Ruby on Rails server optionsthe Phusion Passenger architectural overview以获取更详细的说明感兴趣。

谈到可扩展性时,它们之间没有太大的区别。它们在生产环境中表现非常相似,它们的扩展方式也大致相同,你遇到的任何问题很可能是由你的应用程序或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直播流是一个大问题详细解释了这一点。

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

  • 在大型生产环境中,一些功能变得重要,例如滚动重启,在部署失败时不显示任何错误等。Mongrel、Thin、Unicorn、Phusion Passenger都在某种程度上公开了这些功能,但有些需要比其他功能更多的管理工作。例如,在Mongrel和Thin中实现滚动重启,您需要在部署脚本中执行相当多的步骤。Unicorn不需要太多步骤,但仍然需要一定的步骤。这就是Phusion Passenger Enterprise的优势所在:它将所有这些功能转化为一个单一的配置选项。打开该选项,软件会自动处理其余的事情。

因此,请选择您认为最适合您情况的选项。


我离开了相当长的一段时间..感谢您的回复..我现在已经开始使用Passenger+Nginx了..需求并不是那么特别,因此可扩展性并不是一个问题!! 再次感谢!! - brucewayne
@Hongli 我有一个Rails应用程序,其中广泛使用Faye Ruby gem,而Faye又广泛使用Websockets和Comet(长轮询)。换句话说,我有数百个TCP连接,这些连接会长时间保持打开状态。该网站的各个部分都使用实时数据。最初我使用的是Apache2,但现在决定迁移到nginx,因为它具有异步I/O多线程强大的特点。作为应用服务器,Passenger是否比Thin更好配合? - Donato
@Donato 如果你正在使用WebSockets,那么使用带有Nginx的Passenger Enterprise(用于多线程)将非常有效,就像Thin一样。 Passenger Enterprise相对于Thin的主要优势在于更好的工具和更好的文档。此外,请查看WebSocket调整说明 - Hongli

1

在生产环境中,最容易设置的可能是Apache和mod_rails(passenger)。如果你想使用新技术,可以尝试一下nginx和passenger。

对于开发来说,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等)。


谢谢回复。这更多是为非开发目的而言。我想我会尝试使用nginx。对于第二个问题有什么见解吗? - brucewayne
我不同意你对复杂度排序的看法。Phusion Passenger + Apache 和 Phusion Passenger + Nginx 在可用性方面的复杂度大致相同。但两者在可用性方面都比 Apache/Nginx + Mongrel 更简单。Phusion Passenger Standalone 应该是最简单的,因为它只需要一个命令,无需自己编译 Nginx,结果可以立即暴露在互联网上。此外,Phusion Passenger + Nginx 不是“新热门”——它自 2009 年以来就一直存在。 - Hongli

0

使用gem 'thin'可以轻松地在开发和生产环境中使用Thin


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接