TL

整合性モデルの階層(線形化可能性〜結果整合性)

強い整合性ほど直感的に書けるが遅く落ちやすい、という構図が腑に落ちる。線形化可能性から結果整合性まで強さの順に並べ、各モデルが許す挙動を原理から整理。

応用整合性モデル分散システム線形化可能性結果整合性CAP最終更新: 2026-06-21
TL;DR要点だけ先に
  • 1.整合性モデルは「複数の操作がどんな順序で見えてよいか」を定める契約。強いほど書きやすいが、可用性・レイテンシを犠牲にする。
  • 2.強い順に Linearizability > Sequential > Causal > Eventual。下位ほど許される並べ替えが増え、古い値や食い違う順序が観測されうる。
  • 3.CAP と PACELC により、ネットワーク分断時も平常時も「強整合か、可用性・低遅延か」を選ぶしかない。境界ごとに必要十分なモデルを当てる。

整合性モデルとは何か

整合性モデル(consistency model) は、レプリケーションされたデータに対する 読み書き操作が、どの順序で見えてよいか/見えてはならないか を定めた契約です。単一ノードなら操作は1本の時系列に並びますが、データを複数ノードに複製した瞬間、「ある書き込みを、別のクライアントがいつ・どの順で観測できるか」が自明でなくなります。整合性モデルは、その 観測されうる履歴(history)の集合 を規定します。

重要なのは、これが 正しさの定義そのもの だという点です。実装が速いか遅いかではなく、「この実行は仕様に違反したか」を判定する基準になります。モデルが強いほど許される履歴は少なく、プログラマにとって直感的になりますが、その制約を守るための 同期・合意のコスト が可用性とレイテンシに跳ね返ります。

整合性モデルとトランザクション分離は別物

ここで扱うのは、1つのオブジェクトに対する読み書きの「見え方」を定める分散整合性です。データベースの 分離レベル(Serializable / Snapshot 等) は、複数オブジェクトをまたぐトランザクションの並行実行を扱う別の軸です。両者は直交し、たとえば「線形化可能だが直列化可能ではない」「Strict Serializable はその両方」のように組み合わさります。

強さの階層

代表的なモデルを 強い順 に並べると次のようになります。上位は下位を含意します(線形化可能なら逐次的でもある)。

モデル保証の核許す挙動禁じる挙動
線形化可能性実時間順を保つ単一全順序なし(最も厳しい)書き込み完了後に古い値を読むこと
逐次一貫性全プロセス共通の単一全順序実時間とずれた順序プロセスごとに矛盾する順序
因果一貫性因果のある操作の順序因果のない操作の並べ替え原因より先に結果が見えること
結果整合性更新停止後にいつか収束古い値・順序の食い違い永久に収束しないこと

線形化可能性(Linearizability)

最強の単一オブジェクト整合性です。すべての操作が、それぞれの呼び出しと応答の間にある「ある一点」で、瞬時に起きたかのように 見えなければなりません。帰結として、ある書き込みが応答を返したら、それ以降に開始する読み取りは、その値か、より新しい値しか返せません。古い値(ステイル read)は違反です。

つまり線形化可能性は 実時間(wall-clock)順序を尊重する全順序 を要求します。これは「最新性(recency)の保証」とも呼ばれ、外から見たシステムはあたかも1台のノードのように振る舞います。compare-and-swap のような合意が必要な操作の土台であり、リーダー選出やロックの正しさはここに依存します。

逐次一貫性(Sequential Consistency)

Lamport の定義による古典的モデル。すべての操作がある単一の全順序に並べられ、かつ 各プロセス内の操作はその発行順を保つ、という2条件を満たせばよい。線形化可能性との決定的な違いは、実時間順を要求しない ことです。

# 2つの全順序。逐次一貫だが線形化可能でない例
クライアントA: write(x=1) 完了
クライアントB: (Aの完了後に開始)read(x) -> 0   # 逐次一貫としては合法
# 全プロセスが一貫して「read が write より前」という1つの順序に同意できれば、
# 実時間ではAが先でも、整合性違反にはならない。

全員が 同じ1つの順序 に同意する点は強い保証ですが、その順序が現実の時刻とずれてよいため、最新性は保証されません。

因果一貫性(Causal Consistency)

因果関係(causality)で結ばれた操作の順序だけ を全プロセスで一致させ、因果のない(並行な)操作の順序は観測者ごとに異なってよい、というモデルです。因果は「ある操作が別の操作を見たうえで起きた」関係で、happens-before で定義されます。

帰結として、原因より先に結果を観測することは禁じられます。「Aが投稿 → Bがそれに返信」という連鎖は、どのノードでも投稿→返信の順にしか見えません。一方、無関係な2つの投稿の前後は、ノードによって入れ替わってよい。因果一貫性は 分断耐性と両立できる最強クラスのモデル(後述)として理論的に重要です。

結果整合性(Eventual Consistency)

最も弱い実用モデル。新たな更新が止まれば、いつかは全レプリカが同じ値に収束する ことだけを保証します。いつ収束するか・途中で何が見えるか には制約がなく、古い値も、書いた直後に消えたように見える挙動も、一時的には許されます。

