【问题标题】:Rails 3 performance [closed]Rails 3性能[关闭]
【发布时间】:2011-06-08 10:27:11
【问题描述】:

我想实现一个像证券交易所这样的网络应用程序,其中的值会一直变化(比如说每秒一次)。我可能会使用 ajax comet。

由于应用程序的性质,用户会有点并发,我有点担心性能。

这些是我的想法:

我想在 Rails 3 中实现它,但我担心性能。有什么好的托管公司可供选择?我应该使用云吗? ruby 1.9.2 中的 Rails 3 会比 php 快(包括 db 查询)?

我可以在 Play 框架中实现它,它可能没有性能问题,但我想在生产中即时进行更改(如果需要),而不需要重新部署等。我也更喜欢 rails。

我可以用 PHP 实现,但需要更多时间,更多代码

我没有使用 Rails 或 Play 的真实生产系统的经验,所以我对性能了解不多。有人可以帮忙吗?

【问题讨论】:

  • 你为什么要担心语言/框架?在底层语言之前有很多东西是瓶颈(http 服务器、RDBMS、HDD 子系统不足等)。
  • 在我的评估中,当下面有两个“合理的答案”时,对于为什么将其标记为已关闭,因为它“无法以当前形式合理地回答”感到困惑。
  • 问题是对于有许多并发用户的基于彗星的应用程序使用 Rails 3 是否是一个好主意,或者我应该使用 Play 框架或 PHP。顺便说一句,我认为 Rails + node.js 是个好主意。谢谢大家:)

标签: ruby-on-rails ruby-on-rails-3 playframework ruby-1.9.2


【解决方案1】:

可能值得考虑使用Faye,这是一个“用于网络的简单发布/订阅消息传递”的框架。

Faye 拥有 Ruby 和 Node.js 服务器组件,以及 Ruby 客户端,对于您的用例网络浏览器至关重要(显然是通过 javascript)。

有两种方法:

  • 在您的 rails 应用程序中嵌入 Faye 服务器。美观且简单,活动部件更少,需要管理的流程更少,但可扩展性可能不如:
  • 在 Node.js 中运行一个单独的 Faye 服务器,并使用 Ruby Faye 客户端从您的 Rails 应用程序向其推送消息。稍微复杂一些。更多的运动部件。管理更多流程。但是,至关重要的是,所有繁重的连接工作都在 Node.js 中完成,这是它非常擅长的。

如果是我,我会从选项 1 开始以保持简单,然后升级到选项 2当且仅当我可以证明这是必要的。

Railscast 260 中对使用 Ruby 中的 Faye 进行了很好的介绍。

【讨论】:

    【解决方案2】:

    如果不知道您的构建的具体情况很难具体说明,但对于可能被许多客户端同时访问的东西,并且可能不一定需要访问 Rails 应用程序的完整应用程序环境,您可能会考虑使用 node.js + Rails 之类的组合。如果我的理解正确,一旦打开页面,它将通过 comet/websocket 与服务器建立连接,并且该页面上的元素会经常更新。

    您可以让您的 Rails 应用程序通知 node.js 应用程序(通过 Redis 或类似的)相关更改,然后让该应用程序将这些更改广播到任何连接的客户端...保持您的 node.js 服务器所扮演的角色一个轻量级的最小值。当有人上线时,页面加载,一个彗星流(你喜欢怎么称呼它......一个套接字)被打开到真正轻量级的 node.js 并且任何可用的内容都被推送到浏览器,然后是广播更新它在 Rails 应用程序中接收到的事件。当有更好的工具来处理这些事情时,让所有这些具有持久连接的客户端进入 Rails 环境似乎很愚蠢。

    我并不是说不要使用 Rails,我只是建议您从服务的角度来考虑您的应用程序并使用相关工具运行这些服务;)

    这是一个使用 node.js 的聊天应用程序的小广播示例,只是为了给你一个想法:

    http://fzysqr.com/2011/02/28/nodechat-js-using-node-js-backbone-js-socket-io-and-redis-to-make-a-real-time-chat-app/

    node.js 只是一个建议......你可以离开并研究替代方案,或者当然,如果你想保持“简单”,只需从 Rails 管理它,但它会更重,这似乎关心你:)

    【讨论】:

      猜你喜欢
      • 2011-04-05
      • 1970-01-01
      • 2010-10-04
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      相关资源
      最近更新 更多