同期通信は呼び出し元をレスポンスが到着するまでブロックします。非同期通信はメッセージを送信して待たずに続行します。それぞれ結合度、レイテンシ、レジリエンスについて異なるトレードオフを生じます。
比較
ビジュアル
text
SYNC: Caller ──request──▶ Service
Caller ◀─response── Service (blocked the whole time)
ASYNC: Caller ──message──▶ [ Queue ] ──▶ Service
Caller continues immediately; Service handles it later
経験則
- ユーザーが今すぐ答えが必要な場合は同期を使用します (例: プロフィールを読み込む)。
- バックグラウンド作業、ファンアウト、ダウンストリーム障害から生き残るために非同期を使用します (例: 確認メールを送信)。
落とし穴
非同期は障害を隠します — 失われたメッセージや不正なメッセージがワークフローを静かに破壊する可能性があります。デッドレターキューとモニタリングが必要です。
なぜ重要なのか
この選択は障害の伝播方法を直接制御します: 同期呼び出しは失敗し素早く可視化され、非同期メッセージは結合度を下げますがコンシューマーに問題を先送りします。
それらをうまく組み合わせる — エッジでは同期、ワークフローでは非同期 — はレジリエントなマイクロサービスを構築する際の中核的なスキルです。
