株式会社ジオデータ開発 ロゴ
株式会社ジオデータ開発GEO DATA DEVELOPMENT Inc.
システム設計信頼性冗長化Webアーキテクチャ

SYSTEM RELIABILITY / AVAILABILITY

システム稼働率を図で理解する|直列・並列・冗長化からSLOまで

サーバーを2台にしたら、どれほど止まりにくくなるのでしょうか。身近なWebアプリから出発し、装置のつながり・確率・障害対策を一つずつ理解します。

01|予約アプリが突然開けなくなったら

Next.jsで作成した予約フォームにアクセスすると、普段は数秒で画面が表示されます。しかしある日、Webサーバーの障害で応答しなくなりました。データベースのPostgresが正常でも、アプリの受付部分が動かなければ予約できません。反対にWebサーバーが正常でも、必須のDBが止まると予約処理は完了しない場合があります。

利用者のブラウザ

Next.js / APIサーバー

画面・予約要求を処理します

Postgres / Supabase

予約情報を読み書きします

これは「上から下まで必要な部品がそろって初めて成功する」構成です。信頼性の観点では直列システムと呼びます。Supabaseの実際の内部構成や保証値を示すものではなく、理解するための抽象モデルです。

02|稼働率とは何を表す数字ですか

稼働率(Availability、アベイラビリティ)は、対象のサービスが利用可能だった時間の割合です。24時間のうち22時間動いていれば、稼働率は22÷24≒91.67%です。停止時間を引いてから割るだけなので、まずは時計のイメージで考えます。

24時間のうち、停止していた時間を数えます

稼働22時間停止2時間22÷24 = 91.67%
稼働率 A = 稼働時間 / (稼働時間 + 停止時間)
停止率 q = 1 - A
例: 22 / 24 = 0.9167 = 91.67%

03|故障率と稼働率は同じではありません

ここで「故障する頻度」と「サービスが使える時間」を区別します。故障が頻繁でも数秒で自動復旧できる仕組みと、めったに壊れないものの復旧に3日かかる仕組みでは、ユーザーが感じる停止時間が異なります。

指標日本語での意味重要な問い
Availability(稼働率)利用可能な時間の割合どれほどの時間、使えますか。
Reliability(信頼度)一定期間、故障せず動作する確率途中で壊れずに走り続けますか。
MTBFMean Time Between Failures:平均故障間隔修理可能な装置は平均どの程度稼働してから次の故障に至りますか。
MTTRMean Time To Repair/Restore:平均修復・復旧時間障害から平均どの程度で復旧しますか。

故障と修復を繰り返す装置の単純な定常モデルでは A = MTBF ÷ (MTBF + MTTR) です。ただし故障・修復の定義や観測条件が変わると、公式の適用範囲も変わります。

04|直列構成:どれか1つ止まると全体が止まります

WebサーバーとDBの両方が必須なら、2つとも稼働している必要があります。Webが90%、DBが90%の確率で利用可能で、故障が互いに独立しているとすると、両方稼働する確率は0.9×0.9=0.81、つまり81%です。

Web

90%

→

DB

90%

→

成功

81%

直列2台: A = R1 × R2
同じ稼働率Rのn台直列: A = R^n
R = 0.9 → 2台直列は0.81

05|並列構成:生き残ったサーバーが受け付けます

Webサーバーが2台あり、一方が故障してももう一方が利用者の要求を受けられる場合、両方が故障しない限りサービスは利用可能です。90%の装置なら1台の停止確率は10%。2台同時に停止する確率が0.1×0.1=0.01なので、全体の稼働率は1−0.01=99%です。

A:並列 — 片方だけでもサービス継続

リクエストの入口

上から下へ接続すると考えます

X1

X2

左右は並列です。どちらかの経路が動けば通過できます。

サービス提供

入口から出口まで動く経路が1本以上必要です

実機の配線図ではなく、機能が利用可能になる条件を表す信頼性ブロック図です。
並列2台: A = 1 - (1 - R1)(1 - R2)
同じRの2台: A = 1 - (1 - R)^2
R = 0.9 → 0.99 = 99%

06|構成A:Webサーバー2台の並列

同じ装置Xが2台あり、いずれか1台が正常なら動作できる構成をAとします。単体の稼働率をRとすると、A = 1−(1−R)² です。

A:並列 — 片方だけでもサービス継続

リクエストの入口

上から下へ接続すると考えます

X1

X2

左右は並列です。どちらかの経路が動けば通過できます。

サービス提供

入口から出口まで動く経路が1本以上必要です

実機の配線図ではなく、機能が利用可能になる条件を表す信頼性ブロック図です。

