Webrick作为生产服务器还是Thin或Unicorn?


117

您一定不能将Webrick用作生产服务器,这似乎是理所当然的,但是我在任何地方都找不到真正的原因。共识似乎是:“ Webrick可以进行开发,但是Thin或Unicorn是生产期的选择。”

我确实查看了Thin Server的主页,它讨论了每秒请求数,但是由于没有注释,我不太了解该图。

有人可以让我知道为什么与Webrick相比我应该使用Thin或Unicorn吗?使用Webrick进行开发是否也有好处?我一直在使用Webrick,因为它附带了rails,我认为应该将它作为默认设置是有原因的。

我正在使用Heroku。


与其他类似Mongrel的软件相比,它的速度很慢。
uday 2012年

38
肯,我真的没有问这个问题来辩论任何事情。我真的很想知道答案,因为当每个人都认为Webrick的表现不佳时,我无法在任何地方找到真实的统计数据。我与这些政党都不隶属,您提到的辩论是出于真正的好奇心而提出的问题。我该如何改写这个问题,以免看起来不一样?
弗拉德(Flad)2012年

24
这是一个很好的问题。
justingordon

29
这样的问题不应该被关闭。它们是有用和有用的。所有自行任命的内容警察都应退缩。
肯·史密斯

22
我通过谷歌搜索“为什么不在生产中使用WEBrick?”发现了这一点。因为这是我想回答的问题。我并不是要在生产中使用WEBrick,但我确实感到很讨厌,每个人都说:“显然,因为它不是用于Production®。” 确实不是那么明显-如果是这样,人们在最终询问StackOverflow之前就不会研究这个问题,就像@Vlad表示的那样。接受的答案很有帮助;至少指出一些缺少的功能。切线地,坚持一个问题是封闭的,因为您认为它没有提出自己的答案就没有意义,这无济于事。
贾斯汀·

Answers:


42

几个重要原因

  1. 它是用Ruby编写的(请参见http://github.com/ruby/ruby/tree/trunk/lib/webrick
  2. 编辑后,它没有生产网站通常需要的许多功能,例如多个工作程序(特别是预分叉,生命周期管理,异步处理等),重定向,重写等

当我提到重定向/重写时,是指使用Webrick时,您必须在不同的层(机架,Sinatra,Rails,自定义Webrick代码等)处处理重写。这需要您增加额外的红宝石“处理程序”来执行您的重写代码。对于低流量的站点,这可能很好,因为您可能已经预热了一些进程而什么也不做。但是,对于流量较高的站点而言,这是服务器上额外的负载,前端服务器(Apache,Nginx等)可以处理这些事情而不会分解Ruby *,并且可能快几个数量级。

* 例如,如果您在负载均衡器后面运行,则可以将所有重写流量路由到未安装ruby的服务器,而让您的主服务器仅管理主要流量。这种重写流量可能是由于SEO的网站更改或类似原因。另一种情况是一个站点包含多个组件,一个部分可能是Rails,另一部分是PHP,并且两者都需要重写(即,将旧的PHP路径重写为Rails)


不管您使用哪个服务器,都不可能使用delay_job处理Heroku上的多个工作程序吗?
弗拉德(Flad)2012年

是的,delayed_job与Webrick无关,除非您的工作使用Webrick API(说实话,这是一种代码异味)。
Jim Deville 2012年

我指的是Ruby堆栈之外的重定向。就像mod_rewrite样式重定向一样。从技术上讲,您可以重定向到Rack,Rails或Webrick(我可能错了),但是这需要启动ruby,这与Apache或Nginx相比相对较慢
Jim Deville 2012年

1
@JimDeville-独角兽也是用Ruby编写的
Yarin


4

WEBrick也无法处理更长的URI,如果它们超过2083个字符,您将看到崩溃。Thin没有这些问题,这使其具有优越性-已经在开发中。


当我根据经验,正在开发软件以及当我在Heroku PaaS中选择WeBRICK时,Webrick也失去了连接并自动关闭,并且自动关闭的速度因自动打开的速度快而得到补偿(通过Heroku的自动体系结构触发) )
Daniel AntonioNuñezCarhuayo 2014年

3

我真的不喜欢复杂的事情和过早的优化。WEBrick可以在生产中使用,只要它是一个低流量的网站即可。大多数应用程序都是。

如果您的站点做一些花费时间的事情,例如发送电子邮件或生成PDF文件,则应使WEBrick为多线程。您想一次处理多个请求。


1

过去曾发生过一些安全问题,但似乎主要原因是与用于生产的服务器相比,它确实很慢。


4
您看过统计资料比较吗?我还听到有人说(也许是真的),但在网络上的任何地方都找不到真正的统计比较...
Vlad

3
我认为没有人真正对Webrick进行基准测试,因为它并不是要成为生产服务器。独角兽,轻薄或乘用车得到了良好的支持,并且提供了更好的选择
Jim Deville 2012年

0

在生产模式下运行时,webrick的最大缺点是它是单线程,单进程的Web服务器,这意味着它一次只能处理一个HTTP请求。


它不是单线程的。或它与任何现代脚本语言都被限制(带有GIL)的方式相同。但是webrick中的数据库访问和IO是完全多线程的。
Lothar '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.