2017-03-05 5 views
3

Actorsのツリー構造の典型的なAkkaアプリケーション、つまり階層の最下部にある数千もの小さなアクタを管理する、少数(2〜3)のトップレベルアクタを想像してみましょう。持続性には2つのアプローチがあるようです:永続化するアクターはどれですか?

  1. トップレベルのアクターだけを永続化させます。子アクターは、状態回復などのために両親に依存します。
  2. すべての子アクターを永続化します。永続性IDは数千に上る可能性があり、各アクタは自分の状態を回復できます。

これらのアプローチを選択する際に考慮すべき点はありますか?他のものとうまく適合しないユースケースの典型的な例はありますか?

質問は抽象であると考えられますが、ここにその例があります。アプリケーションのユーザーごとに俳優があり、これらの俳優が同じ親の俳優を共有しているとします。各ユーザーの電子メールアドレスとその更新を永続化したい場合は、すべてのユーザーアクターを永続化するか、トップレベルのアクターを永続化することができます。

答えて

2

この場合、私はおそらく2番目のアプローチに行きます。ユーザーのアクタのイベントが「選択された」ときにのみ回復します。このアプローチをより便利にするのは、ユーザーアクターの動作がその状態に基づいて変更できるという事実です。例えば。ユーザーが登録しても、同じ「登録された」イベントを何度も保持したくないことは確かです。ユーザーがアカウントを無効にすると、メールを更新することはできません。さらに、すべての変更は一連のイベントとして保存されます。データの損失はありません。

一方、最初のアプローチを使用する場合は、親アクターの回復時にすべての子アクターを再作成して、前述の望ましくない動作を回避できるように状態を設定する必要があります。

関連する問題