イベント駆動アーキテクチャ いべんとくどうあーきてくちゃ
簡単に言うとこんな感じ!
「何か起きたら、それに反応して動く」仕組みだよ!たとえば注文が入ったら自動で在庫を減らして、請求書を発行して、メールを送る——みたいに、「出来事(イベント)」をきっかけに複数の処理がバラバラに動き出すアーキテクチャなんだ!
イベント駆動アーキテクチャとは
イベント駆動アーキテクチャ(EDA: Event-Driven Architecture) とは、システム内で起きた「出来事=イベント」をトリガーにして、各コンポーネントが非同期に反応・処理を行う設計思想です。従来の「AがBに直接命令する」方式とは異なり、「何かが起きた」という情報を流すことで、受け取った側が自律的に動きます。
たとえばECサイトで「注文完了」というイベントが発生すると、在庫管理・請求処理・配送手配・メール通知といった複数のシステムがそれぞれ独立して反応します。注文システムは「誰が何をするか」を知らなくてよく、呼び出し元と呼び出し先が密接につながらない(疎結合) 状態を実現できます。
ビジネスの現場では、要件が頻繁に変わる現代のシステム開発において、「新しい処理を追加しても既存コードをほぼ触らなくてよい」という柔軟性が高く評価されており、マイクロサービスやクラウドネイティブな設計と非常に相性が良い アーキテクチャとして普及しています。
イベント駆動の構造と登場人物
EDAには主に3つの役割があります。
| 役割 | 別名 | 役割の説明 | 具体例 |
|---|---|---|---|
| プロデューサー | イベント発行者 | イベントを生成して流す | 注文サービス、センサー |
| イベントブローカー | メッセージバス/キュー | イベントを仲介・配送する | Kafka, RabbitMQ, Amazon SQS |
| コンシューマー | イベント購読者 | イベントを受け取って処理する | 在庫サービス、通知サービス |
「Pub/Sub」で覚えよう
EDAでよく使われるパターンが Pub/Sub(パブサブ) です。これは「発行(Publish)」と「購読(Subscribe)」の略。
📰 新聞社(プロデューサー)が記事を発行 → 新聞(ブローカー)に掲載 → 読者(コンシューマー)が好きなときに読む
新聞社は読者が誰かを知らなくてよいし、読者が増えても新聞社の仕事は変わりません。これがPub/Subの本質です。
イベントの種類
| 種類 | 説明 | 例 |
|---|---|---|
| ドメインイベント | ビジネス上の出来事 | 「注文が完了した」「支払いが承認された」 |
| システムイベント | 技術的な出来事 | 「サーバーが起動した」「ファイルが更新された」 |
| CDCイベント | DBの変更検知 | 「レコードが追加・更新・削除された」 |
歴史と背景
- 1980年代〜 — GUIの登場により「ボタンをクリックしたら処理が走る」イベント駆動UIが一般化。WindowsやMacのアプリ開発で普及
- 1990年代 — エンタープライズ向けに MOM(Message-Oriented Middleware) が登場。IBMのMQSeriesなどが企業間連携に活用される
- 2000年代 — SOA(サービス指向アーキテクチャ)とともに非同期メッセージングが注目を集める
- 2011年 — Apache Kafka がLinkedInによってオープンソース化。大量イベントのリアルタイム処理が現実的になる
- 2014年 — AWS Lambda 登場。「イベントが来たらサーバーレスで処理する」という概念が一般化
- 2020年代 — マイクロサービス・クラウドネイティブ設計の標準的要素として定着。CNCF(Cloud Native Computing Foundation) でも中心的テーマに
従来型(同期)との比較
EDAの特徴は、従来の「同期的なリクエスト/レスポンス型」と比較すると明確になります。
EDAのメリット・デメリット
| 観点 | メリット | デメリット |
|---|---|---|
| 拡張性 | サービスを追加しても既存コード不変 | 全体フローの把握が難しくなる |
| 耐障害性 | 一部障害が全体に波及しにくい | デバッグ・トレースが複雑 |
| スケール | 処理を並列化しやすい | イベントの順序保証が必要な場合に注意 |
| 開発速度 | チームを独立して動かせる | 最終整合性(結果整合性)の設計が必要 |
主なメッセージブローカー比較
| ツール | 特徴 | 向いているユースケース |
|---|---|---|
| Apache Kafka | 高スループット・ログ永続化 | ログ収集・ストリーム処理 |
| RabbitMQ | 柔軟なルーティング・軽量 | タスクキュー・RPC代替 |
| Amazon SQS/SNS | AWSフルマネージド | AWSネイティブなシステム |
| Google Pub/Sub | GCPフルマネージド | GCPネイティブなシステム |
| Azure Service Bus | Azureフルマネージド | エンタープライズメッセージング |
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| CloudEvents 1.0 | CNCFが策定したイベントデータの標準フォーマット仕様 |
| AsyncAPI 3.0 | 非同期APIの記述仕様(EDAの「OpenAPI」相当) |
関連用語
- マイクロサービス — アプリを小さなサービスに分割する設計手法。EDAと組み合わせて使われることが多い
- メッセージキュー — イベントを一時的に溜めて順番に届ける仕組み。EDAのブローカーとして機能する
- Pub/Subモデル — 発行者と購読者を分離する非同期メッセージングパターン
- 疎結合 — コンポーネント同士の依存を最小限にする設計原則。EDAが実現する重要な性質
- サーバーレス — イベントをトリガーに関数を実行するクラウドサービス。EDAと非常に相性がよい
- CQRS — 読み取りと書き込みを分離するパターン。EDAと組み合わせてイベントソーシングとともに使われる
- 非同期処理 — 処理の完了を待たずに次の処理を行う方式。EDAの基本的な動作モデル
- マイクロサービスアーキテクチャ — SOAを現代的に発展させたアーキテクチャ。EDAと併用されることが多い