処理できる並行性レベルに関しては、これらのツールが本当に好きです。
Erlangははるかに安定したソリューションのように見えますが、より多くの学習と関数型言語のパラダイムへの多くの飛び込みが必要です。そして、マルチコアCPUに関しては、Erlangのほうがはるかに良くなっているようです(間違っている場合は修正してください)。
しかし、どちらを選ぶべきですか?短期/長期の観点でどちらが良いですか?
私の目標は、高負荷下でWebプロジェクトを従来の言語よりも簡単にスケーリングできるツールを学ぶことです。
Erlangを試してみます。学習曲線は急勾配になりますが、関数型プログラミング言語を学習するので、より多くを活用できます。また、Erlangは信頼性の高い高度な同時システムを作成するために特別に設計されているため、高度にスケーラブルなサービスを同時に作成することについて多くを学びます。
私はErlangについて話すことはできませんが、ノードについて言及されていないいくつかのこと:
実際にノードを書いたRyan Dahlによるyahooのブログの video をチェックしてください。これは、ノードがどこにあり、どこに行くのかをよりよく理解するのに役立つと思います。
ノードはまだ開発の後期段階にあるため、かなりの数の変更(以前のコードを壊した変更)を受けていることに留意してください。ただし、おそらく、APIがあまり変更されないことが期待できる時点です。もしあなたが何か面白いものを探しているなら、ノードは素晴らしい選択だと思います。
私は長年のErlangプログラマーであり、この質問により、node.jsを見るようになりました。それは非常に良いようです。
複数のコアを活用するには、複数のプロセスを生成する必要があるようです。ただし、プロセッサアフィニティの設定については何もわかりません。 Linuxでtasksetを使用できますが、おそらくパラメータ化してプログラムに設定する必要があります。
また、プラットフォームのサポートが少し弱いかもしれないことに気付きました。具体的には、Cygwin for Windowsサポートの下で実行する必要があるようです。
よさそうだ。
Node.jsにWindowsのネイティブサポートが追加されました。
私は個人的にErlangに行きますが、私はJavaScriptに少し偏見があることを認めます。私のアドバイスは、いくつかの点を評価することです。
Erlangには、非常に微調整された同時実行性とネットワーク透過的な並列分散システムがあります。プロジェクトの内容によっては、このようなシステムの成熟した実装の可用性が、新しい言語の学習に関する問題を上回る場合があります。 Erlangで動作する他の2つの言語VM使用できます。Ruby/ Pythonのような Reia および LISP-Flavored Erlang =。
さらに別のオプションは両方を使用することです。特にErlangが一種の「ハブ」として使用される場合です。 Node.jsに外部関数インターフェイスシステムがあるかどうかはわかりませんが、持っている場合、Erlangには他のErlangプロセスと同様にシステムとインターフェイスする外部プロセス用のCライブラリがあります。
私はあなたが複数のプロジェクトのために持っている同じ2つの代替案を探しています。
これまでのところ、特定のプロジェクトでそれらを選択するために思いついた最高のカミソリは、Javascriptを使用する必要があるかどうかです。移行しようとしている既存のシステムの1つはすでにJavascriptで記述されているため、次のバージョンはnode.jsで実行される可能性があります。他のプロジェクトは、移行する既存のコードベースがないため、一部のErlang Webフレームワークで行われます。
もう1つの考慮事項は、Erlangは複数のコアだけでなく、データセンター全体に拡張できることです。 node.jsには、どのマシンがオンになっているかを気にせずに別のJSプロセスにメッセージを送信できる組み込みメカニズムはありませんが、それは最低レベルでErlangに組み込まれています。問題が複数のマシンを必要とするほど大きくない場合、または複数の協調プロセスを必要としない場合、この利点は重要ではない可能性があるため、無視する必要があります。
アーランは確かに飛び込む深いプールです。 Webアプリの構築を開始する前に、まずスタンドアロンの機能プログラムを作成することをお勧めします。 JavaScriptに慣れているため、さらに簡単な最初のステップは、より機能的なスタイルでJSをプログラミングすることです。 jQueryまたはPrototypeを使用している場合、すでにこのパスを開始しています。 Erlangまたはその同族(Haskell、F#、Scala ...)の純粋な関数型プログラミングと関数型JSをバウンスしてみてください。
関数型プログラミングに慣れたら、多くのErlang Webフレームワークの1つを探してください。この後期段階では、おそらくinets
のような低レベルにアプリを直接書くべきではありません。 窒素 のようなものを見てください。
Erlangは、比較的ローエンドのサーバー(512MB 4コア2.4GHz AMD VM)での展開に適しているようです。これは、仮想ホワイトボードサーバーアプリケーションのErlangとNode.jsの実装を比較する SyncPadの経験 によるものです。
同じVM erlangは-> Elixir
Erlangの非常に興味深い代替手段です。これをチェックしてください。
また、it-> Phoenix Framework に基づいた急成長中のWebフレームワークもあります。
whatsappは、erlangなしではスケーラビリティと信頼性のレベルを達成できませんでした https://www.youtube.com/watch?v=c12cYAUTXXs
NodeよりもErlangを優先します。並行性が必要な場合、Nodeは軽量プロセスのため、ErlangまたはGolangで置き換えることができます。
Erlangは習得が容易ではないため、多くの努力が必要ですが、コミュニティは活発であるため、そこから助けを得ることができます。これが人々がNodeを好む理由です。