web-dev-qa-db-ja.com

akkaはErlangと比較してどうですか?

私は最近akkaを見てきましたが、それはかなり印象的です。位置の透明性、監視階層など、アーランのキラー機能のほとんどを備えているようです。 erlangにはakkaにはない機能がありますか?

95
ryeguy

免責事項:私はAkkaのPOです

  • Erlangはコピーオンセンドを行います-AkkaはVM内の送信に共有メモリ(不変オブジェクト)を使用します
  • ErlangはプロセスごとのGCを実行します-AkkaはJVM GCを使用します
  • Erlangには [〜#〜] otp [〜#〜] -AkkaはJavaエコシステム(Apache Camel、JAX-RSなど)全体と統合します)
  • Erlangがプロセスのスケジューリングを行います-Akkaを使用すると、さまざまなDispatcherを無限の設定機会で使用できます
  • Erlangはホットコードのリロードを行います-Akkaはそれをサポートできますが、JVMクラスローディングのために柔軟性が低くなります

それらは私の頭の上からのものです。

一方、Akkaを使用するということは、Scala、Java、Groovy、またはJRubyを使用してアプリケーションを作成できることを意味します。

121
Viktor Klang

アーランでは、約1000の削減ごとにプロセスが切り替えられることが保証されています。 Scala/Akkaエージェントなどの単純なフレームワークでは、受信の作業が完了するまでスケジューラを所有します。チェックメイト。ゲームオーバー。 Hasta la Vista :)皆さん、疑似技術に時間を無駄にしないでください。ここにいる人たちがScala= Erlangと比較してください。

また、「キラー機能」と呼ばれる他の多くの機能がありますが、ここに私のアドバイスがあります。機能に関しては考えず、特定の言語を可能にするイディオムについて考えてください。 Scala「最高の機能」を盗む、Erlangは適切なイディオムでシステムを確実に構築できるようにします。分散型の信頼できるシステムについてのあなたの考え方、Erlangがあなたを教え、あなたをアップグレードします。Scala言語。

72
vjache

プロセスの分離について言及している人はほとんどいません。 「あなたのスレッドが私のジャンクを台無しにすることはできない」という保証がなければ、分散システムを推論するのははるかに困難です。 (すでに十分に難しいwith Erlangのプロセス。)

AFAIK(JVMでの直接的な経験が限られていることを考えると、それほど遠くはありません)、Erlangだけが実際にJVMでプロセス分離を「正しく」取得します。グーグル氏は、「マイクロリブート」技術(「リカバリ指向コンピューティング」)を使用する研究システムに関するFoxとCandea(?)の研究の入手先に関するヒントを提供できます。 Erlang開発者はその研究を読み、いくつかのことを言います。

  1. クラブへようこそ、どうしてそんなに時間がかかりましたか?
  2. ただし、JVMは参加を非常に困難にします。 :-)
39

私にとっては、ダウンタイムなしでErlangクラスター全体のホットコードスワッピング(例:make:all([netload])は、Erlangのキラー機能の1つです。

しかし、あなたの質問を逆にしましょう:akkaにはErlangにはないものがありますか?もちろん、Earlangに近づくために、Javaに数十の拡張機能とライブラリ(scala、akka、spring、osgi、...)を追加できます。しかし、ポイントはどこにあるのでしょうか?これらのすべての拡張機能は、20年以上にわたって、ダウンタイムなしで最高のスケーラビリティを提供できることが実証されているシンプルなErlang言語を学ぶよりもはるかに複雑です。

14
Rumpelstilz

おそらく、Erlangはより大きな分散システム(vjacheの答えに従う)には適していますが、通常のサーバーでは複数のCPUのフルパワーを使用したい場合、Akkaが適切な選択肢です。Javaエコシステム。

4
kodstark