ファンアウト

1 つのイベントを複数のコンシューマーに同時配信するメッセージングパターン

アーキテクチャイベント駆動

ファンアウトとは

ファンアウト (Fan-Out) は、1 つのイベントを複数のコンシューマーに同時配信するメッセージングパターンである。SNS + SQS の組み合わせが AWS での代表的な実装。

ファンアウトの構造

ファンアウトの構造を図で示す。

注文サービス → SNS トピック → SQS (在庫サービス)
                            → SQS (通知サービス)
                            → SQS (分析サービス)
                            → Lambda (監査ログ)

プロデューサーは 1 つのトピックに発行するだけ。コンシューマーの追加・削除はプロデューサーに影響しない。

SNS vs EventBridge

SNS と EventBridge の違いを以下にまとめる。

観点 SNS EventBridge
フィルタリング メッセージ属性 コンテンツベース (強力)
ターゲット SQS, Lambda, HTTP 20+ AWS サービス
スループット 高い 高い
スキーマ なし Schema Registry

ファンアウトとテールレイテンシ

ファンアウトとテールレイテンシを図で示す。

1 リクエストが 10 の Lambda を並列呼び出し:
  各 Lambda の P99 = 100ms
  全体の P99 ≈ 1 - (0.99)^10 = 9.6% が 100ms 超
→ ファンアウトが増えるほどテールレイテンシが悪化
→ 非同期ファンアウト (SNS/SQS) で影響を分離

ファンイン (逆パターン)

ファンイン (逆パターン) を図で示す。

複数のソース → 1 つの集約先

S3 バケット A → Lambda → DynamoDB
S3 バケット B → Lambda → DynamoDB
S3 バケット C → Lambda → DynamoDB

ファンアウトの注意点

ファンアウトの注意点を以下にまとめる。

注意点 対策
メッセージの順序 SQS FIFO で順序保証
重複配信 冪等性を確保
コンシューマーの障害 DLQ で失敗メッセージを保持
コスト コンシューマー数 × メッセージ数

全体像を把握するには関連書籍も有用。

この記事は役に立ちましたか?

関連用語

関連する記事