質問
私は最近Akkaを見てきましたが、それはかなり印象的です。 Erlangのキラー機能のほとんどがあるように見えます - 場所の透明性、監督階層など。 Akkaが持っていないErlangの機能はありますか?
解決
免責事項:私はAkkaのPOです
- Erlangはコピーオンセンドを行います-Akkaは、in-VM送信に共有メモリ(不変のオブジェクト)を使用します
- ErlangはプロセスPERPESS GC -AKKAをJVM GCSを使用します
- エルランは持っています OTP -AkkaはJavaエコシステム全体(Apache Camel、Jax-Rsなど)と統合します
- Erlangはあなたのためにプロセススケジューリングを行います-Akkaでは、無限の構成の機会を持つ多くの異なるディスパッチャを使用することができます
- erlangはホットコードリロードを行います-akkaはそれをサポートできますが、JVMクラスロードのために柔軟性が低くなります
それらは私の頭の上からのものです。
一方、Akkaを使用すると、Scala、Java、Groovy、またはJrubyを使用してアプリケーションを書き込むことができます。
他のヒント
Erlangプロセスでは、約1000の削減ごとに切り替えることが保証されています。 Scala/Akkaエージェントなどの素朴なフレームワークでは、受信の作業が終了するまでスケジューラを所有しています。チェックメイト。ゲームオーバー。 hasta la vista :)人々、擬似技術にあなたの時間を無駄にしないでください。ここの人たちがScalaをErlangと比較することにショックを受けました。
また、他の多くのいわゆる「キラー機能」がありますが、ここに私のアドバイスがあります。特徴の観点からは考えず、特定の言語を有効にするイディオムについて考えてください。 Scalaは「最高の機能」を盗み、Erlangは、適切なイディオムを確実に構築するために、適切なイディオムを使用して、それらの正しいイディオムから駆動される高レベルの言語を実現します。 Erlangを学ぶとき、あなたはあなたの心、分配された信頼できるシステムについてのあなたの考え方を再構築しているので、Erlangはあなたに教え、あなたをアップグレードします。 Scalaは、他の言語から優れた機能を盗もうとするもう1つの重要な(ああ、申し訳ありませんが、マルチパラダイマル、面白い言葉)言語です。
プロセスの隔離にほとんど言及している人はほとんどいません。 「あなたのスレッドは私のジャンクを台無しにすることはできません」を保証することがなければ、分散システムは推論するのがはるかに困難です。 (彼らはすでに十分に難しいです と エルランのプロセス。)
AFAIK(JVMでの私の直接的な経験が限られていることを考えると、これは遠くない)、Erlangだけが実際にJVMでプロセス分離を「正しい」としています。 Google氏は、「マイクロリブート」技術(「回復指向のコンピューティング」)を使用する研究システムに関するFoxとCandea(?)による研究をどこで見つけるかについてのヒントを提供できます。 Erlang開発者はその研究を読み、いくつかのことを言います:
- クラブへようこそ、何がそんなに長くかかったのですか?
- しかし、JVMはそれをひどく、ひどく参加するのが難しくなります。 :-)
私にとっては、ダウンタイムなしでErlangクラスター全体でホットコードを交換します(例: make:all([netload]
)Erlang Killer機能の1つです。
しかし、あなたの質問を逆にしましょう:AkkaにはそのErlangには何がありませんか?もちろん、数十の拡張機能とライブラリ(Scala、Akka、Spring、Osgi、...)をJavaに追加して、Erlangに近づけようとすることができます。しかし、ポイントはどこにありますか?要するに、これらのすべての拡張機能は、20年以上にわたってダウンタイムがゼロでトップスケーラビリティを提供できることを証明している単純なErlang言語を学習するよりもはるかに複雑です。
おそらく、Erlangはより大きな分散システムに適しています(Vjacheの回答に従ってください)が、複数のCPUのフルパワーを使用するだけの通常のサーバーの場合、Akkaは良い選択です。