0

現時点では、このアクター セッション管理の実装を 1 つのノードだけで実行しています。

1)SessionManagerすべてのセッションを処理するアクターがいます

2) は次のSessionManagerActor2 つのメッセージを受信CreateSesion(id)します。ValidateSesion(id)

3)メッセージSessionManagerActorを受信すると、次のようなusingメソッドを作成します。CreateSesion(id)SessionActoractorFor

context.actorOf(Props(new SesionActor(expirationTime)), id)

4)メッセージSessionManagerActorを受信すると、既存のものを探し、次のようなメソッドを使用して存在するかどうかを評価します。ValidateSesion(id)SessionActorresolveOne

context.actorSelection("akka://system/user/sessionManager/" + id).resolveOne()


そのロジックはうまく機能しますが、複数のノード(クラスター)で同じ動作を実装する必要があります

私の質問は、1 つまたは複数のノードで動作するようにセッション管理動作を実装するために推奨される方法はどれですか?

akka のドキュメントを読んだところakka-remoteakka-clusterakka-cluster-shardingakka-cluster-singletonakka-distributed-publish-subscribe-clusterが提供されていますが、どれが適切で最も簡単な方法なのかわかりません。(SessionActors はステートレスであり、クラスター内の任意の場所に配置する必要があることに注意してください。)

4

1 に答える 1

1

セッションが既に存在するかどうかを検証し、セッションに有効期限があるかどうかを検証するプロトコルがあるため、これは技術的に完全にステートレスではありません。たとえば、既存のセッションを失って任意に再度スピンアップしたくないでしょうし、ID ごとに複数のセッションを作成したくないでしょう。

したがって、セッションの有効期限を維持するために akka-persistence と組み合わせて、クラスター シャーディングメカニズムを検討します。

これにより、ノードがダウンしたとき、または新しいノードが起動したときに、リバランスを備えた耐障害性が設定されます。

コード例では、アクティベーター テンプレートakka cluster sharding scalaが役立つ場合があります。

于 2014-12-09T07:51:47.420 に答える