6

我正在使用 Ruby on Rails 开发一个网站。我想单独开发 REST API (JSON) 以最大限度地提高性能,Rails 堆栈带走了太多东西。

那里有任何性能基准吗?你认为什么会产生最好的性能?我目前正在考虑以下内容,因为这是我的经验。还有什么我应该考虑的吗?它应该是轻量级的。

  • 节点.js
  • 斯卡拉喷雾 (http://spray.io/)
  • 红宝石辛纳屈

谢谢!

4

4 回答 4

26

摘要:最大化您作为开发人员的表现。使用你最了解的堆栈。首先让它工作,然后让它快速。

那里有任何性能基准吗?

那里有各种各样的基准。比方说,node.js 可以处理 100k HPS(每秒 helloworlds),而 Sinatra 只能处理 80k。它告诉你什么?没有什么。

此外,有时更高的性能需要付出巨大的代价。以 ruby​​ C 扩展为例。当然,C 比 Ruby 运行得更快,但它会阻止其他线程在其他内核上运行(因为 GIL)。

因此,不要仅根据互联网上的基准数据来选择技术。除了原始 HPS 数字外,还有很多因素需要考虑。

LINK : 如果你觉得 Rails 太重,你应该试试rails-api。它基本上是 Rails 的精简版本(您不需要 api 服务器中的 cookie 身份验证或 MSIE 渲染帮助程序之类的东西)。


个人故事

我运行一个处理一些负载的 API 服务器。第一个版本是用 Rails 编写的。然后我想“嘿,Rails 臃肿(c),让我们用 Sinatra 重写一切”。然后一波又一波的挫败感袭来。事实证明,Rails 做了很多我不欣赏的小而有用的事情。我放弃了,再次用 Rails 重写了它(应用经验教训),从此过着幸福的生活。

于 2012-11-30T18:29:59.640 回答
3

这属于“我是否应该使用自定义的网络服务器用 C 重写我的 apache/php 站点,因为它很慢”。

我投票选择你最喜欢的堆栈来工作,并利用良好的缓存并使用你可用的任何操作码优化,如果你的代码没有被编译。然后确保您有足够的服务器资源并在需要处理流量时进行水平负载平衡。

我还没有看到许多 API 的性能不佳的主要原因是技术堆栈的选择,除非它们正在处理 facebook/twitter 大小的流量或进行计算密集型工作。

如果正确利用更多延迟,您将在您选择的任何堆栈中看到:

  1. 向客户端传输不必要的大量数据
  2. 由于糟糕的 SQL 或其他数据源获取缓慢而导致性能下降

如果您已经在使用 RoR 堆栈来坚持使用它,我也强烈建议您使用它。尝试在不同的堆栈中进行优化和编码通常会导致两者中的代码较弱——让您的开发人员的大脑一次专注于一个futz池。

于 2012-11-30T18:23:25.867 回答
1

这实际上取决于您的用例和团队经验/偏好 - 但是,如果您对任何堆栈都真正开放,我们的个人经验是:

  • Scala + Scalatra + Jetty 很简单而且速度很快。
  • Node + Express 的速度惊人地接近——但(在我们的例子中)具有灵活的 Javascript 代码的好处。
  • Ruby 的性能远不如两者,但代码很酷。

Scala 是赢家,因为我们的商店在 JVM 方面拥有丰富的经验。然而,我们希望在未来更多地利用节点来做到简单。

我确信有经验的 Ruby 人可以改进和调整一些东西,但是对于我们和初学者来说,学习曲线是不值得的。

于 2012-11-30T19:13:42.167 回答
1

查看spray——我喜欢它,因为它轻量级且设计良好(模块化、异步、健全的 API)。对于 web 服务的东西,大多数 web 框架都带有太多的包袱。

于 2012-12-01T07:10:55.687 回答