Mímisbrunnr知恵の泉

← 分散システム 一覧

🎓 レベル:標準 | 重要度:B(重要)

📎 前提:RPCとRMI | 関連:配送保証(at-most-once・at-least-once・exactly-once)分散トランザクションとSaga

要点(BLUF)

問題設定 ── 同期呼び出しの弱点

RPC(RPCとRMI)の同期呼び出しは、呼び先が落ちると呼び元も詰まり、障害が連鎖します(カスケード障害)。負荷スパイクも吸収できない。送り手と受け手を切り離したい——これがメッセージングの動機です。

仕組み ── キューとpub/sub

flowchart LR
    P["プロデューサ"] -->|"publish"| BR["ブローカ(キュー/トピック)"]
    BR -->|"deliver"| C1["コンシューマ1"]
    BR -->|"deliver(pub/subなら複製)"| C2["コンシューマ2"]
    BR -.->|"受け手停止中は滞留(耐障害)"| BR

要するに何か:ブローカという緩衝材を挟むことで、「相手が今いるか/速いか」に依存せず送れる。時間的・空間的・同期的の3つの結合を外す。

正しさの観点 ── 何を保証し、何を諦めるか

順序と並列度はトレードオフ:厳密順序を求めると並列に捌けず、並列で捌くと順序が乱れる。だから「順序が必要な単位(キー)でパーティション」する設計が要ります。

他手法との比較

観点RPC(同期)メッセージング(非同期)
結合密・即応答疎・後で処理
障害の波及連鎖しやすいキューが吸収
順序自然(1呼び出し)パーティション単位で工夫
即時性高い遅延が入る

なぜ分散だと難しいか(直観)

切り離す代わりに、「送ったのに処理されたか分からない」状態が設計の常態になります。だから「送って忘れる」ではなく「送って、いつか・1回以上・冪等に処理される」を前提に組む。pub/subのファンアウトでは、ある購読者だけ失敗する部分配送も起き、再送と冪等性が一段重要になります。

⚠️ よくある誤解・落とし穴

対応ラボ

なし(概念回)。at-least-once+冪等化の効果は 配送保証(at-most-once・at-least-once・exactly-once) のラボで実証します。

関連

第3章 通信とRPC 目次