SDN
← 概念一覧へ
一貫性と可用性

一貫性パターン

Consistency Patterns

同じデータの複製(コピー)を複数持つとき、『いつ・どこまで最新が見えるか』を決める3つの方式。弱一貫性・結果整合性・強一貫性の順で、正確さは増すが速度・可用性は下がる。

キーポイント
  • Weak consistency(弱一貫性): 書いた直後に読んでも、見えるとは限らない(ベストエフォート)。例: memcached、VoIP、リアルタイムゲーム。
  • Eventual consistency(結果整合性): 書いた後、しばらく(通常ミリ秒)すれば最終的に必ず反映が見える。非同期レプリケーション。例: DNS、メール。
  • Strong consistency(強一貫性): 書いた直後の読み取りは必ず最新が見える。同期レプリケーション。例: ファイルシステム、RDBMS。
  • 強くなるほど『正確』だが、同期のための待ち時間(レイテンシ)が増え、可用性も下がりやすい。
トレードオフ

弱一貫性・結果整合性は高速で可用性も高いが、一時的に古いデータを返しうる。強一貫性は常に正確だが、全コピーへの書き込み完了を待つため遅く、1台でも応答しないと書き込めない(可用性が下がる)。『どこまで古さを許せるか』が選択基準。

たとえ話: 黒板への伝言

複数の教室(=サーバー)に同じ黒板があり、全部に同じ内容を書いておきたいとします。先生が1つの黒板を更新したとき、他の黒板にいつ反映するか。

  • 弱一貫性: 反映を保証しない。他の教室を見たとき、書いてあるかもしれないし、ないかもしれない。
  • 結果整合性: 少し時間が経てば、全教室の黒板が必ず揃う。揃うまでの間は教室によって内容が違う。
  • 強一貫性: すべての教室の黒板を書き換え終わるまで『更新完了』としない。だから誰がどの教室を見ても必ず最新。ただし全教室を回るので時間がかかる。
図を描画中...

なぜ結果整合性は『非同期』なのか

結果整合性では、書き込みを受けたサーバーは『はい完了』とすぐ返し、**裏側で(非同期に)**他のコピーへ伝播させます。だから速い。ただし伝播が終わるまでの数ミリ秒〜数秒は、別のコピーを読むと古い値が見えます。DNSの設定変更が世界中に反映されるまで時間がかかるのは、まさにこれです。

なぜ強一貫性は遅いのか

強一貫性では、すべてのコピーに書き終わるまで『完了』を返しません(同期レプリケーション)。全員の返事を待つので遅く、1台でも応答しないと書き込み自体が止まります(可用性低下)。その代わり、いつ誰が読んでも必ず最新が保証されます。銀行口座のような『絶対に食い違ってはいけない』データに使います。

選び方の目安

許容できる古さ選ぶパターン典型例
多少消えてもOK弱一貫性キャッシュ、リアルタイム通信
数秒の遅れはOK結果整合性SNSフィード、DNS
一瞬も古さNG強一貫性残高、在庫、決済

つまずきポイント

  • 結果整合性は『いつか壊れる』ではなく『いつか必ず揃う』。一時的にズレるだけで、最終的には正しくなる。
  • 強一貫性は万能に思えるが、速度と可用性の代償が大きい。SNSのいいね数まで強一貫性にすると、世界中のサーバーが揃うまで『いいね』ボタンが固まることになる。

📊 図解

書き込み→読み込みのタイミング比較

図を描画中...

関連する概念

この概念で腕試し

関連する 12 問のクイズに挑戦できます。

クイズを解く