高性能REST API – 哪种语言/堆栈?

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

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

  • 的node.js
  • 斯卡拉喷雾(http://spray.io/)
  • Ruby Sinatra

谢谢!

简介 :最大限度地提高开发人员的绩效。 使用最好的堆栈。 首先让它工作, 然后快速。

那里有没有任何性能基准?

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

而且,有时性能更高,成本也更高。 以ruby C扩展为例。 当然,C的运行速度比Ruby快,但是它阻止了其他线程在其他内核上运行(因为GIL)。

所以,不要只select来自互联网的基准数字来select科技。 除了原料HPS数量之外,还有很多因素需要考虑。

LINK :如果你觉得Rails太重了,你应该试试rails-api 。 它基本上是一个精简版的Rails(你不需要cookie身份validation或api服务器中的MSIE呈现助手等)。


个人故事

我运行一个处理一些负载的API服务器。 第一个版本是用Rails编写的。 然后我想“嘿,Rails是膨胀的(c),让我们用Sinatra重写所有的东西”。 然后我有一阵接一波的挫折感。 事实certificate,Rails做了很多小而有用的事情,我不明白。 我放弃了,再次用Rails重写(应用经验教训)并从此幸福地生活过。

这属于'我应该重写我的apache / PHP网站用C自定义的networking服务器,因为它是缓慢'桶。

我投票select你最喜欢的堆栈工作,并利用良好的caching和使用任何操作码优化,如果你的代码没有编译。 然后确保你有足够的服务器资源和水平负载平衡,如果需要处理stream量。

我还没有看到许多API的性能差的主要原因是技术堆栈的select,除非他们处理Facebook / Twitter的大小stream量或做计算密集型的工作。

如果在下列情况下正确使用了更多延迟,您将会看到您select的任何堆栈:

  1. 将不必要的大量数据传输到客户端
  2. 由于较差的SQL或其他数据源读取缓慢,性能下降

如果您已经使用RoR堆栈来坚持,我也强烈build议。 试图在不同的堆栈中进行优化和编码通常会导致代码变得更弱 – 一次让开发人员的大脑集中在一个futz池中。

这真的取决于你的用例和团队经验/喜好 – 但是,如果你真的对任何堆栈都是开放的,我们的个人经验是:

  • Scala + Scalatra + Jetty简单而且速度非常快。
  • Node + Express的速度惊人地接近 – 但是灵活的Javascript代码的好处(在我们的例子中)。
  • Ruby比其他任何程序都less得多,但是有很酷的代码。

Scala是一个赢家,因为我们的商店在JVM方面有很多的经验。 不过,我们希望将来能够更多地利用节点来做到简单。

我确信有经验的Ruby工程师可以改进和调整,但是这对我们来说并不值得学习。

检查喷雾 – 我喜欢它,因为它是轻量级和精心devise(模块化,asynchronous,理智的API)。 对于Web服务的东西,大多数Web框架只是带来了太多的包袱。