07|構成B:並列でも共通部品が止まれば全停止です

2台のWebサーバーを並列にしても、その先に必須の単一の認証装置やDBがあるなら、最後の装置が止まると利用できません。並列部分の稼働率に共通装置のRを掛けます。B = R[1−(1−R)²] です。

B:並列の後ろに共通装置が直列

リクエストの入口

上から下へ接続すると考えます

X1

X2

左右は並列です。どちらかの経路が動けば通過できます。

X3:共通装置

ここが止まると両経路が止まります

サービス提供

入口から出口まで動く経路が1本以上必要です

実機の配線図ではなく、機能が利用可能になる条件を表す信頼性ブロック図です。

ロードバランサーが1台だけの場合も、同様の単一障害点(SPOF:Single Point of Failure、単一障害点)になり得ます。ここでは装置3台の独立故障を仮定します。

08|構成C:直列の経路を丸ごと2組に複製します

Web+DBを1つの必須経路と考え、それを2セット並列化したイメージです。各経路は2台直列なので稼働率R²。経路が両方停止する確率を引けば C = 1−(1−R²)² です。

C:2台直列の経路が2本並列

リクエストの入口

上から下へ接続すると考えます

X1

X2

X3

X4

左右は並列です。どちらかの経路が動けば通過できます。

サービス提供

入口から出口まで動く経路が1本以上必要です

実機の配線図ではなく、機能が利用可能になる条件を表す信頼性ブロック図です。

データがどちらの経路でも正しく利用できることや、経路の切替えが成立することを前提にしています。現実のDBレプリケーションや整合性維持は、単純な数式以上に設計が必要です。

09|数字で比較:A・C・Bの順になる理由

例としてR=0.9を代入してみます。A=0.99、B=0.9×0.99=0.891、C=1−(1−0.81)²=0.9639となり、A>C>Bです。

装置の稼働率が90%のとき

構成A99.00%
構成C96.39%
構成B89.10%
横棒の長さは理論上の稼働率です。独立した装置故障を仮定しています。
構成計算結果
A1−(1−0.9)²99%
B0.9×[1−(1−0.9)²]89.1%
C1−(1−0.9²)²96.39%

ただし、R=0.9という一例だけでは「0<R<1のすべてで同じ順位」とは証明できません。次の節で式によって確かめます。

10|どの稼働率でも順位が変わらない証明

まずAとBの差は、B=R×Aであり0<R<1ですからA>Bです。またR²<Rなので、直列2台の1経路は単体装置より停止しやすくなります。したがって2経路を並列化しても、A>Cです。

残るCとBは、式を展開すると比較できます。

B = R[1-(1-R)^2]
  = 2R^2 - R^3
C = 1-(1-R^2)^2
  = 2R^2 - R^4
C - B = R^3 - R^4 = R^3(1-R) > 0

つまり0<R<1なら必ず A>C>B です。R=1などの端点では等しくなる場合があるため、範囲条件にも意味があります。

11|独立故障が崩れると数字はどうなりますか

直列・並列の積を使う計算では、故障が独立であることを仮定しています。しかし、2台のWebサーバーが同じラックの電源や同じリージョン、同じ設定ファイルを共有していれば、同時停止が起こり得ます。単純な並列式はそうした共通原因故障を織り込んでいません。

共通の電源・ネットワーク・設定

Web A

Web B

Web AとBが2台でも、上の共通部分が停止すると両方使えません。独立した故障とは限りません。

12|ホットスタンバイ・コールドスタンバイと負荷分散

方式普段の状態障害時の注意
アクティブ・アクティブ複数台が同時に要求を処理します。負荷容量、セッション、データ整合性を確認します。
ホットスタンバイ待機機も動作し、比較的素早く切り替えられる状態です。切替時間と状態同期を設計します。
ウォームスタンバイ一部稼働・準備状態の予備機です。昇格や準備に時間がかかることがあります。
コールドスタンバイ予備機が停止または未起動の状態です。起動・復元のため中断時間が長くなり得ます。

冗長化しても、無停止切替えや実行途中のトランザクション継続が自動的に保証されるわけではありません。そこには共有セッション、冪等性、DBレプリケーションなど別の仕組みが必要です。

13|MTBF・MTTRを使って稼働率を求めます

平均故障間隔MTBFが1,000時間で、平均修復時間MTTRが10時間とします。故障と修復を繰り返す定常モデルでは、稼働率は1,000÷(1,000+10)≒99.0099%です。故障を減らすだけでなく、検知と復旧を早めることも稼働率を高めます。

