Mímisbrunnr知恵の泉

← 分散システム 一覧

🎓 レベル:発展 | 重要度:B(重要)

📎 前提:CAP定理 | 関連:クォーラム(R+W>N)ベクトル時計

要点(BLUF)

問題設定 ── 分断は稀、でも遅延は常にある

CAP(CAP定理)は「分断時」しか語りません。だが分断は稀で、システムが実際に毎日払っているコストは平時のレイテンシです。「強一貫を保つために毎回リモート確認する→遅い」という日常の取引を、CAPは取りこぼす。これを補うのがPACELCです。

モデル ── PACELC の読み方

if P(A or C),else (E)(L or C)\text{if } P \Rightarrow (A \text{ or } C), \quad \text{else (E)} \Rightarrow (L \text{ or } C)
flowchart TB
    ST{"今ネットワークは?"} -->|"分断あり P"| PAC{"A か C"}
    ST -->|"平常 E"| ELC{"L か C"}
    PAC --> PA["A:応答優先(古い値も)"]
    PAC --> PC["C:整合優先(応答断つ)"]
    ELC --> EL["L:低遅延優先(近い複製で応答)"]
    ELC --> EC["C:整合優先(毎回同期・合意)"]
システム分類意味
Dynamo / CassandraPA/EL分断時も応答、平時も低遅延(弱一貫を許す)
MongoDB(既定)PA/EC 寄り分断時可用、平時は一貫性寄り
SpannerPC/EC常に一貫性優先(TrueTimeで実現、物理時計とクロック同期(NTP)

仕組み ── 結果整合性はどう収束するか

弱い一貫(EL側)でも、放置で永久にズレるわけではありません。収束を作る3機構:

衝突(並行更新)が起きたら検出して解決します:

正しさの観点 ── 収束(convergence)の保証

結果整合性の安全性は「更新が停止すれば、全複製が同一状態に収束する」こと。CRDTはこれを結合律・可換律・冪等律を満たすマージ関数で保証する(順序や重複に依存せず同じ結果に至る)。活性は「反エントロピーが回り続ければ収束は有限時間で起こる」こと。LWWは収束するが書き込み損失という別の正しさ問題を抱える点に注意。

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

「いつか揃う」の”いつか”を短くするほどコスト(同期・帯域)が増え、長く許すほど古い値の窓が広がる。収束速度と平時コストの綱引きです。さらに「揃える」には衝突解決が要り、それには因果の判定(ベクトル時計)という別の難しさが乗る。弱い一貫性は「楽」ではなく「別の難しさへの移動」です。

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

対応ラボ

なし(概念回)。収束のつまみ(R・W)の定量効果は クォーラム(R+W>N)、ゴシップ収束は ゴシップ・反エントロピー・故障検出(SWIM) のラボで実証します。

関連

第4章 一貫性モデル 目次