使用 Rails 作为大型网站的框架

Posted

技术标签:

【中文标题】使用 Rails 作为大型网站的框架【英文标题】:Using Rails as a framework for a large website 【发布时间】:2011-09-03 20:47:46 【问题描述】:

我已经使用 Rails(第 3 版)几个月了,我对这个框架非常了解。但是,我还没有开发出提供大量数据库访问和用户交互的大型网站。

我对以下内容持怀疑态度:

Ruby 的速度和可扩展性(我听说它比大多数其他服务器端语言慢 10 倍)。 Rails 作为框架的额外后台处理(多级抽象)。 缺乏在 Rails 上运行的企业级 Web 应用(我能想到的只有 Groupon、Github 和 Hulu)。 环境的复杂性(nginx > mongrel > rails > ruby​​ > website)。 幕后 SQL 操作(我知道这些可以优化,但我肯定会错过一些)。

由于这些原因,我不确定是继续使用 Rails 还是切换到构建在性能更高的语言之上的东西……比如 Java Spring。

请指教:)

【问题讨论】:

【参考方案1】:

有tons of large sites and infrastructures in production that use Rails。在 Rails 被积极用于各种大小的 Web 应用程序的这些年里,这个问题也被问死了。

简短的版本是它不是最快的语言,但如果你知道自己在做什么,它仍然可以很好地扩展。如果您确实遇到任何规模问题,您应该有足够的资金聘请知道自己在做什么的人。

扩展任何 web 应用程序都很困难,请使用您熟悉的语言/框架。程序员的幸福为王。

【讨论】:

【参考方案2】:

您可以使用 Ruby 获得良好的性能。简单:

require 'inline'

inline :C do |builder|
  builder.c <<-C_CODE

  void run() 
    // Write your entire application in C here
  

  C_CODE
end

run

问题解决了;)

【讨论】:

问题是关于 Rails(不是 Ruby 和 C)。【参考方案3】:

不再讨论速度和扩展性?

在网络开发中,最慢的事情是网络通信(接收请求,取回所有数据),数据库(从数据库中获取所有数据),而且大多数时候它与计算无关时间。

虽然 Ruby 和 Ruby on Rails 似乎更注重程序员的幸福感,但我认为每个用 .NET 或 Java 构建的体面的 Web 应用程序都具有同样多的抽象级别。

环境的复杂性?我想你的意思是部署?有很多选项,但最常用的选项是Passenger(非常容易部署在 apache 或 nginx 之上)或Torquebox。 目前,Torquebox 是最快、最好的扩展解决方案(基于 JBoss 应用程序服务器),Ruby 社区中的一些大人物都将 Jruby 称为 choise 的实现来部署您的应用程序。虽然 AFAIK 最常见的部署仍然是使用 REE(Ruby 企业版)和Passenger。

除非您知道您将不得不进行严肃的数学、cpu 密集型操作,否则我认为您应该问自己的问题是:哪种框架/语言会给我最快的结果?

如果您非常精通 Java/Spring,那可能就是您的答案。但是,如果您唯一担心的是总体性能,我会说:不要犹豫,选择 Ruby on Rails。在其中开发是一种纯粹的快乐。如果您遇到任何问题,ruby 社区真的很棒:支持只是一个帖子。

最后,我想添加一些使用 Rails 的大型网站:LinkedIn 使用 Rails(和 jruby),而 Twitter 仍然使用 Rails 作为前端。

【讨论】:

但是你可以通过高性能服务器来省钱。例如,单个 nodejs 实例将能够处理比 rails 多 40 倍的常规 http 请求。在这种情况下,您只需要担心扩展 DB,而不必担心 Web 框架堆栈。 你能给我们这个数字(40x)的基准/文章的链接吗,我有兴趣阅读。 nodejs 非常有趣,但我只会切换到非常特定的领域。 Rails 完成了我所有的资产处理、缓存、会话管理、活动记录。恕我直言 nodejs 无法处理的事情。你会得到奇怪的回调编程。但是,如果我要做繁重的客户端 js,那么 nodejs 可能会再次变得有趣。好吧,我的意思是上面的一些框架:) 测试起来并不难。您只需要一个基本的 nodejs 应用程序和一些默认的 rails 应用程序。我使用 EC2 的 m1.small 实例来测试性能。如果我的记忆是正确的,ree 1.8.7 和 rails 3.0x 做了大约 15 个请求/秒,而 nodejs 0.8.x 需要 600 个请求/秒。随着系统中核心数量的增加,差距会更大。使用 nodejs,我不必启动许多 http 实例。 一个基本的 nodejs 应用程序与 Rails 应用程序为您做的事情远不一样。但理所当然:如果你需要低级速度......但我想知道:sinatra 比较如何?

以上是关于使用 Rails 作为大型网站的框架的主要内容,如果未能解决你的问题,请参考以下文章

作为高级架构师,你居然看不透大型网站技术架构的核心问题?

python django能开发大型网站吗

漫谈大型网站架构

大型Web网站架构演变

大型网站架构系列

开源大型网站架构技能图谱