まず第一に、他のリソースについて考えることがより重要です。
1)インタープリターを持っています(開発を高速化するため)-imo un true
2)コンパイラを持っています(コンパイルされたコードはより速く実行されるため)-本当に?dev と server マシンのさまざまなアーキテクチャと展開についてはどうですか?
3) OO 機能があります - なぜですか? 関数型言語は並列プログラミングに適しています
4) 静的型付け - なぜ ? 型システムに「null」値がある場合、これと静的に型指定されていないimoの間に違いはありません。
より良い基準は
- 使用できる高品質のライブラリとフレームワークがいくつあるか。
- このソリューションを展開する方法
- プロジェクトに新しい開発者を呼び込むのはいかに簡単か
コミュニティの質とは:)
Ocaml は優れた言語であり、Lwt ライブラリを使用すると、1 つのプロセスを簡単に実行しながら非同期コードを実行できます。Ocamlも爆速!これは良い解決策のように思えますが、本番対応のフレームワークはあまりありません。
Erlang にはライブラリがあり、クールで高速であり、ニーズに最適なソリューションのようです。
Ruby と Ruby On Rails では、並列コードを簡単に書くことはできませんが、ソリューションをすばやく構築して、それでお金を稼ぎ始めることができます :) つまり、準備ができているブロックがあるため、他の言語よりも 10 倍高速です。また、この場合の展開は最も簡単です。
Node.js は非常に高速で、言語 ( javascript ) を簡単に取得できますが、開発の初期段階であるため、本番環境に対応できるものは多くありません。
これが私が解決策にアプローチする方法です:
パフォーマンスに関しては、次の取引があります
- メモリ上限
CPU キャップ
- メモリ上限 ( ram ) は、この言語で記述されたソリューションがより多くの RAM を消費することを意味し、最終的には新しいボックスをすばやく購入する必要があり、スケーリングするボックスは「太る」必要があります:)
- CPU キャップは、ソリューションが非常に積極的なガベージ コレクターを持ち、頻繁にクリーンアップされる多くの小さなオブジェクトを割り当てることを意味します。
このコンテキストでの Node.js と Rails はメモリに上限があり、Rails は本番環境でワーカーあたり平均 ~250 MB の RAM を消費します。Ocaml / Oscigen 、Erlang / Webmachine は CPU に制限があり、ほとんどの関数型言語はこのルートをたどります。
i5 CPU を搭載した macbook pro で webmachine の小さなテストを行いましたhttps://gist.github.com/1996858
このリソースは、キャッシュなしで redis から毎回プルされる単純な json を提供していました。
100 万リクエスト 合計: 接続 1000 リクエスト 1000000 返信 1000000 テスト期間 463.413 秒
Connection rate: 2.2 conn/s (463.4 ms/conn, <=1 concurrent connections)
Connection time [ms]: min 390.6 avg 463.4 max 3245.7 median 453.5 stddev 101.6
Connection time [ms]: connect 0.1
Connection length [replies/conn]: 1000.000
Request rate: 2157.9 req/s (0.5 ms/req)
一番良かったのは、メモリ使用量を監視することでした。約 19.3 MB の RAM でした。
Rails でアプリケーションのプロトタイプをビルドしてから、json API を抽出し、webmachine を使用して Erlang でビルドします。または、webmachine を使用して Erlang でアプリをビルドし、展開用に capistrano などのいくつかの Ruby ライブラリの優れた機能を使用するだけです :)