メッセージング系ミドルウェア¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. 送信元と宛先の対応関係¶
プロデュース/コンシュームパターン¶
▼ プロデュース/コンシュームパターンとは¶
送信元から単一の宛先に非同期的に単方向で通信する。
▼ プル型¶
双方向通信 (クライアント → サーバー → クライアント) である。
- AWS SQS
▼ プッシュ型¶
単方向通信 (サーバー → クライアント) である。
パブリッシュ/サブスクライブパターン¶
▼ パブリッシュ/サブスクライブパターンとは¶
送信元から複数の宛先に非同期的に単方向で通信する。
送信元と宛先で通信処理が独立して実行されるため、メッセージ中継システムを経由した非同期通信を実行することになる。
送信元はメッセージ中継システムにメッセージをパブリッシュする。
プル型のサブスクライブの場合、サブスクライバーはメッセージ中継システムにポーリングを実行し、メッセージを取得する。
プッシュ型のサブスクライブの場合、メッセージ中継システムはメッセージをサブスクライバーに送信する。
▼ プル型¶
双方向通信 (クライアント → サーバー → クライアント) である。
- RabbitMQ (プル型だけでなく、プッシュ型も選べる)
- Apache Kafka
▼ プッシュ型¶
単方向通信 (サーバー → クライアント) である。
- RabbitMQ (プッシュ型だけでなく、プル型も選べる)
- AWS SNS
- AWS EventBridge
ストリーミングパターン¶
▼ ストリーミングパターンとは¶
プル型の場合、宛先はメッセージ中継システムにポーリングを実行し、メッセージをストリーミングする。
プッシュ型の場合、メッセージ中継システムは、メッセージをサブスクライバーにストリーミングする。
▼ プル型¶
- Apache Kafka
- AWS Kinesis (プル型だけでなく、プッシュ型も選べる)
▼ プッシュ型¶
- AWS Kinesis (プッシュ型だけでなく、プル型も選べる)
02. 宛先のメッセージ受信方式¶
プル型¶
メッセージの宛先は、メッセージ中継システムにポーリングを実行し、メッセージを受信する。
宛先で障害が起こっていても、障害の回復後にメッセージを処理すればよいため、耐障害性が高い。
プッシュ型¶
メッセージ中継システムはサブスクライバーにメッセージを送信する。
宛先で障害が起こっていると、メッセージが損失する可能性があるため、耐障害性が低い。
これに対処するために、メッセージ中継システムで、リトライやデッドレターキューが必要になる。
03. メッセージ中継システム¶
メッセージブローカー¶
- Apache Kafka
- AWS SNS
- Google Cloud Pub/Sub
- RabbitMQ
メッセージキュー¶
- AWS SQS
- EMQX
イベントバス¶
- AWS EventBridge
- CloudEvents
04. メッセージに使用するプロトコル¶
| プロトコル | 通信方式 | 対応するメッセージ中継システム例 | 一般的 |
|---|---|---|---|
| AMQP | バイナリ | RabbitMQ、Apache Qpid | ✅ |
| MQTT | バイナリ | EMQX | ✅ |
| Kafka Protocol (Kafka独自プロトコル) | バイナリ | Apache Kafka | ✅ |
| STOMP | テキスト | RabbitMQ | |
| HTTP/1.1、Webhook | テキスト (例:JSON、XMLなど) | AWS SQS、AWS SNS、Google Cloud Pub/Sub | |
| HTTP/2 (例:gRPC、GraphQLなど) | バイナリ (例:Protocolbuf) | 調査中... | |
| WebSocket | テキスト、バイナリ | 調査中... |