【けっかせいごうせい】
結果整合性 とは?
最終更新:
💡 更新が行き渡ると、読み取れる値が揃う
分散システムで、あるデータへの追加の更新が止まり、更新の伝播が進めば、最終的にそのデータの読み取り結果が一致する整合性モデル。収束前は古い値が返ることがある。
📌 このページのポイント
- 収束までの間は、読むレプリカによって値が違うことがある
- 追加更新が止まり、更新を伝播できることが収束の前提
- 収束までの時間が固定の秒数で保証されるとは限らない
- DynamoDBでは読み取り方法を選べる。現在のS3は強い整合性を提供する
具体的には、どんな動きなの?
データを複数のレプリカにコピーする構成を考えよう。更新が届くまでの間は、新しい値を返すレプリカと古い値を返すレプリカがあり得る。追加の更新が止まり、通信などが回復して更新を伝播できれば、最終的に同じ値を読めるようになるんだ。必ず数秒で揃うという保証ではないよ。
古い値が返っても大丈夫なの?
用途ごとに判断するよ。たとえば「いいね数の表示」は遅れを許容する設計も考えられる。一方、残高や在庫に基づく処理の確定では、同時更新や二重処理も考えて整合性やトランザクションを設計する必要がある。同じサービス内でも、表示と確定処理で必要な保証は違い得るんだ。
NoSQLは、すべて結果整合性なの?
S3も結果整合性の例なの?
Quorum読み取りは、多数決で値を決めるの?
単純な値の多数決ではないよ。Cassandraでは必要数のレプリカから応答を集め、タイムスタンプなどの規則で新旧の値を扱う。読み取り数Rと書き込み数Wがレプリカ数RFに対してR+W>RFなら応答集合が重なる、という考え方を使うんだ。競合解決やレプリカの修復も別に必要になるよ。
まとめ:ざっくりこれだけ覚えればOK!
「結果整合性」って出てきたら「更新が止まり、行き渡れば最終的にデータが揃う仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Eventual Consistency」 = 結果整合性・最終的な一貫性
💬 Eventually(最終的には)Consistent(一貫した状態)になるという保証だよ