【いんがいっかんせい】

因果一貫性 とは?

公開:
💡 「質問の前に回答が見える」を防ぐ——因果の順序を守る分散システムの知性
📌 このページのポイント
因果一貫性:原因と結果の順序を守る ユーザーA 投稿する 投稿A「明日パーティー!」 原因(happened-before) ベクタークロック: [A:1] ユーザーB 返信する 返信B「楽しみ!」 結果(Aを見てから書いた) ベクタークロック: [A:1, B:1] 因果関係 他のユーザーの観測 ✓ 正しい順序 ① 投稿A を見る ② 返信B を見る ✕ 違反 ① 返信B を先に見る (意味が不明になる) 因果一貫性:因果関係のある操作は全ノードで同じ順序で観測される 因果関係のない操作は順序不定でもOK → 強一貫性より高パフォーマンス
因果一貫性:原因(投稿)は必ず結果(返信)より先に見える
ひよこ ひよこ
ペンギン先生、「因果一貫性」って難しそうな名前だけど、どういう意味なの?
ペンギン先生 ペンギン先生
例えばSNSで「明日パーティーするよ」という投稿に「楽しみ!」とコメントがついているとき、コメントだけ先に見えて元の投稿が後から表示されたら変だよね?
ひよこ ひよこ
確かに意味がわからなくなるね。それが起きないようにするのが因果一貫性なの?
ペンギン先生 ペンギン先生
そうだよ。AがBの原因になっているとき(BはAを見てから書かれた)、AはBより先に全員に見えることを保証するんだよ。
ひよこ ひよこ
それってどうやって実現するの?
ペンギン先生 ペンギン先生
ベクタークロックという仕組みで操作に「何を見てから書いたか」というメタデータを付けるんだよ。受け取った側はそのデータを見て順序を正しく再現できるんだ。
ひよこ ひよこ
線形一貫性との違いは何なの?
ペンギン先生 ペンギン先生
線形一貫性は「全操作を一つのタイムラインに並べる」という強い保証で、パフォーマンスコストが高いんだ。因果一貫性は因果関係のない操作は好きな順序で見えてよいから、より高速に実装できるんだよ。
ひよこ ひよこ
因果関係がない操作は順番が違っても問題ないんだね!
ペンギン先生 ペンギン先生
そうだよ。例えばAさんの投稿とBさんの全く無関係な投稿は、どちらが先に見えてもOKなんだ。因果一貫性はそこを賢く妥協してパフォーマンスを上げているんだよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「因果一貫性」って出てきたら「原因と結果の順序が全ノードで保たれる一貫性の保証」と思えればだいたいOK!
📖 おまけ:英語の意味
「Causal Consistency」 = 因果一貫性
💬 分散コンピューティング理論で提唱された概念で、Lamportの「happened-before」関係に基づいて因果的に関連する操作の順序を保証するモデルだよ
← 用語集にもどる