TL;DR

分散システムで高い可用性を得るための整合性モデル。データに新しい更新がなければ、いずれすべてのアクセスが最後に更新された値を返すことを保証する。

なぜ必要か

Wikipedia によると、RDBMS の悲観的ロックのような厳密な一貫性とは対照的に、「最終的に一貫性が保たれればよい」と考えることで、NoSQL などでスケールアウトしやすくする。ACID の対極として、BASE に分類されることが多い。

仕組み

レプリカの値をそろえるには、サーバ間でデータの更新を交換すること(アンチエントロピー)と、同時に更新されたときに最終的な状態を選ぶこと(リコンシリエーション)が必要である。選び方には「最後に書いた者が勝つ」などがあり、同時の更新を見つけるにはタイムスタンプやベクタークロックがよく使われる。

例

DNS、NTP、GPS など。どれも更新がすぐに反映されることを前提にせず、問題なく動いている。

注意点

保証されるのはいずれ値がそろうことだけなので、そろう前の読み取りは任意の値を返すことがある。負荷の低減や可用性の向上と引き換えに、利用者や開発者が考えることは増える。

関連

出典