web-dev-qa-db-ja.com

Node.jsまたはErlang

処理できる並行性レベルに関しては、これらのツールが本当に好きです。

Erlangははるかに安定したソリューションのように見えますが、より多くの学習と関数型言語のパラダイムへの多くの飛び込みが必要です。そして、マルチコアCPUに関しては、Erlangのほうがはるかに良くなっているようです(間違っている場合は修正してください)。

しかし、どちらを選ぶべきですか?短期/長期の観点でどちらが良いですか?

私の目標は、高負荷下でWebプロジェクトを従来の言語よりも簡単にスケーリングできるツールを学ぶことです。

86
user80805

Erlangを試してみます。学習曲線は急勾配になりますが、関数型プログラミング言語を学習するので、より多くを活用できます。また、Erlangは信頼性の高い高度な同時システムを作成するために特別に設計されているため、高度にスケーラブルなサービスを同時に作成することについて多くを学びます。

87
Justin Ethier

私はErlangについて話すことはできませんが、ノードについて言及されていないいくつかのこと:

  • Nodeは、GoogleのV8エンジンを使用して、実際にJavaScriptをマシンコードにコンパイルします。したがって、ノードは実際にはかなり高速です。そのため、イベント駆動型プログラミングとノンブロッキングIOによって提供される速度の利点に加えて。
  • Nodeにはかなり活発なコミュニティがあります。 freenodeのIRCグループに飛び乗ると、私の意味がわかります
  • 上記のコメントは、関数型プログラミング言語を学ぶことが有用であるという理由でErlangをプッシュすることに気づきました。スキルセットを拡張し、それらのいずれかをあなたのベルトの下に置くことが重要であることに同意しますが、新しいプログラミングスタイルを学びたいという事実に基づいてプロジェクトを行うべきではありません
  • 一方、Javascriptはすでに書き心地の良いパラダイムになっています!さらに、javascriptであるため、クライアント側のコードを記述すると、一貫性のある外観になります。
  • ノードのコミュニティはすでに大量の modules ! redis、mongodb、couch、その他のモジュールがあります。調べるべきもう1つの優れたモジュールは、 Express (ノードのSinatraを考える)です。

実際にノードを書いたRyan Dahlによるyahooのブログの video をチェックしてください。これは、ノードがどこにあり、どこに行くのかをよりよく理解するのに役立つと思います。

ノードはまだ開発の後期段階にあるため、かなりの数の変更(以前のコードを壊した変更)を受けていることに留意してください。ただし、おそらく、APIがあまり変更されないことが期待できる時点です。もしあなたが何か面白いものを探しているなら、ノードは素晴らしい選択だと思います。

50
Jarsen

私は長年のErlangプログラマーであり、この質問により、node.jsを見るようになりました。それは非常に良いようです。

複数のコアを活用するには、複数のプロセスを生成する必要があるようです。ただし、プロセッサアフィニティの設定については何もわかりません。 Linuxでtasksetを使用できますが、おそらくパラメータ化してプログラムに設定する必要があります。

また、プラットフォームのサポートが少し弱いかもしれないことに気付きました。具体的には、Cygwin for Windowsサポートの下で実行する必要があるようです。

よさそうだ。


編集

Node.jsにWindowsのネイティブサポートが追加されました。

15
dsmith

私は個人的にErlangに行きますが、私はJavaScriptに少し偏見があることを認めます。私のアドバイスは、いくつかの点を評価することです。

  1. これらの言語のいずれかで既存のコードを再利用していますか(ソースコードとプログラマーの経験の両方の面で!)
  2. アプリケーションを停止せずにオンザフライで更新する必要がありますか?
  3. 帯域幅ではなく、個別の同時操作に関して、予想されるトラフィックはどれくらいですか?
  4. 各リクエストに対して行う操作はどの程度「並列」ですか?

Erlangには、非常に微調整された同時実行性とネットワーク透過的な並列分散システムがあります。プロジェクトの内容によっては、このようなシステムの成熟した実装の可用性が、新しい言語の学習に関する問題を上回る場合があります。 Erlangで動作する他の2つの言語VM使用できます。Ruby/ Pythonのような Reia および LISP-Flavored Erlang =。

さらに別のオプションは両方を使用することです。特にErlangが一種の「ハブ」として使用される場合です。 Node.jsに外部関数インターフェイスシステムがあるかどうかはわかりませんが、持っている場合、Erlangには他のErlangプロセスと同様にシステムとインターフェイスする外部プロセス用のCライブラリがあります。

9
p_l

私はあなたが複数のプロジェクトのために持っている同じ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のような低レベルにアプリを直接書くべきではありません。 窒素 のようなものを見てください。

9
Warren Young

Erlangは、比較的ローエンドのサーバー(512MB 4コア2.4GHz AMD VM)での展開に適しているようです。これは、仮想ホワイトボードサーバーアプリケーションのErlangとNode.jsの実装を比較する SyncPadの経験 によるものです。

5
adib

同じVM erlangは-> Elixir

Erlangの非常に興味深い代替手段です。これをチェックしてください。

また、it-> Phoenix Framework に基づいた急成長中のWebフレームワークもあります。

4
NoDisplayName

whatsappは、erlangなしではスケーラビリティと信頼性のレベルを達成できませんでした https://www.youtube.com/watch?v=c12cYAUTXXs

3
Henry H.

NodeよりもErlangを優先します。並行性が必要な場合、Nodeは軽量プロセスのため、ErlangまたはGolangで置き換えることができます。

Erlangは習得が容易ではないため、多くの努力が必要ですが、コミュニティは活発であるため、そこから助けを得ることができます。これが人々がNodeを好む理由です。

0
Sumit Pugalia