Mímisbrunnr知恵の泉

← 分散システム 一覧

🎓 レベル:標準 | 重要度:A(必須)

📎 前提:論理時計(Lamportタイムスタンプ) | 関連:線形化可能性と逐次一貫性PACELC・結果整合性

要点(BLUF)

問題設定 ── 強さを一直線に並べる

複製があると「最新が見えるか」が問題になります(レプリケーション方式(同期/非同期・リーダー/リーダーレス))。一貫性モデルは、許される/禁じられる読み書きの履歴を規定することで、この見え方を定義します。

地図 ── 強い順に並べる

flowchart TB
    L["線形化可能性(最も強い・実時刻順に1つの履歴)"] --> S["逐次一貫性(全員同一順・実時刻は不問)"]
    S --> CA["因果一貫性(因果のある操作だけ順序保証)"]
    CA --> E["結果整合性(いつかは収束・最弱)"]
モデル保証許す異常典型用途
線形化可能性実時刻に沿う唯一の順序。書いた直後に全員が読めるほぼ無しロック・リーダー選出・残高
逐次一貫性全員が同一順序で見る(実時刻は不問)直後に古い値が見える一部の共有メモリ
因果一貫性因果のある操作のみ順序保証(論理時計(Lamportタイムスタンプ)並行操作は順序ばらつきコメントと返信・SNS
結果整合性更新が止めばいつか全複製が一致しばらく古い値・並行衝突DNS・カート・いいね数

仕組みの直観 ── 2つの軸

弱いデータ中心モデルでも、クライアント中心保証を足すと「体感は十分まとも」にできます。これが結果整合データベースの実用の肝です。

正しさの観点 ── モデルは「禁じる履歴」で定義される

一貫性モデルの厳密な意味は「どんな読み書きの履歴を許し、どれを禁じるか」。線形化可能性は「実時刻順に矛盾しない唯一の直列化」が存在することを要求し(線形化可能性と逐次一貫性)、結果整合性は「最終的な収束」しか要求しません。強いモデルほど許す履歴が狭い=守りやすいが作るのが高コスト。

他分野との比較 ── トランザクション分離レベルとの違い

DBの分離レベル(read committed・snapshot・serializable)は「複数オブジェクトをまたぐトランザクションの見え方」、一貫性モデルは「単一オブジェクトの複製の見え方」。直交する概念で、両方を組み合わせた最強が strict serializable(線形化可能 + 直列化可能)。詳細は 分散トランザクションとSaga と データエンジニアリング へ。

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

単一マシンのメモリは(ほぼ)線形化可能——書いたら次に読めば最新。複製すると、書き込みが全コピーに伝わるまで時間がかかり、その間に読むと古い値。強一貫を保つには毎回コピー間で合意が要り、遅く・落ちやすくなる(CAP定理PACELC・結果整合性)。

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

対応ラボ

なし(概念回)。線形化違反の具体は 線形化可能性と逐次一貫性、可用性との取引は クォーラム(R+W>N) のラボで扱います。

関連

第4章 一貫性モデル 目次