複合可用性の計算
入力
| 構成 | 直列 |
|---|---|
| コンポーネント数 | 2 |
| コンポーネント1 | 99.9 % |
| コンポーネント2 | 99.9 % |
| コンポーネント3 | 99.9 % |
複合可用性の計算
2〜3台のコンポーネントを直列または並列(冗長)に組み合わせたときのシステム全体の可用性を、信頼性ブロック図に基づいて計算します。複合可用性と年間ダウンタイムがわかります。
入力
コンポーネントの可用性
結果
値を入力すると計算結果が表示されます。
システム可用性
想定ダウンタイム
複合可用性
可用性とは、コンポーネントが稼働している時間の長期的な割合のことです。1台のサーバー、リンク、サービスにはそれぞれ固有の可用性があり、しばしば「ナイン」で表されます(たとえば99.9 %はスリーナイン)。しかし実際のシステムは多数の部品から構成され、利用者が実際に体験する可用性は、それらの部品がどう配線されているかに左右されます。複合可用性とは、各コンポーネントの可用性と、それらを結ぶ信頼性ブロック図の構成から算出した、システム全体の可用性のことです。
主に2つの構成があります。直列では、システムが動作するためにすべてのコンポーネントが稼働している必要があります。並列では、コンポーネントが冗長化され、そのうちどれか1つが動いていればシステムは動き続けます。直列構成は可用性を下げ、並列構成は可用性を積み上げます。この計算機は2台または3台のコンポーネントをいずれかの構成で組み合わせ、複合可用性とそれが示す年間ダウンタイムを算出します。
計算式
各コンポーネント の可用性を (0から1の値)とします。
直列では、すべてが稼働しているときにのみシステムが利用可能になります。故障が独立であると仮定すると、可用性を掛け合わせます。
A=i∏Ai=A1×A2×⋯結果は必ず最も可用性の低いコンポーネントより低くなります。直列の部品が増えるたびに、故障しうる箇所が1つ増えるからです。
並列(冗長)では、すべての経路が同時に利用不可になったときにのみシステムが利用不可になります。同時に起こらなければならないのは各部品の不可用性 なので、そちらで考えるほうが容易です。
A=1−i∏(1−Ai)=1−(1−A1)(1−A2)⋯結果は必ず最も可用性の高いコンポーネントより高くなります。冗長なコピーが故障した1台を肩代わりできるからです。
複合可用性が求まれば、年間の想定ダウンタイムは、不可用な割合に1年の長さを掛けたものになります。
Dyear=(1−A)×525,600 分=(1−A)×8,760 時間計算例
それぞれ可用性99.9 %()の2台のコンポーネントを、両方の方法で組み合わせてみます。
直列の場合:
A=A1×A2=0.999×0.999=0.998001=99.8001%2台を直列に置くと、可用性は99.9 %から99.8 %へ下がり、想定ダウンタイムはほぼ倍になります。システムが利用不可になる時間は年間約17.5時間です。
並列の場合:
A=1−(1−A1)(1−A2)=1−(0.001)(0.001)=1−0.000001=99.9999%2台を冗長化すると、可用性はスリーナインからシックスナインへ上がり、想定ダウンタイムは数時間から年間およそ30秒へと縮まります。同じ2台でも、構成を変えるだけでダウンタイムはおよそ2,000倍の差になります。
直列はナインを減らし、並列はナインを増やす
直列の可用性は掛け合わされるため、コンポーネントをつなぐほどナインは着実に減っていきます。99.9 %の同一サービスを10個、1本の直列に並べると となり、各リンクがスリーナインでも連鎖はおよそツーナインまで落ちます。多数のサービスを経由するリクエスト経路が、その上のどのサービスよりもはるかに信頼性が低くなりうるのはこのためです。
冗長化は逆方向に働きます。並列のコピーはそれぞれ、すでに小さい不可用性をさらに小さい数で掛けるため、ナインは急速に積み上がります。
| 冗長コピー数(各99.9 %) | システム可用性 | 年間ダウンタイム |
|---|---|---|
| 1 | 99.9 % | 約8.76時間 |
| 2 | 99.9999 % | 約31.5秒 |
| 3 | 99.9999999 % | 約0.03秒 |
この急な上昇こそが冗長設計の核心的な魅力です。ハードウェアを倍にすることでスリーナインがシックスナインに変わります。
ナインとダウンタイム
年間ダウンタイムという数値は、可用性を読み取る最も具体的な方法であることが多いものです。ナインが1つ増えるごとに、許容ダウンタイムはおよそ10分の1になります。
| 可用性 | 年間ダウンタイム |
|---|---|
| 99 %(ツーナイン) | 約3.65日 |
| 99.9 %(スリーナイン) | 約8.76時間 |
| 99.99 %(フォーナイン) | 約52.6分 |
| 99.999 %(ファイブナイン) | 約5.26分 |
| 99.9999 %(シックスナイン) | 約31.5秒 |
コンポーネントを直列に組み合わせるとこの表を下へ、並列で冗長化を加えると上へ移動します。
前提と限界
掛け算の法則は、コンポーネントの故障が独立であること、つまり一方の停止が他方の停止の確率を高めないことを前提とします。冗長化がその劇的な効果を発揮するのは、コピーが本当に独立して故障する場合だけです。共通の電源、共通のネットワーク、冗長ペアの前段にある単一のロードバランサー、あるいはすべてのコピーに存在するソフトウェアのバグは、いずれも単純な式では捉えられない相関故障を生みます。そのようなシステムの実際の可用性は、並列の結果が示すよりも低くなります。
またこの計算は可用性を安定した長期平均として扱い、修理時間、フェイルオーバーの遅延、計画メンテナンスの時間帯は、各コンポーネントの可用性にすでに織り込まれていない限り無視します。とはいえ、コンポーネントの構成がどうふるまうかを一次近似で見積もるうえで、直列と並列の法則は標準的な道具であり、部品を増やすことと冗長性を加えることのトレードオフをわかりやすく示してくれます。
単一の可用性目標の背後にあるダウンタイムの数値については、稼働率SLAの計算 を参照してください。
よくある質問 (FAQ)
複合可用性とは何ですか?
複合可用性とは、複数のコンポーネントから構成されるシステム全体の可用性で、各部品の可用性と、それらの接続のされ方から求めます。可用性とは、コンポーネントが稼働している時間の長期的な割合のことです。可用性99.9 %なら、稼働している時間が99.9 %であることを意味します。信頼性ブロック図はシステムを直列・並列、あるいはその組み合わせで表現し、複合可用性はブロックの組み合わせ方から導かれます。
直列と並列はどう違いますか?
直列構成ではすべてのコンポーネントが稼働していないとシステムが動作しないため、どこか1か所の故障で全体が停止します。可用性は掛け合わされ、最も弱いコンポーネントよりも必ず低くなります。並列(冗長)構成ではコンポーネントが互いにバックアップし合い、少なくとも1つの経路が動いていればシステムは稼働を続け、すべてが同時に故障したときにのみ停止します。この場合は不可用性(1 − A)が掛け合わされ、最も優れたコンポーネントよりも高くなります。
なぜ冗長化で可用性が大きく向上するのですか?
独立した故障が同時に起こることはめったにないからです。あるコンポーネントが0.1 %の時間停止するとき、同じものを2台並列にすると両方が同時に停止する確率は0.1 % × 0.1 % = 0.0001 %となり、スリーナインがシックスナインに変わります。冗長化した各コピーが、すでに小さい不可用性をさらに小さい数で掛けていくため、可用性は急激に高まります。ただしこの効果はコンポーネントが独立に故障することが前提です。共通の電源や依存関係、ペアの前段にある単一のスイッチは相関故障を生み、冗長化では取り除けません。
「ナイン」の数とダウンタイムはどう関係しますか?
ナインが1つ増えるごとに、許容されるダウンタイムはおよそ10分の1になります。ツーナイン(99 %)は年間で約3.65日、スリーナイン(99.9 %)は約8.76時間、フォーナイン(99.99 %)は約52.6分、ファイブナイン(99.999 %)は約5.26分に相当します。直列に組み合わせるとナインが減り、並列で冗長化するとナインが戻ります。だからこそ、年間ダウンタイムという指標が複合可用性を読み取る最も具体的な方法になることが多いのです。