変更要約: 初版
4.2信頼性設計
システムの信頼性を測るRASISの5指標、直列/並列構成での稼働率計算、そして障害時の振る舞いを規定するフォールトトレラント・フェールソフト・フェールセーフの違いを、コストと信頼性のトレードオフ判断を通じて学びます。
システムアーキテクトが冗長化を設計するとき、「二重化すれば安心」という単純な発想では不十分です。構成要素をどうつなぐか(直列か並列か)によって、全体の稼働率はまったく異なる式で決まるからです。さらに、障害が発生した瞬間にシステムがどう振る舞うべきか(機能を維持し続けるのか、機能を縮退させるのか、安全側に停止するのか)は、業務要件によって最適解が変わります。この節では、RASISの各指標、稼働率の直列/並列計算、そして障害時の振る舞いの3類型を踏まえ、目標とする信頼性・可用性をコストと天秤にかけてどう構成を選ぶかを判断する力を養います。
4.2.1RASISの5指標
- RASIS=システムの信頼性を多面的に評価する5指標の頭文字。Reliability(信頼性)=故障の起こりにくさ(平均故障間隔MTBFで測る)。Availability(可用性)=必要なときに使える度合い(稼働率で測る)。Serviceability(保守性)=故障からの復旧しやすさ(平均修理時間MTTRで測る)。Integrity(保全性)=データが矛盾なく正しく保たれる度合い。Security(安全性)=不正アクセスや情報漏えいへの耐性。
- アーキテクトの実務では、RASISの5指標を均等に最大化しようとするのではなく、業務要件に応じてどの指標を優先するかを判断する。例えば決済システムでは保全性(データの正しさ)と可用性を最優先し、社内向け軽微なツールでは保守性(安価に直せること)を優先するといった具合に、トレードオフの中で優先順位を明示することが設計判断の核になる。
4.2.2稼働率の直列/並列計算
- 直列構成=複数の構成要素すべてが正常でないと全体が機能しない構成(例:Webサーバ→DBサーバの一本道)。全体の稼働率は各要素の稼働率の積(
a1 × a2 × … × an)で計算される。構成要素を増やすほど(一本道の要素が増えるほど)全体の稼働率はむしろ下がる点に注意——例えば稼働率99%の要素を2つ直列につなぐと、全体の稼働率は0.99 × 0.99 = 0.9801(98.01%)に低下する。 - 並列構成(冗長化)=同じ役割の要素を複数用意し、どれか1つでも正常なら全体が機能する構成(例:ロードバランサ配下のWebサーバ2台)。1台の稼働率を
a、台数をnとすると、全体の稼働率は1 − (1 − a)^n(=「全台が同時に故障する確率」を1から引いた値)で計算される。例えば稼働率90%の要素を2台並列にすると、全体の稼働率は1 − (1 − 0.9)^2 = 1 − 0.01 = 0.99(99%)に向上する——並列化は稼働率を押し上げる方向に働く。
「直列=各要素の稼働率の積(増えるほど低下)」「並列(冗長化)=1−(1−a)^n(台数が増えるほど向上)」が最頻出です。直列と並列を取り違えて「要素を増やせば必ず稼働率が上がる」と誤解しないこと——直列に要素を追加すれば稼働率は下がり、並列に要素(冗長構成)を追加すれば稼働率は上がる、という向きの違いを式とセットで押さえること。
4.2.3フォールトトレラント・フェールソフト・フェールセーフ
- フォールトトレラント=構成要素が故障しても、利用者に影響を与えることなく全機能を維持し続ける設計思想。多重化した要素を常時並行稼働させ、1つが故障しても即座に他が処理を引き継ぐ。コストが最も高い設計であり、決済基盤や航空管制など機能停止が許されない領域に用いる。
- フェールソフト=故障時に機能を縮退させてでも運転を継続する設計思想(グレースフルデグラデーション)。例えば一部のサーバが故障したら、非重要機能を停止し重要機能だけを提供し続ける。フォールトトレラントほどコストをかけずに、完全停止は避けたい要件に適する。フェールセーフ=故障時に安全な状態へ確実に移行させる設計思想(機能継続は目的としない)。例えば制御システムが異常を検知したら、機能を止めてでも危険な動作を防ぐ側(信号機が全赤で停止する等)に倒す。
あるオンライン証券会社のシステムアーキテクトが、目標可用性99.99%(年間ダウンタイムおよそ52分以内)の注文執行システムを設計しているとします。まず現状の単一サーバ構成の稼働率を実測すると99%(a=0.99)でした。単一構成のまま目標を達成することはできないため、並列(冗長化)による稼働率向上を検討します。同じ稼働率99%のサーバを2台並列にすると、全体の稼働率は1−(1−0.99)^2=1−0.0001=0.9999(99.99%)となり、目標をちょうど満たします。しかし、ここで見落としてはならないのが、このサーバの前段にあるロードバランサや共有ストレージが単一障害点(直列構成)のままでは、サーバを並列化しても全体の稼働率はそのボトルネックに引きずられるという点です。例えばロードバランサの稼働率が99.9%のままなら、全体は0.999 × 0.9999 ≈ 0.9989(99.89%)に低下し、目標未達となります。したがって設計判断としては、サーバ層だけでなくロードバランサ・共有ストレージなど直列でつながるすべての構成要素を並列化(冗長化)する必要があります。同時に、コストとのトレードオフとして、全構成要素をフォールトトレラント(無停止)にするのではなく、注文執行の中核機能はフォールトトレラントに、参考情報表示など非重要機能はフェールソフト(縮退運転)に区分することで、過剰な投資を避けつつ目標可用性を達成できます。ここでの典型的な誤判断は「サーバだけ二重化すれば目標可用性を達成できる」という思い込みです——直列でつながる全経路のうち最も低い稼働率の要素(ボトルネック)が全体の稼働率の上限を決めるため、経路全体を見渡した冗長化設計が不可欠です。
| 構成 | 計算式 | 例(各99%/2台または2段) | 傾向 |
|---|---|---|---|
| 直列 | a1 × a2 × … × an | 0.99 × 0.99 = 0.9801 | 要素が増えるほど低下 |
| 並列(冗長化) | 1 − (1 − a)^n | 1 − (1 − 0.99)^2 = 0.9999 | 台数が増えるほど向上 |
ひっかけ: 「サーバを並列化(冗長化)すれば、経路上の他の要素(ロードバランサ・共有ストレージ等)を見なくても目標可用性を達成できる」は誤りです——直列でつながる経路全体のうち最も低い稼働率の要素が全体の上限を決めるため、単一障害点が残っていれば冗長化の効果は打ち消されます。また「フェールセーフ=機能を維持し続ける設計」も誤り=フェールセーフは安全な状態への移行が目的で、機能継続を目的とするのはフォールトトレラント/フェールソフトです。
4.2.4この節のまとめ
- RASISの5指標は業務要件に応じて優先順位をつけて設計する(全て均等最大化はしない)
- 直列は稼働率の積(要素増で低下)、並列(冗長化)は1−(1−a)^n(台数増で向上)——経路全体の最弱要素が上限を決める
- フォールトトレラント(機能維持・高コスト)・フェールソフト(機能縮退で継続)・フェールセーフ(安全側へ停止)を業務要件とコストで使い分ける
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. 稼働率99%のサーバを2台並列(冗長化)構成にした場合の全体の稼働率として正しいものはどれか。
Q2. 注文執行システムのサーバ層を2台並列化し稼働率99.99%を達成したが、前段のロードバランサが単一障害点(稼働率99.9%)のままだった。全体の可用性についての正しい判断はどれか。
Q3. 航空管制システムでは機能停止が許されないため多重化した要素を常時並行稼働させ故障時も利用者に影響なく全機能を維持する設計を採る。一方、社内の付随的な参照機能は故障時に一部機能を止めてでも重要機能を継続させる設計とした。それぞれ最も適切な設計思想の組合せはどれか。

