一貫性パターン
Consistency Patterns
同じデータの複製(コピー)を複数持つとき、『いつ・どこまで最新が見えるか』を決める3つの方式。弱一貫性・結果整合性・強一貫性の順で、正確さは増すが速度・可用性は下がる。
たとえ話: 黒板への伝言
複数の教室(=サーバー)に同じ黒板があり、全部に同じ内容を書いておきたいとします。先生が1つの黒板を更新したとき、他の黒板にいつ反映するか。
- 弱一貫性: 反映を保証しない。他の教室を見たとき、書いてあるかもしれないし、ないかもしれない。
- 結果整合性: 少し時間が経てば、全教室の黒板が必ず揃う。揃うまでの間は教室によって内容が違う。
- 強一貫性: すべての教室の黒板を書き換え終わるまで『更新完了』としない。だから誰がどの教室を見ても必ず最新。ただし全教室を回るので時間がかかる。
図を描画中...
なぜ結果整合性は『非同期』なのか
結果整合性では、書き込みを受けたサーバーは『はい完了』とすぐ返し、**裏側で(非同期に)**他のコピーへ伝播させます。だから速い。ただし伝播が終わるまでの数ミリ秒〜数秒は、別のコピーを読むと古い値が見えます。DNSの設定変更が世界中に反映されるまで時間がかかるのは、まさにこれです。
なぜ強一貫性は遅いのか
強一貫性では、すべてのコピーに書き終わるまで『完了』を返しません(同期レプリケーション)。全員の返事を待つので遅く、1台でも応答しないと書き込み自体が止まります(可用性低下)。その代わり、いつ誰が読んでも必ず最新が保証されます。銀行口座のような『絶対に食い違ってはいけない』データに使います。
選び方の目安
| 許容できる古さ | 選ぶパターン | 典型例 |
|---|---|---|
| 多少消えてもOK | 弱一貫性 | キャッシュ、リアルタイム通信 |
| 数秒の遅れはOK | 結果整合性 | SNSフィード、DNS |
| 一瞬も古さNG | 強一貫性 | 残高、在庫、決済 |
つまずきポイント
- 結果整合性は『いつか壊れる』ではなく『いつか必ず揃う』。一時的にズレるだけで、最終的には正しくなる。
- 強一貫性は万能に思えるが、速度と可用性の代償が大きい。SNSのいいね数まで強一貫性にすると、世界中のサーバーが揃うまで『いいね』ボタンが固まることになる。
📊 図解
書き込み→読み込みのタイミング比較
図を描画中...