【けっかせいごうせい】

結果整合性 とは?

💡 「今すぐじゃないけど、そのうち揃う」保証
📌 このページのポイント
結果整合性(Eventual Consistency) T=0 書き込み直後 T=1 伝播中… T=2 整合完了 Node1: v2 ✓ Node2: v1 Node3: v1 ↑ Write (v2) Node1: v2 ✓ Node2: v2 同期中 Node3: v1 Node1: v2 ✓ Node2: v2 ✓ Node3: v2 ✓ 不整合あり 一部不整合 全ノード整合 時間が経てば最終的にすべてのノードが同じ値になる
結果整合性のイメージ
ひよこ ひよこ

具体的にどういう状況で起きるの?

ペンギン先生 ペンギン先生

SNSで「いいね」を押した直後に別の端末で見ると、まだいいね数が増えていないことがある。数秒後にリロードすると反映されている。これが結果整合性。裏側ではいいねの書き込みが複数のレプリカに伝搬するのに時間がかかっているんだよ

ひよこ ひよこ

問題にならないの?

ペンギン先生 ペンギン先生

多くのケースでは問題にならない。SNSのいいね数、アクセスカウンター、ニュースフィードの順序は数秒の遅延が許容される。でも銀行の口座残高やECの在庫数では問題になる。だからシステム設計では「このデータは結果整合性でOKか、強い整合性が必要か」をデータごとに判断するんだよ

ひよこ ひよこ

S3も結果整合性だったの?

ペンギン先生 ペンギン先生

以前のS3はPUT後のGETで古いデータが返ることがあった。でも2020年にS3が強い読み取り一貫性(Strong Read-After-Write Consistency)に変更されたんだ。書き込み直後でも最新データが読める。技術の進化で結果整合性の「妥協」が不要になるケースも増えているよ

ひよこ ひよこ

結果整合性を扱うテクニックは?

ペンギン先生 ペンギン先生

①Read Your Own Writes(自分の書き込みは自分には即座に見える保証)、②Quorum読み取り(過半数のレプリカから読んで多数決)、③バージョンベクター(データの因果関係を追跡)、④CRDTs(Conflict-free Replicated Data Types、衝突なしで結合可能なデータ型)。アプリケーション側で補正するパターンもあるよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「結果整合性」って出てきたら「時間が経てば最終的にはデータが一致する整合性モデル」と思えればだいたいOK!
📖 おまけ:英語の意味
「Eventual Consistency」 = 結果整合性・最終的な一貫性
💬 Eventually(最終的には)Consistent(一貫した状態)になるという保証だよ
← 用語集にもどる