同期通信は呼び出し元をレスポンスが到着するまでブロックします。非同期通信はメッセージを送信して待たずに続行します。それぞれ結合度、レイテンシ、レジリエンスについて異なるトレードオフを生じます。
同期通信は呼び出し元をレスポンスが到着するまでブロックします。非同期通信はメッセージを送信して待たずに続行します。それぞれ結合度、レイテンシ、レジリエンスについて異なるトレードオフを生じます。
ジュニアからシニアまで、詳細な回答付きのIT面接質問ライブラリ。
寄付する| 側面 | 同期 (REST/gRPC) | 非同期 (messaging) |
|---|
| 呼び出し元は待つ? | はい | いいえ |
| 時間的結合 | 密 | 疎 |
| 障害への耐性 | 低い | 高い (ブローカーがバッファ) |
| 一貫性 | 即座 | 結果整合性 |
| 複雑性 | 低い | 高い |
| デバッグ性 | より簡単 (線形) | より難しい (フロー) |
SYNC: Caller ──request──▶ Service
Caller ◀─response── Service (blocked the whole time)
ASYNC: Caller ──message──▶ [ Queue ] ──▶ Service
Caller continues immediately; Service handles it later
非同期は障害を隠します — 失われたメッセージや不正なメッセージがワークフローを静かに破壊する可能性があります。デッドレターキューとモニタリングが必要です。
この選択は障害の伝播方法を直接制御します: 同期呼び出しは失敗し素早く可視化され、非同期メッセージは結合度を下げますがコンシューマーに問題を先送りします。
それらをうまく組み合わせる — エッジでは同期、ワークフローでは非同期 — はレジリエントなマイクロサービスを構築する際の中核的なスキルです。