耐久性のあるリアルタイム分析の設計
常に最新のデータを反映したダッシュボードが必要です。また、規模が拡大しても正確性を維持し続ける必要があります。イベントソーシングはこれを解決します。
フロー:
- プロデューサー: サービスがドメインイベントを送信します。
- イベントバス: KafkaまたはKinesisがイベントをログに保存します。
- プロセッサー: ログを読み取り、リードモデルを更新します。
- リードモデル: PostgresまたはRedisが最終的なメトリクスを保存します。
- クエリAPI: ダッシュボードからここでデータを取得します。
設計における重要なルール:
- イベントを不変(イミュータブル)にします。イベントを更新してはいけません。
- べき等性キーを使用します。これによりデータの重複を防ぎます。
- スキーマにバージョンを付与します。これにより、システムの破損を防ぎます。
- 決定論的なプロジェクションを使用します。これによりデータの整合性を維持します。
構築方法:
- コアとなるイベントを特定します。
- ストレージツールを選択します。
- メトリクス用の初期プロジェクションを構築します。
- 重複排除を実装します。
- スキーマレジストリを作成します。
- イベントラグを監視します。
この構成により、データのスケーリングと監査が可能になります。すべての変更の完全な履歴を保持できるからです。