システムアーキテクチャ概要
このドキュメントではMBC CQRS Serverlessフレームワークのアーキテクチャ概要を説明します。
AWSインフラストラクチャ
コンポーネント説明
APIレイヤー
クライアントリクエストを受け取るエントリーポイントです。
- API Gateway: CRUD操作用のREST APIエンドポイント
- AppSync: 柔軟なクエリとサブスクリプション用のGraphQL API
- WebSocket API: リアルタイム双方向通信
認証
- Amazon Cognito: ユーザー認証、JWTトークン、ユーザープール
コンピューティング
- AWS Lambda: NestJSアプリケーションのサーバーレス実行
データストレージ
- DynamoDB: CQRSデータ永続化のためのプライマリイベントストア
- RDS Aurora: 複雑なクエリ用のオプショナルリレーショナルデータ
- S3: ファイルとドキュメントのストレージ
メッセージング
- SNS: イベントファンアウトとトピックベースのパブリッシング
- SQS: 信頼性の高いメッセージキューイングと非同期処理
オーケストレーション
- Step Functions: 長時間実行ワークフローとSagaパターン
通知
- SES: トランザクションメール配信
データフロー
システム内でのリクエストの流れを説明します。
- クライアントリクエスト: クライアントがAPI Gateway、AppSync、またはWebSocket経由でリクエストを送信
- 認証: CognitoがJWTトークンを検証
- コマンド実行: Lambdaがコマンドを処理しDynamoDBに永続化
- イベント発行: イベントがSNSに発行される
- イベント処理: SQSキューが非同期処理用のLambdaハンドラーをトリガー
- リードモデル更新: プロジェクションが複雑なクエリ用にRDSを更新
マルチテナントアーキテクチャ
テナント分離は以下の方法で実現されます:
- パーティションキープレフィックス: 各テナントのデータはテナントコードでプレフィックスされる
- リクエストコンテキスト: テナント情報はJWTトークンから抽出される
- クエリフィルタリング: すべてのクエリは自動的にテナントにスコープされる