最近、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"サービスを持つという "サービス"モデル全体がありますか?