0

AWSサーバレスアーキテクチャに基づいてCQRS + Event Sourcingバックエンドを実装しようとしています。 問題はreadmodelの更新で発生します。AWS Lambdaを使用したサーバレスCQRS + EventSourcing ReadModelの更新

イベントがイベントストアに保存されると、SNSに公開されます。 SNSは次にUpdateReadModelラムダを呼び出します。 いくつかのシーケンシャルイベントがSNSに公開されると、いくつかのラムダが呼び出されます。

最初のの問題は、すべてが同じReadModelアップデートを実行し、実際にはすべてのイベントに対して1つのラムダのみを呼び出さなければならないということです。

第2のの問題は、いくつかのラムダの実行後に最終的なReadModel状態が壊れることがあります。

ReadModelごとに1つのラムダが呼び出される必要があります。

可能な解決策:

  1. 使用のMessageBroker(RabbitMQの又はカフカ)+ EC2インスタンスがUpdateReadModelLambdaを呼び出します。

  2. SNS + EC2インスタンスの後にSQSを追加し、lambdasを呼び出してSQSからイベントを取得するコードを記述します。

しかし、私はそれはサーバーレスアプローチで収まらないだと開発者が管理し、規模のコンテナまたはMessageBusの手動なければならないので、インスタンスを使用しないでしょう。

誰かが既にクラウドサービス+ CQRS + EventSourcingにこの問題を解決しているのでしょうか?

+0

はそれを自分自身を試しませんでしたが、この事は、何が必要やっているように見えます:私たちはEventSourcingとCQRSを提供するクラウドホスト型イベントエンジンに取り組んでいるhttps://github.com/doodeck/aws-lambda-idempotent –

+0

APIを介して超初期段階ですが、あなたが望むなら無料で試すことができます:-) https://serialized.io – hammarback

+0

KinesisはSNSの代わりにこのストリームを流していますか?パーティションキー(=ストリームID)とソートキー(=シーケンス番号)を持つDynamoDBは、潜在的なイベントストアと考えられ、ラムダやキネシスとうまく統合されています。 – TomW

答えて

0

メッセージブローカーを投影に使用することは、通常は悪い考えです。発注を保証することはできません。ただ一回のみの配送を保証することはできません。他の読み取りモデルが同じイベントを再度取得するため、1つの読み取りモデルのイベントを再生することはできません。私はそれをしません。

イベントストアのアクション(たとえばDynamoの挿入)によってトリガされたラムダ関数を使用できます。各ラムダは、1つの集約タイプの投影の集まり、または1つの単一の投影だけです。それでも、再試行した場合、イベントの順序が乱れる可能性があることを忘れないでください。並列化を無効にすることはできません。

関連する問題