【けっかせいごうせい】

結果整合性 とは?

最終更新:
💡 更新が行き渡ると、読み取れる値が揃う

分散システムで、あるデータへの追加の更新が止まり、更新の伝播が進めば、最終的にそのデータの読み取り結果が一致する整合性モデル。収束前は古い値が返ることがある。

📌 このページのポイント
同じ3レプリカの時間変化書込直後値 v2値 v1値 v1伝播途中値 v2値 v2値 v1収束後値 v2値 v2値 v2時間の経過(固定の秒数ではない)追加更新が止まり、更新が行き渡る
v1は古い値、v2は新しい値。通信が回復するなど、更新を伝播できることが収束の前提。図の矢印は時間の流れを表す。
ひよこ ひよこ
具体的には、どんな動きなの?
ペンギン先生 ペンギン先生
データを複数のレプリカにコピーする構成を考えよう。更新が届くまでの間は、新しい値を返すレプリカと古い値を返すレプリカがあり得る。追加の更新が止まり、通信などが回復して更新を伝播できれば、最終的に同じ値を読めるようになるんだ。必ず数秒で揃うという保証ではないよ。
ひよこ ひよこ
古い値が返っても大丈夫なの?
ペンギン先生 ペンギン先生
用途ごとに判断するよ。たとえば「いいね数の表示」は遅れを許容する設計も考えられる。一方、残高や在庫に基づく処理の確定では、同時更新や二重処理も考えて整合性やトランザクションを設計する必要がある。同じサービス内でも、表示と確定処理で必要な保証は違い得るんだ。
ひよこ ひよこ
NoSQLは、すべて結果整合性なの?
ペンギン先生 ペンギン先生
製品や操作によって違うよ。DynamoDBのテーブルとローカルセカンダリインデックスでは、結果整合性の読み取りと強い整合性の読み取りを選べる。一方、グローバルセカンダリインデックスなどは強い整合性の読み取りに対応しない。サービス名だけでなく、対象と設定を見る必要があるんだ。
ひよこ ひよこ
S3も結果整合性の例なの?
ペンギン先生 ペンギン先生
現在のS3は、オブジェクトのPUTやDELETEに対して強い整合性を提供しているよ。成功した書き込みの後の読み取りで、その更新を確認できる。すべての分散ストレージを結果整合性として説明するのは不正確なので、そのサービスが今どの操作にどんな保証を提供するかを確かめよう。
ひよこ ひよこ
Quorum読み取りは、多数決で値を決めるの?
ペンギン先生 ペンギン先生
単純な値の多数決ではないよ。Cassandraでは必要数のレプリカから応答を集め、タイムスタンプなどの規則で新旧の値を扱う。読み取り数Rと書き込み数Wがレプリカ数RFに対してR+W>RFなら応答集合が重なる、という考え方を使うんだ。競合解決やレプリカの修復も別に必要になるよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「結果整合性」って出てきたら「更新が止まり、行き渡れば最終的にデータが揃う仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Eventual Consistency」 = 結果整合性・最終的な一貫性
💬 Eventually(最終的には)Consistent(一貫した状態)になるという保証だよ

参考資料

← 用語集にもどる