12

Erlangのアクターモデルの特徴の1つは、透過的な配布です。私が誤解していない限り、アクター間でメッセージを送信する場合、理論的には、アクターが同じプロセススペースにある、または同じ物理マシン上に同じ場所にあると想定するべきではありません。

私は常に、分散型のフォールトトレラントシステムでは、順序付け/因果関係およびコンセンサス(とりわけ)に関する固有の問題を解決するために、注意深いアプリケーション設計が必要であるという印象を受けてきました。

Erlangはこれらのクラスの問題を透過的に解決することを約束していないと確信しているので、私の質問は、Erlang開発者がこれにどのように対処するかということです。すべてのアクターが同じプロセススペースにあるかのようにアプリケーションを設計し、実際にそれらを配布するときにのみ配布の問題を解決しますか?

もしそうなら、Erlangのこの透過的な分散機能は本当にリモートメッセージングに使用されるワイヤープロトコルに関係していて、真の分散アプリケーションがまだアプリケーション層で注意深い設計を必要とするという意味で実際には透過的ではありませんか?

4

3 に答える 3

3

実際、Erlangはこれらの問題を透過的に解決します。これは、不変(単一代入)変数を持つ関数型言語であるため、これを行うことができます。並行性のためにアクターモデルを使用し、プログラマーが同期について心配することなく、コードのホットスワップと並行プログラミングを可能にするように特別に設計されました。

ウィキペディアの記事には、実際にはこれについてかなり良い説明があります。エリクソンが超並列電話スイッチをプログラムする実用的な方法としてこの言語を発明したことは私の理解です。

于 2009-06-09T22:03:22.790 に答える
3

あなたは、erlangが本質的に順序付け/因果関係またはコンセンサスの問題を解決しないということは正しいです。erlangが抽象化するのは、ローカルノードとリモートノードのメッセージの送信の違いです。

言語設計でこれらの問題を本当に解決できるかどうかはわかりません。それはより適切にフレームワークに属します。OTPフレームワークには、それを支援するいくつかのツールがあります。本当にそれはあなたが解決している特定の問題にいくらか依存していますが。

Erlang VectorClock実装の一例として、distributerlを見てください。ErlangOTPスーパー バイザーもコンセンサスに必要なインフラストラクチャの一部を提供する可能性がありますが、コンセンサスは分散システムを渡す非同期メッセージでは不可能であると考えられています。詳細については、参照されているwikiページを参照してください。

于 2009-06-10T02:01:24.353 に答える
3

Erlangはそれらのことを約束します(http://www.sics.se/~joe/thesis/armstrong_thesis_2003.pdfセクション3.1(39-40)):

  • すべてがプロセスです。
  • プロセスは強力に分離されています。
  • プロセスの作成と破棄は軽量の操作です。
  • メッセージパッシングは、プロセスが相互作用する唯一の方法です。
  • プロセスには一意の名前があります。
  • プロセスの名前がわかっている場合は、メッセージを送信できます。
  • プロセスはリソースを共有しません。
  • エラー処理は非ローカルです。
  • プロセスは、実行または失敗することになっていることを実行します。

残りはあなた次第です。理由を知りたい場合は、第2章を参照してください。まもなく、別のHWにある場合でも、そのPIDがわかっている場合は、プロセスにメッセージを送信できます。共通の秘密で応答を受け取らない限り、メッセージが到着するかどうかはわかりません。プロセスが失敗したときに、それを監視(またはリンク)すると、確実に失敗メッセージを受け取ることができます。これらは、必要なものを構築するための基本的な要素です。

于 2009-06-10T09:23:14.973 に答える