2016-08-01 3 views
0
Event-A考える

Event-BEvent-Cは、私はセット内のすべてのイベントを持って知っていれば派生Event-ABCを生成する処理をトリガします。ストリーミングイベントやルールベースのトリガー

イベントはユーザーID /セッションID

によってグループ化されている現在、私は、データベースへの書き込み、単一キューからすべてのイベントを読んで、そしてイベントが書き込まれたメタデータのことわざを更新します。メタデータにルールに基づくすべてのイベントが含まれると、集約処理がトリガーされます。このアプローチでは、同じグループに属するイベントを処理するときにキューの作業者が同じ鍵を潜在的に叩くことでパフォーマンス上の問題が発生するため、代替案を探しています。

私が望むのは、処理のためにuserId/sessionIdに基づいてルーティングとキューイングイベントを定義した、より細かいソフトウェアです。私がやろうとしていることは、イベントソーシングにいくぶん類似していると思います。

私はAkkaがこの種の問題に役立つかどうかを見ていました。 actor per userId/sessionIdを使用すると、不必要な並行性が減少し、アクタ内のトリガロジックが含まれます。私の心配は、非常に多くのアクタを使用するときに、メモリが大量に必要になる可能性があることです

答えて

0

あなたが説明していることは、イベント・サウティングよりも佐賀やプロセス・マネージャーに似ています。複数のメッセージを処理し、仕様が満たされると反応するものが必要です。

Akkaはこれに確実に対応できます。 Akkaを使用すると、キーごとにアクタを作成し、受信した個々のアクタにメッセージをルーティングできます。私は、アクターシステムが何千人ものアクターに対処するはずだから、私はあまりにも記憶の問題に心配しないでしょう。私はあなたが到着したどのソリューションのパフォーマンスも測定する必要があると思います。

また、サーバーがクラッシュするときの対処方法も考慮する必要があります。すべてをメモリに保存すると、サーバーがクラッシュしたときにサガを失う可能性があります。要件に応じて問題が発生する場合もあれば、問題が発生しない場合もあります。これを説明することが重要な場合は、Akkaの永続性を調べることができます。

0

このアプローチでは、同じグループに属するイベントを処理するときに潜在的に同じキーを打って労働者をキューに起因するいくつかのパフォーマンスの問題を持っているので、私は選択肢を探しています。

免責事項:ここで説明している内容を理解しているとは確かではありません。そのため、以下の解決策が適切でない可能性があります。

私がしようとしていることは、イベントソーシングに多少似ていると思います。

はい、あなたの説明は、ソースがprocess managerのようなものです。

イベントハンドラ(イベントタイプごとに1つ、または3つすべてにサブスクライブする1つのハンドラがある可能性があります)がイベントを受け取ります。

userId/userSession情報から、プロセスのこのインスタンスの一意の識別子を計算します。プロセスの一意の識別子から構築された、ハッシュまたは名前付きuuidを考えてください。

識別子に一致するプロセスの現在の状態をロードします。それは以前にどのような出来事が見られたかを追跡するデータ構造です。それはちょうどイベントストリームかもしれません。

applyプロセス状態に対する現在のイベント。このイベントがすでに見られている場合は、「適用」はノーオペレーションになると予想されます。イベントメッセージには一意の識別子があります。

更新されたプロセス状態を保存します。これでトランザクションは終了します。

ここで、プロセスの状態を観察します。これは、イベントハンドラまたは非同期プロセスですぐに実行できます。プロセスが「準備完了」の場合は、動詞を使用してEvent-ABCを生成します。

上記の概要は、実行中のプロセスの状態を追跡するが、適切な集約に対してコマンドを実行してビジネスロジックをトリガするプロセスマネージャがある一般的なパターンに従います。

より単純な設計では、「集約」と「プロセス」を組み合わせることができます。基本パターンは同じです。イベントハンドラは、集約のIDを計算し、ロードし、handleイベントコマンドを呼び出します。集合体は、イベントに含まれる情報で自身の状態を更新し、その状態変化を自身の履歴に書き込む。必要なすべてのイベントが考慮されている場合、集合体はイベントABCも自身の履歴に書き込みます。

関連する問題