0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

イベントメッシュの目的 📬

イベントメッシュの目的は、企業全体に散らばったイベント駆動型アーキテクチャ(EDA)の 「イベント(メッセージ)」のやり取り を、一元的に管理・制御するためのインフラ層(基盤)を提供することです。

イベント駆動型アーキテクチャ(EDA)が企業全体に拡大するにつれて、

「どのサービスがどのイベントを発行しているのか」
「どのイベントを購読すればいいのか」
「イベントの形式(スキーマ)は正しいか」

といった管理が困難になり、カオスな状態("イベント・スパゲッティ")に陥りがちです。

イベント・スパゲッティ状態での生じる問題

カオス(Event Spaghetti)

どのサービスがどのイベントを発行し、誰がそれを購読しているのか、誰も全体像を把握できなくなります。

発見性の欠如

開発者が「注文完了イベント」を使いたくても、それがどこに存在し、どのような形式なのかを発見できません。

ガバナンスの欠如

あるチームが勝手にイベントの形式(スキーマ)を変更し、それを購読していた他の多数のサービスが連鎖的に障害を起こします。

技術の分断

AチームはKafkaを使い、BチームはAWS SQSを使っている場合、両者がイベントをやり取りするのが困難です。

イベントメッシュのできること

イベントメッシュは、このカオスを解決するための**「インテリジェントなインフラ層」です。

これは単一のメッセージブローカーではなく、

複数のブローカーや技術(Kafka, SQS, Azure Event Hubsなど)を メッシュのように接続

し、以下の機能を提供する「中央神経系」として機能します。

1. イベントの発見

開発者が「どのようなイベントが利用可能か」を簡単に見つけられるカタログ機能を提供します。

2. ガバナンス

イベントの形式(スキーマ)を管理・強制し、「OrderPlacedイベントは必ずこの形式でなければならない」といったルールを徹底できます。

3. 動的なルーティング

イベントの発行者(Producer)と購読者(Consumer)を動的に接続します。

発行者はただイベントを発行すればよく、イベントメッシュが 「このイベントはAチームとBチームに届ける必要がある」 と判断し、賢くルーティングします。

4. 相互運用性

異なる技術(Kafka, RabbitMQ, SQSなど)や異なるクラウド(AWS, GCP, Azure)の間であっても、イベントメッシュがその違いを吸収し、イベントがシームレスに行き来できるようにします。

3つの関係性

1. イベント駆動 (EDA) との関係性

EDA

アーキテクチャの「設計思想」です。
「イベント」を通じてシステムを疎結合に連携させるという概念。

イベントメッシュ

EDAを大規模に実現するための 「インフラ実装」 です。

アナロジー

EDAが「郵便でコミュニケーションを取る」というアイデアだとすれば、
イベントメッシュは「郵便番号システム、郵便局、仕分けセンター、配送網」といった、
そのアイデアを 大規模かつ信頼性高く実現するための具体的な“仕組み” です。

2. サービスメッシュとの関係性

サービスメッシュとイベントメッシュは、競合するものではなく、補完関係にあります。
それぞれが異なる種類の通信を管理します。

サービスメッシュ (例: Istio, Linkerd)

・通信モデル:同期的

・トラフィックの種類:リクエスト/レスポンス (APIコール)。gRPCやREST APIなど。

・アナロジー:電話網。
「AがBに電話をかけ、応答を待つ」という即時性のある通信を管理します。

・主な機能:サービスディスカバリ、リトライ、サーキットブレーカー、mTLS暗号化。

イベントメッシュ (例: Solace, Boomi)

・通信モデル:非同期的

・トラフィックの種類:イベント (メッセージ)

・アナロジー:郵便網。「Aが手紙(イベント)を投函し、Bが後でそれを受け取る」という、時間的に分離された通信を管理します。

・主な機能:イベントルーティング、スキーマ管理、発見可能性。

ここのまとめ

多くの先進的なアーキテクチャでは、サービスメッシュとイベントメッシュの両方が共存します。

例えば、ユーザーからのリクエスト(REST API)をサービスメッシュが受け付け、
そのサービスが処理を完了した後にイベントメッシュへ「処理完了イベント」を発行し、
他のサービスがそれを非同期で受け取るといった形です。

image.png

データメッシュとイベントメッシュの関係性

データメッシュとイベントメッシュの関係は、

イベントメッシュが「インフラ(How)」

であり、

データメッシュが「設計思想(What)」

です。

データメッシュは、イベントメッシュというインフラ技術を利用することで、その思想(=データプロダクト間の非同期連携)を実現します。

データメッシュ概要

データメッシュは、EDAとは異なり、「分析データ」に関するアーキテクチャの設計思想です。

これは、中央集権的なデータチーム(=モノリシックなDWH)を解体し、
「データ」を ドメイン(事業部)が所有・提供する製品(データプロダクト) として扱う考え方です。

データメッシュとイベント駆動

このデータメッシュの思想を実現する上で、

「データプロダクト同士はどう連携するのか?」

という問いが生まれます。

その答えが、イベント駆動アーキテクチャ(EDA) です。

・注文ドメインのデータプロダクトは、データが更新されたら「OrderUpdated」というデータイベントを発行します。

・配送ドメインのデータプロダクトは、そのイベントを購読し、自身の「配送分析データ」を更新します。

結論:インフラと思想の関係

データメッシュが「分析データをドメインごとに独立した“データショップ”として運営する」という設計思想(What)だとすれば、

イベントメッシュは、「それらのショップ間(例:注文ショップと配送ショップ)で、
データイベント という商品を、カタログを見ながら安全かつ確実に配送・交換するための、信頼できる物流ネットワーク(インフラ)」(How)のようなものです。

image.png

まとめ

イベントメッシュは、企業内に分散・乱立しがちなメッセージブローカー(Kafka, SQS, RabbitMQなど)や、そこを行き交う大量のイベントに対して、

中央集権的なガバナンス(ルールの強制、発見可能性、動的なルーティング)

を提供するインフラ層(あるいはアーキテクチャパターン)です。

カオスな「イベント・スパゲッティ」状態になるのを防ぎ、「誰が、何を、どこへ」送っているのかを管理・制御するための仕組みです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?