Mímisbrunnr知恵の泉

← 分散システム 一覧

🎓 レベル:基礎 | 重要度:A(必須)

📎 前提:分散システムとは・なぜ難しいか | 関連:障害モデル(クラッシュ・オミッション・ビザンチン)配送保証(at-most-once・at-least-once・exactly-once)

要点(BLUF)

問題設定 ── 暗黙の前提が破れる

ローカル関数呼び出しと同じ感覚でリモート呼び出しを書くと、下の前提を無意識に置いてしまいます。RPCの「透過性」(RPCとRMI)が、皮肉にもこの錯覚を助長します。

一覧 ── 8つの誤謬と、効いてくる設計

#誤謬(こう思い込む)現実だからどう設計するか
1ネットワークは信頼できるパケットは落ち、分断は起きる再送・冪等性・タイムアウト
2レイテンシはゼロ往復に数ms〜数百ms通信回数を減らす・バッチ・非同期
3帯域は無限有限・輻輳するペイロード圧縮・ページング
4ネットワークは安全盗聴・改竄・なりすまし暗号化・認証(→ サイバーセキュリティ)
5トポロジは変わらないノード追加削除・経路変更は日常サービス発見・一貫性ハッシュ
6管理者は1人多数の運用主体・設定差設定の外部化・冪等な運用
7転送コストはゼロシリアライズ・直列化に CPU と金スキーマ・効率的エンコード
8ネットワークは均質OS・バージョン・MTU がバラバラ標準プロトコル・相互運用

仕組みの直観 ── なぜ「信頼できる」と思ってしまうか

開発機では全プロセスが同一ホスト、ロスもほぼ0、遅延もμs。テスト環境が嘘をつくのです。本番では別データセンタ・別リージョンとなり、1〜4が一気に牙を剥きます。

flowchart LR
    DEV["開発機(全部ローカル・ロス0)"] -->|"そのまま本番へ"| PROD["本番(跨DC・ロスあり・遅延大)"]
    PROD -->|"前提1〜3が破れる"| BUG["タイムアウト連鎖・二重実行・輻輳崩壊"]

要するに何か:誤謬は道徳の話ではなく、「どのテストを本番相当にすべきか」のチェックリストです。各項目を「わざと壊して試す」(遅延注入・パケロス注入=カオスエンジニアリング)と、設計の穴が見えます。

正しさの観点 ── 誤謬と安全性/活性の対応

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

対応ラボ

なし(概念回)。遅延・喪失の影響は 配送保証(at-most-once・at-least-once・exactly-once) のラボで冪等性として実証します。

関連

第1章 分散システムの基礎 目次