6

RubyonRailsを使用してサイトを開発しています。パフォーマンスを最大化するためにRESTAPI(JSON)を個別に開発したいのですが、Railsスタックはあまりにも多くを奪います。

そこにパフォーマンスベンチマークはありますか?何が最高のパフォーマンスを生み出すと思いますか?私は現在、次のことを考えています。それが私が経験したことだからです。他に考慮すべきことはありますか?軽量である必要があります。

  • node.js
  • Scalaスプレー(http://spray.io/)
  • ルビーシナトラ

ありがとう!

4

4 に答える 4

26

概要:開発者としてのパフォーマンスを最大化します。あなたが最もよく知っているスタックを使用してください。最初にそれを機能させ、次にそれを速くします。

そこにパフォーマンスベンチマークはありますか?

そこにはあらゆる種類のベンチマークがあります。たとえば、node.jsは100k HPS(helloworlds per second)を処理でき、Sinatraは80kしか処理できないとします。それはあなたに何を伝えますか?何もない。

また、パフォーマンスの向上には大きなコストがかかる場合があります。たとえば、rubyC拡張機能を取り上げます。もちろん、CはRubyよりも高速に実行されますが、他のスレッドが他のコアで実行されるのを防ぎます(GILのため)。

したがって、インターネットのベンチマーク値だけで技術を選択しないでください。生のHPS数以外にも、考慮すべき要素がたくさんあります。

リンク:Railsが重すぎると思われる場合は、rails-apiを試してください。これは基本的にRailsの簡略版です(APIサーバーでのCookie認証やMSIEレンダリングヘルパーなどは必要ありません)。


個人的な話

負荷を処理するAPIサーバーを実行しています。最初のバージョンはRailsで書かれました。それで、「ねえ、レールが膨れ上がっている(c)、シナトラですべてを書き直そう」と思いました。そして、次々と欲求不満の波がやってきた。Railsは、小さいながらも役立つことをたくさん行っていることがわかりました。私はあきらめて、Railsでそれを書き直し(学んだ教訓を適用して)、それ以来ずっと幸せに暮らしました。

于 2012-11-30T18:29:59.640 に答える
3

これは、「遅いので、カスタマイズされたWebサーバーを使用してCでapache/phpサイトを書き直す必要がある」に該当します。

私は、お気に入りのスタックを選んで作業し、優れたキャッシングを利用し、コードがコンパイルされていない場合に利用可能なオペコード最適化を使用することに投票します。次に、トラフィックを処理するために必要な場合は、十分なサーバーリソースがあり、水平方向に負荷分散されていることを確認します。

Facebook / Twitterサイズのトラフィックを処理したり、計算量の多い作業を行ったりしない限り、パフォーマンスの低下の主な理由がテクノロジースタックの選択である多くのAPIをまだ見たことがありません。

適切に利用されたより多くのレイテンシーが発生した場合、選択したほぼすべてのスタックに表示されます。

  1. 不必要に大量のデータをクライアントに転送する
  2. SQLまたはその他のデータソースのフェッチ速度が遅いためにパフォーマンスが低下する

また、RoRスタックを使用してそれを維持している場合も強くお勧めします。異なるスタックで最適化してコーディングしようとすると、通常、両方のコードが弱くなります。開発者の頭脳を一度に1つのプールに集中させてください。

于 2012-11-30T18:23:25.867 に答える
1

それは実際にはあなたのユースケースとチームの経験/好みに依存します-しかし、あなたがどんなスタックについても本当にオープンエンドであるならば、私たちの個人的な経験は次のとおりでした:

  • Scala + Scalatra + Jettyはシンプルで、非常に高速でした。
  • Node + Expressの速度は驚くほど高速でしたが、(この場合は)柔軟なJavascriptコードの利点がありました。
  • Rubyはどちらよりもパフォーマンスがはるかに劣っていましたが、コードはクールでした。

当店はJVMの経験が豊富なため、Scalaが勝者となりました。ただし、将来的にはノードをさらに活用してシンプルにすることを望んでいます。

経験豊富なRubyの人たちは、物事を改善して調整できると確信していますが、私たちにとって、そして初心者ではない人にとっては、学習曲線の価値はありませんでした。

于 2012-11-30T19:13:42.167 に答える
1

スプレーをチェックしてください-軽量でよく設計されているので(モジュラー、非同期、健全なAPI)、私はそれが好きです。Webサービス関連の場合、ほとんどのWebフレームワークには手荷物が多すぎます。

于 2012-12-01T07:10:55.687 に答える