サービス間通信の設計:REST vs メッセージキューの使い分け
概要¶
マイクロサービス間通信を設計するとき「REST か メッセージキューか」の選択は、システムの結合度・信頼性・スループット要件に直結する。それぞれの特性を理解したうえで、ユースケースに合わせて選択する。
詳細¶
比較表¶
| 観点 | REST | メッセージキュー |
|---|---|---|
| 通信スタイル | 同期(リクエスト/レスポンス) | 非同期(プロデューサー/コンシューマー) |
| 結合度 | 密結合(相手が生きている必要あり) | 疎結合(相手が落ちていてもOK) |
| レイテンシ | 低い(即時応答) | 高い(キュー経由) |
| スループット | 受信側の処理能力に依存 | バッファリングで吸収可能 |
| 再試行 | 呼び出し元が実装する必要あり | キュー側でリトライ制御できる |
| 可視性 | レスポンスで即確認 | コンシューマー側でログ・監視が必要 |
| 実装コスト | 低い | 高い(インフラ整備が必要) |
REST を選ぶべきケース¶
例:
メッセージキューを選ぶべきケース¶
- 処理が重くて時間がかかる(メール送信、画像変換、レポート生成)
- 突発的なトラフィックを平滑化したい
- 複数のサービスが同じイベントを受け取る必要がある(ファンアウト)
- 処理の失敗をキューで安全にリトライしたい
例(Kafka / SQS / RabbitMQ):
組み合わせパターン(現実的な設計)¶
なぜ重要か / いつ使うか¶
- システム設計面接の定番質問への回答を整理するとき
- 新機能の通信方式を設計するときの判断軸として
- 「なぜキューを使っているのか」をコードレビューで説明するとき