「最終的に揃う」だけでは衝突した並行更新の決着が付かないため、実装には収束のための規則が要ります。LWW(last-write-wins、最終書き込み優先)バージョンベクトル、あるいは数学的に必ず収束する CRDT(Conflict-free Replicated Data Type) などです。「読んだ自分の書き込みは見える」「同じ値を読み続ける」といった セッション保証 を足して、弱さの体感を和らげることもよくあります。

“Eventual” は「すぐ」ではない

結果整合性は「少し遅れて揃う」を意味しません。仕様上の保証は「更新が停止すれば、いつか」だけです。更新が続く限り収束しなくてよく、収束までの上限時間も規定されません。残高・在庫・ユニーク制約のように 読んだ瞬間の正しさ が要る箇所に素朴に当てると事故になります。

なぜ強い整合性は高くつくのか

階層の本質は トレードオフ です。線形化可能性を満たすには、読み書きのたびに「自分が最新を見ている」ことを確かめる必要があり、それは過半数のレプリカとの 同期的なやり取り(quorum や合意) を要求します。これがレイテンシを押し上げ、ネットワーク分断時には応答できなくなる原因になります。

ここで効くのが CAP 定理 です。ネットワーク分断(P)が起きたとき、システムは 整合性(C=線形化可能性)可用性(A=全ノードが応答を返す) の両方は満たせず、どちらかを諦めるしかありません。さらに PACELC はこれを平常時に拡張します。「分断時(P)は A と C のどちらか、そうでない時(E、Else)も レイテンシ(L)と整合性(C) のどちらか」を選ぶ、という構図です。

状況強整合(線形化可能)を選ぶ可用性・低遅延を選ぶ
分断時(CAP の P)少数派ノードは応答拒否(CP)古い値でも応答(AP)
平常時(PACELC の E)同期を待ち遅くなる(C)非同期で即応答(L)
典型例合意ベースの構成管理・ロックセッション・カート・カウンタ

理論的な要となるのが CAP 定理の精密化 です。「分断耐性のもとで到達可能な最も強い整合性は 因果一貫性」が知られており、線形化可能性は分断時に可用性と両立できませんが、因果一貫性は両立できます。だから AP 寄りのシステムが「弱すぎる結果整合性」と「強すぎる線形化可能性」の間を狙うとき、因果一貫性が現実的な上限になります。

判定の基本ルール

古い値を読んだら即アウトになるのは線形化可能性だけ。逐次一貫性は古い値を許す。
逐次一貫 ⊄ 線形化可能:違いは実時間順を守るか否か。
・分断耐性(P)と両立する最強は因果一貫性。線形化可能性は分断時に可用性を失う。
・「最終的に収束」しか言わないのが結果整合性。収束の速さや過程は無保証

どう使い分けるか

正解は1つではなく、境界ごとに必要十分なモデルを当てる ことです。リーダー選出・分散ロック・ユニーク制約のように「ずれたら壊れる」核には線形化可能性を、ソーシャルのタイムラインやコメント連鎖には因果一貫性を、閲覧数カウンタやカートのような「多少ずれても回復できる」ものには結果整合性を、という具合に強さを段階的に下げます。

この設計判断は分散システム全般の土台になります。マイクロサービスでは各サービスが自分のデータを持つため、サービス間更新を1つの強整合トランザクションにできず、結果整合性や Saga が前提になります。SLO による信頼性設計では、強整合を選ぶほど可用性予算(エラーバジェット)を圧迫する関係を見積もる必要があり、カオスエンジニアリングでは分断注入によって「自分が選んだはずの整合性が本当にその通りか」を検証します。

まとめ

  • 整合性モデルは 観測されうる履歴の集合 を定める契約であり、実装の速さではなく 正しさの定義 そのもの。
  • 強い順に 線形化可能性 > 逐次一貫性 > 因果一貫性 > 結果整合性。下位ほど並べ替えと古い値が許される。
  • 違いの核は 実時間順を守るか(線形化可能性)/単一全順序に同意するか(逐次)/因果だけ守るか(因果)/いつか収束だけか(結果)
  • CAP・PACELC により、分断時も平常時も「強整合か、可用性・低遅延か」を選ばされる。分断と両立する最強は 因果一貫性
  • 万能の1モデルはない。境界ごとに必要十分な強さ を当てるのが、正しさとコストの両立点。

DevOps/インフラ Article

整合性モデルの階層(線形化可能性〜結果整合性)を実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

整合性モデル

比較で見る軸

難易度: advanced / カテゴリ: DevOps/インフラ / タグ数: 5

導入後に効く点

強い順に Linearizability > Sequential > Causal > Eventual。下位ほど許される並べ替えが増え、古い値や食い違う順序が観測されうる。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
advanced
カテゴリ
DevOps/インフラ
タグ数
5

判断チェックリスト

  • 自社の用途が「整合性モデル / 分散システム」に近いか確認する。
  • 強みである「整合性モデルは「複数の操作がどんな順序で見えてよいか」を定める契約。強いほど書きやすいが、可用性・レイテンシを犠牲にする。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

整合性モデル分散システム線形化可能性結果整合性CAP整合性モデル分散システム線形化可能性
参考: 公式情報