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

可用性パターン

Availability Patterns

システムを止めないための2大手法がフェイルオーバー(故障時に予備へ切替)とレプリケーション(複製)。故障しても誰かが肩代わりできる構成にして稼働率を上げる。

直列構成 vs 並列構成の可用性

各コンポーネントが 99.9% のとき、直列(両方が必要)にすると掛け算で下がり、並列(どちらかが生きていればよい)にすると大きく上がります。縦軸は 99.8〜100% に拡大した例示。

単一直列(下がる)並列(上がる)

※ 値は絶対値ではなく「傾向を示す例示」です。相対的な大小関係を読み取るためのものです。

キーポイント
  • Fail-over(フェイルオーバー) = 稼働中のサーバーが倒れたら、予備が役割を引き継ぐ仕組み。
  • Active-passive: 普段は片方(active)だけが働き、もう片方(passive)は待機。heartbeat(生存確認信号)が途切れたらpassiveが昇格。別名 master-slave failover。
  • Active-active: 両方が常に稼働して負荷を分担。片方が倒れても残りが捌く。別名 master-master failover。
  • Replication(複製) = データを複数サーバーに持ち、1台が壊れても他から読める(master-slave / master-masterで詳述)。
  • 稼働率は直列だと下がり、並列(冗長化)だと上がる。
トレードオフ

フェイルオーバーは予備機というハードウェアと、切替を制御する複雑さを追加する。active-passiveでは切替中(passiveが起動するまで)に短いダウンタイムが生じうる。さらに『activeが複製を終える前に壊れる』とデータが失われる危険がある。冗長化すれば稼働率は上がるが、台数・コスト・運用の複雑さは増える。

2つのフェイルオーバー方式

Active-Passive(現用・待機)

レジ係が1人(active)働いていて、後ろに予備の店員(passive)が控えているイメージ。働いている店員は定期的に『生きてるよ』という合図(heartbeat)を予備に送ります。合図が途切れたら『倒れた』と判断し、予備が前に出てレジ(=同じIPアドレス)を引き継ぎます。

  • hot standby: 予備が常に温まっていて即座に交代(ダウンタイムほぼゼロ)。
  • cold standby: 予備は普段眠っていて、起動に時間がかかる(その間サービス停止)。

Active-Active(両方稼働)

レジを2台とも開けて、お客さんを分担するイメージ。両方が働いているので負荷も分散できます。片方が倒れても、もう片方が全員を捌きます(混むけど止まらない)。ただし、公開サービスならDNSが両方のIPを知っている必要があり、内部サービスならアプリ側が両方を知っている必要があります。

図を描画中...

可用性は数字で掛け算する

ここが地味につまずくポイント。コンポーネントを直列につなぐと稼働率は下がり、**並列(冗長化)**にすると上がります。

直列(両方が生きていないと成立しない)

Availability(全体) = Availability(A) × Availability(B)
例: 99.9% × 99.9% = 99.8%  ← 下がった!

部品を直列に増やすほど、全体の稼働率は『下がって』いきます。鎖は一番弱い輪で切れる、というイメージ。

並列(どちらか1つ生きていれば成立する)

Availability(全体) = 1 − (1 − A) × (1 − B)
例: 1 − (1 − 0.999)² = 99.9999%  ← 大幅に上がった!

冗長化(同じ役割を並列に複数)すると、『両方同時に落ちる確率』だけが障害になるので、稼働率は劇的に上がります。

図を描画中...

つまずきポイント

  • 「サーバーを増やせば必ず安定する」は半分正しく半分間違い。並列(冗長)に増やせば稼働率は上がるが、直列(依存先として)増やすと逆に下がる。
  • active-activeは負荷分散も兼ねられて魅力的だが、両方が同じデータを書く場合は競合(後述のmaster-master)の解決が必要になる。

関連する概念

この概念で腕試し

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

クイズを解く