Ruby on Rails网站通常比java或.net网站慢吗?(这是假设开发人员没有滥用这项技术.)
我见过的很多Ruby站点都存在性能问题.
是的,Ruby on Rails站点确实存在性能问题,就像任何其他站点一样.就像任何其他网站一样,这些性能几乎总是植根于架构决策,而不是语言或框架.
几年前Joyent有一个很好的演示文稿(可能是RailsConf 2007?),它在一张幻灯片上显示了在他们的Rails平台的单个实例上运行的所有服务器.大约40个流程.这些进程中只有一个是Ruby解释器,其他所有东西都是DNS解析器,Web服务器,数据库服务器,MTA,memcached,消息队列,反向代理,负载均衡器等等.其中每一个都会搞砸你的性能.这是97.5%的可能性,你的性能问题与Rails或Ruby没有任何关系.
在JRuby邮件列表上有一些非常好的电子邮件,还有一些推文和博客文章,这些人在Ruby中重写了他们的Java Web应用程序并且性能提高了10%.
一个很好的例子是Twitter.Twitter是世界上最大的Ruby on Rails站点之一.它也是一个非常不寻常的使用模式,它将为任何为"普通"Web应用程序设计的框架提供一个难以破解的难题.
现在,您可能会想,为什么我选择Twitter作为性能和可扩展性的一个例子,显然它与他们所知的完全相反?嗯,这正是重点:他们有大量的扩展,性能和可靠性问题.而不是一个单一的那些有什么做使用Rails或者Ruby.事实上,Rails和Ruby的人几乎是唯一个在他们的筹码,他们并没有遇到一些问题.
他们遇到意外增长的问题.使用哪种语言或框架并不重要:如果用户签到的速度比购买新服务器的速度快,那么您无能为力.
他们在MySQL的性能和可扩展性方面存在问题.再一次,MySQL与Rails或Ruby无关.事实上,MySQL是用C语言编写的,所以如果你真的绝对必须根据单个事件做出任何关于编程语言的荒谬结论,那么就是这样:C很慢.如果你想要表现,请远离C.
(在这个特殊情况下,在一次采访中,他们确实责怪Rails:他们说因为Rails只支持单个数据库的单一连接,他们的MySQL实例只是过载了.在发布采访的几个小时内,两个Rails开发人员独立两者都发布了Rails插件以实现多个连接.经验教训是:只有80%的解决方案在核心.推特显然不在80%.插件API是有原因的.)
他们在整个系统的性能和可扩展性方面存在问题.事实证明,为了快速推出产品,他们绝对没有实施任何缓存.甚至"静态"Twitter主页也是针对每个请求完全动态生成的.同样,这与Rails或Ruby无关.你可以通过关闭他们的缓存来关闭任何网站,我向你保证.
他们遇到了一些非常糟糕的可伸缩性问题(并且上面提到的MySQL问题与此有关),这仅仅是因为人们以开发人员未预料到的方式使用该网站.大家都知道Twitter是一个微信息平台.好吧,除了Twitter的创始人.他们对微内容管理系统有这个绝妙的想法.
因此,他们确实构建了一个微型CMS.当然,内容管理系统的核心部分是内容存储库,IOW是数据库.然而,用户使用Twitter作为微信息平台.消息传递平台的核心部分是消息队列.
结果,MySQL被用作消息队列.没有两件事可以比数据库(尤其是SQL数据库)和消息队列更进一步.两者几乎完全相反的要求和约束.
当然,整个架构是围绕内容存储库构建的,现在这个内容存储库被滥用为消息队列.
为此,Twitter开发人员在Ruby中编写了自己的消息队列,这有助于提高性能和可扩展性.但还不够.所以,他们写了另一个消息队列,这次是在Scala中.
正是这个单一的重写完全负责,我估计,在那里所有Rails FUD的70%.但是,我不知道你:当我写,我完全不知道事情怎么写呢,然后我写了同样的事情第二次,当我真正不知道我在做什么赫克...第二个总是比第一个好.我怀疑这也是这种情况.
在几次采访中,Twitter开发人员指出Ruby on Rails不对他们的扩展问题负责.相反,只有Ruby的可维护性才能进行大规模的体系结构更改以修复其扩展问题.
简而言之:今天,Twitter实际上正在使用Ruby on Rails来实现它的用途:用于Web应用程序.他们使用数据库存储数据而不是消息队列.他们使用实际正确的消息队列.消息队列和其他一些后端内容是用Scala编写的.前端是用Ruby on Rails编写的.有些东西是用C写的.
一切都是桃子.
这里故事的真正道德是,您可以将几乎任何大型网络应用程序,任何语言,任何框架替换为上述故事,它仍然是真的.MySpace是我所知道的最慢,最不可靠的网站之一,那是一个.NET站点.GitHub是我所知道的最快的网站之一,同时它是最大的托管平台(它在超过2年后拥有超过一百万个存储库,比SourceForge和Google Code结合更多)并且它是用Ruby on Rails编写的前端,用于Web服务的Sinatra,用于Git接口和Git基础架构的Ruby,用于联合和云基础架构的Erlang以及用于下载服务器的Node.JS.
这是一个开始
缩放ROR
为什么Rails运行缓慢
框架性能比较
与此相关的问题
相关的兴趣文章Twitter放弃了ROR它的老我知道,但我实际上并不知道大声笑
简短回答
可能肯定.
可能比其他语言更可能.
取决于应用程序,程序员和架构.