A = MTBF / (MTBF + MTTR)
例: 1000 / (1000 + 10) ≒ 0.990099
MTTRが1時間なら 1000 / 1001 ≒ 0.999001

14|稼働率99.9%の停止時間を実感します

99.9%は高い数字に見えますが、30日間では約43.2分の停止時間に相当します。99.99%なら約4.32分です。サービスの目標として使う場合は、対象時間や計測方法を一緒に示します。

稼働率30日間の停止時間換算
99%7.2時間
99.9%43.2分
99.99%4.32分
99.999%約25.92秒

15|SLA・SLO・SLIは何が違いますか

SLI(Service Level Indicator)は実測する指標です。例えば「予約APIのリクエスト成功率」を指します。SLO(Service Level Objective)はその目標水準で、例えば「30日間の成功率99.9%以上」です。SLA(Service Level Agreement)はサービス品質に関する合意・契約で、達成できない場合の条件を含むことがあります。

略語・読み方正式名称使い道
SLI(エスエルアイ)Service Level Indicator測定する指標
SLO(エスエルオー)Service Level Objective達成すべき目標
SLA(エスエルエー)Service Level Agreement利用者と提供者の合意
SPOF(スポフ)Single Point of Failure単一障害点

16|RTOとRPO:復旧の『時間』と『データ』を分けます

RTO(Recovery Time Objective、目標復旧時間)は、障害後どのくらいの時間で復旧するかという目標です。一方RPO(Recovery Point Objective、目標復旧時点)は、どこまで古い時点のデータへ戻ることを許容するかという目標です。30分で再起動できても、前日のバックアップしかなければ直近の予約を失うかもしれません。

RTO:復旧まで

停止した時刻 → サービスが戻るまで

RPO:戻るデータの時点

障害時刻 → 復旧可能なデータ時点まで

17|Supabaseを使う設計ではどこを見るべきですか

Supabaseを用いたアプリでも、利用者から見るとブラウザ・フロントエンド配信・API・認証・データベース・ストレージなど複数のサービスが組み合わさっています。予約の成功条件によって必須の経路が変わるため、どの要素が止まると機能が使えないかをノード図に整理します。

利用者 / Next.js画面

予約を処理するAPI

認証(必要なら)

必要な操作で認証情報を検証

Postgres

予約の保存と整合性

予約確定レスポンス

18|操作ラボ:装置を落として確かめます

稼働率を変えたときのA・B・Cの数値を比較し、各装置をクリックして故障させてください。並列の片方だけが壊れたときと、直列の共通装置が壊れたときの違いが見えるようになっています。

操作ラボ|システムの故障と稼働率

装置ごとの稼働率を変えると理論上の全体稼働率が変わります。「故障させる」は特定時点の動作確認であり、長期稼働率の計算とは別です。

1%99%

1位:構成A

99.000%

2台並列

2位:構成C

96.390%

2台直列を2組並列

3位:構成B

89.100%

2台並列+1台直列

構成Aの故障シミュレーション

システム全体:サービス提供可能

A:1台でも生存。B:X1かX2が生存、かつX3が生存。C:X1とX2の両方、またはX3とX4の両方が生存。

予想停止時間(独立故障モデル)

約432.0分 / 30日

期待値 = 期間(分)× (1 − 全体稼働率)です。実際の停止時間の予測ではなく、各装置の独立性と一定の稼働率を仮定した単純モデルです。

復旧時間を変えるとどうなりますか

例:1装置がMTBF 10,000分、MTTR 60分の場合、定常稼働率は 99.404% です。

こちらは上の稼働率スライダーとは独立した参考計算です。

19|設計に使うチェックポイント

確認項目確認する理由
ユーザーの成功条件見かけのHTTP応答だけでなく、予約確定などの業務機能を監視するためです。
共通障害点2台あっても同じ電源・DNS・DBが止まれば全停止する場合があるためです。
独立性の検証理論式が前提とする独立故障が現実に近いか評価するためです。
復旧時間・復旧時点RTO・RPOを機能とデータの両面で守るためです。
再送・冪等性通信断や切替後の二重登録を防ぐためです。
監視と訓練故障を早期検知し、復旧手順を確認するためです。

20|まとめ:部品ではなく『経路』で考えます

稼働率の計算では、すべて必要な装置を直列、いずれかで代替できる経路を並列として捉えます。直列は掛け算、並列は「すべて停止する確率を1から引く」のが基本です。共通障害点や復旧時間、状態同期などを考慮すると、机上の数値を現実の設計へつなげられます。

まず利用者の操作がどの経路を通るかを描き、次に単一障害点を探し、最後に稼働率と復旧能力を設計する。この順番なら、新しいサービス構成でも応用できます。