← 研修トップ
分散システムの土台
2台目を置いた瞬間に何が始まるのか。状態の置き場が問題になり、複製には遅れが出て、相手が落ちたのか遅いだけなのか判定できなくなります。リトライは層が変わると意味が変わり、順序は与えられておらず、決めるには過半数が要る。CAPが「3つから2つ」ではないことも含めて、一次ソースと実測から積み上げます。
- 1約 9 分2台目を置くと何が始まるか — 1台+1台は2台ではない1台で動かしている間、故障は「全部動く」か「全部止まる」かのどちらかでした。部品が運命を共にしているからです。
- 2約 9 分状態はどこかに置くしかない — 共有ストアは何を引き受けるのか割れてしまう状態を1か所にまとめると、台をまたいで引き継げるようになります。ただしそれは問題を消したのではなく、「どこが落ちたら誰が止まるか」の形を変えただけです。
- 3約 9 分複製には遅れがある — 書いた直後に読めないことがある同じデータを2台に持たせると、単一障害点は減りますが、代わりに「2台の中身がいつ揃うか」という問題が始まります。
- 4約 9 分「落ちている」とは言えない — タイムアウトは証拠ではなく推測タイムアウトが示すのは「決めた時間内に返事が来なかった」ことだけです。相手が落ちているのか、生きていて遅いだけなのか、経路でパケットが消えているのかは区別できません。
- 5約 9 分見えるのは遅れた信号だけ — 他ノードの状態は直接には測れない他ノードの「いまの状態」を直接見る手段はありません。届くのは、相手が過去に送り出した信号と、それが来ないという事実だけです。
- 6約 9 分リトライは意味を変える — 同じ再送でも、層が違えば結果が違うTCP の再送が安全なのは「もう一度送る」からではありません。送るデータが一意なシーケンス番号に結び付いていて、受信側が「これは前に見た番号だ」と判別できるからです。
- 7約 9 分冪等は性質ではなく約束 — 規定と、実務が足した鍵RFC 9110 が定める「冪等」は、同じ要求を複数回送ってもサーバ上の意図された効果が1回ぶんと同じになる、というメソッドの性質です。応答まで同じという意味ではありません。
- 8約 9 分順序は与えられていない — 壁時計と、因果だけが分かる関係複数の機械にまたがると、「どちらが先に起きたか」を教える共通の時計はありません。壁時計は比較できる形ですが合っておらず、単調時計は合っていますが原点が機械ごとなので比較に意味がありません。
- 9約 9 分過半数が決める — 分断しても割れないための最小の道具更新に「過半数の同意」を課すと、分断されても両側が同時に書き進むことはなくなります。2つの過半数は必ず重なるからです。
- 10約 9 分合意には往復が要る — 必ず1往復、ただし全員は待たない複数台で同じ値を決めるには、リーダーが過半数へ問い合わせて返事を待つ1往復が必ず乗ります。ただし待つのは過半数までで、遅い少数派は待ちません。
- 11約 9 分CAP は3つから2つではない — 定理が二択にしているのはどれかGilbert & Lynch 2002 の Theorem 1 が同時に満たせないとしているのは Availability と Atomic consistency の2つで、分断耐性はそこに並ばず、定理が成り立つ世界の設定の側に置かれています。
- 12約 9 分2相コミットは止まる — 準備済みのまま残る約束2相コミットは、参加者が「はい」と答えた時点で決着まで資源を握り続けます。調整役が消えると握りっぱなしになり、同じ行に触った人は待ち続けます。
- 13約 9 分壊れる前提で組む — 決めておくのは「壊れたとき何が起きるか」この期で見てきたものは「壊れないようにする工夫」ではなく、壊れたとき何が起きるかを先に決める仕掛けでした。