2017-01-02 1 views
1

最近、akkaのアクターとhttpモジュールを使いこなし始めました。しかし、私はちょっと面倒な小さな変わった話、つまりシングルトンの俳優をつくった。Akkaとシングルトンアクター

はここで2つの例です:

1)

私は、メモリ内キャッシュを持っているが、私のサービスは非常に小さい(そのアプリではなく)ので、私は本当にメモリモデルでは、このような。私はマップにユーザーに関連するほとんどの情報を保持することができます(しかし、リストの地図ですが、構造についてはかなり簡単です)、私は赤字、ジオードまたはエアロスキーのオーバーヘッドと複雑さを得ません。

唯一の問題は、このメモリ内チャーチを複数のソースから変更することができ、前記修正が同期的でなければならないことです。この構造の3つのacessメソッドをすべてシンクロナイズするのではなく(例えば、メッセージキューを構築するかロックを実装するなどして)、構造体とそのアクセスメソッドをアクターにラップし、メッセージキューを構築し、簡単にreceive->物事がスケールアップされれば、メモリ内の専用DBを介してDAアクタと交換するのが非常に簡単になります。

2)さまざまなジョブ(データベースにアクセスし、メモリ内のキャッシュにアクセスし、この計算をデータで行い、結果をユーザーに配信するためにアクターをディスパッチするために使用する必要がある「サービス」レイヤーがあります...等)。

このサービス層は、ブロックやCPU /メモリの集中的な処理を何もしないため、ソートの「シングルトン」、いくつかの関数のクロージャであることが理にかなっています。例えばしかし、このことは、どちらかが必要になり

)/スレッド/私たちが作成しなければならないと要求が行くべき場所をどのように多くの俳優を決定する:

a)の作成)オブジェクトのシングルトンの俳優や

bの両方を作ります両方のオブジェクト実際の "オブジェクト"(fuで単一の名前付きシングルトンを指定するスカラーオブジェクト表記法のように

b)には多くの問題があります。つまり、サービスレイヤーがアクターシステムを「通過」する必要があります(これはベストプラクティスではありません)、独自の「子ども」を創るのではなく、世界の俳優のシステムを使って子どもたちを創造し、メッセージングとモニタリングのロジックがはるかに扱いにくく、直感的ではありません。また、メモリ内のキャッシュにはメッセージキューが組み込まれているという利点はありません(私は実装するのが難しいとは言いませんが、これは "ああ、楽しい私は俳優がいるので、このコードの実装とテストに時間を費やす必要はありません」)。

a)akkaのドキュメントでは、一般的にはあまり記述されていないと言われています。私は意味:このたわごとで

http://doc.akka.io/docs/akka/2.4/scala/cluster-singleton.html

ルックは、ドキュメントの半分はそれを使用しないように警告している、それはそれ自身の依存関係だったと率直に言ってなかった私のような貧しいSODのために非常に読みにくいです並行プログラミング象牙塔の&機能に足を入れる。

だから、ahm。あなたの人の誰かが、シングルトンの俳優を使うのが悪い理由を私に説明できますか?あなたが俳優になれない場合、どのようにシングルトンをデザインしますか?ラインの下で多くのダメージを与えないシングルトンアクターを設計する方法はありますか?インスタンス化された "un aka like"ではなく "global"サービスを持つという "サービス"モデル全体がありますか?

答えて

1

ドキュメントを明確にするために、ドキュメントの使用を警告していません。彼らはシングルトンを使用することで状況が予想される問題が発生する状況があることを警告しています。彼らは次のような状況に言及しています:

  • シングルトンがパフォーマンスのボトルネックである場合。意味あり。すべてがゆっくりと動作する単一のオブジェクトに依存する場合、すべてが遅くなります。
  • アクターをノンストップで利用できるようにする必要がある場合、シングルトンがダウンすると問題が発生します。なぜなら、これらのメッセージは別のインスタンスで処理できないためです。シングルトンを再開するまでには、作業を再開するまでに多少の時間がかかります。
  • 自動ダウンがオンになっていると最大の問題が発生します。オートダウンは、到達不能なノードがダウンしてネットワークから削除されることを想定したポリシーです。これを行うが、ノードが実際にはダウンしていないが、ネットワークパーティションのために到達できない場合、パーティションの両側はそれらが存続しているノードであると判断し、独自のシングルトンを作成する。今は2つのシングルトンを持っています。もちろん、あなたがシングルトンから望むものではありません。とにかく、テストの外でオートダウンを使用するべきではありません。これはテストの完全性と利便性のために含まれていたひどい回復戦略です。

だから私はそれを使用しないことを推奨していません。あなたが構造物の性質に基づいてそれを使用するならば、予想される落とし穴について明確になっているだけです。

関連する問題