システム稼働率
概要
システム稼働率 (system availability factor) はシステムに期待できる可用性の指標である。
Table of Contents
稼働率
稼働率は、システムが継続して機能する平均時間を意味する平均故障間隔 (MTBF; mean time between failures) と、システムに障害が発生してから復旧するまでの平均時間を意味する動作不能時間 (MTTR; mean time to recovery) を使用して式 (
大雑把だが、システム稼働率は年間の停止時間に換算すると把握しやすい (MTBF が機能継続した時間を意味しているため必ずしも正しくはないが)。例えば稼働率
この記事では稼働率が設定されている機器やサブシステムを接続したとき、システム全体としてどのような稼働率になるかの計算方法を説明する。
| 稼働率 | 年間停止時間 |
|---|---|
| 0.99 | 3日と15時間36分 |
| 0.999 | 8時間45分 |
| 0.9999 | 52分34秒 |
| 0.99999 | 5分15秒 |
| 0.999999 | 32秒 |
直列接続と並列接続
稼働率
一方で、
このような構成は基本情報技術者試験やシスアド試験において Fig 1 のような「直列接続」「並列接続」のモデルで頻出される問題である。
- 稼働率
前述の並列接続で扱うケースでは
個の機器で構成され、そのうち最大 個の機器が停止しても機能を継続することができるシステムの稼働率 を求める。
このようなケースでは、システム全体の稼働率
すべての機器の稼働率が同一のケース
まずすべての機器が同じ駆動率
式 (
個々の機器の稼働率が異なるケース
より一般的なケースとして個々の機器の駆動率が異なる場合について考える。これは組み合わせの選択ごとに生起確率が異なるため「確率×組み合わせ数」で単純化することができない。式 (
import itertools
def availability_factor(p, f):
P = 0
for i in range(f + 1):
for fails in itertools.combinations(range(len(p)), i):
px = 1.0
for ii in range(len(p)):
px *= p[ii] if ii not in fails else (1.0 - p[ii])
P += px
print("P[%d]+=%f, fails=%s" % (i, px, fails))
return P
print("P=%f" % availability_factor([0.9, 0.8, 0.6], 2))
# P[0]+=0.432000, fails=()
# P[1]+=0.048000, fails=(0,)
# P[1]+=0.108000, fails=(1,)
# P[1]+=0.288000, fails=(2,)
# P[2]+=0.012000, fails=(0, 1)
# P[2]+=0.032000, fails=(0, 2)
# P[2]+=0.072000, fails=(1, 2)
# P=0.992000
itertools.combinations(range(n), k) は n 個の集合から k の要素を選ぶときのすべての組み合わせを列挙する機能である。上記のコードではシステムが許容可能な停止パターンのすべて (一つも停止していないケースを含む) を列挙し、各生起確率の総和を算出している。
例1: 並列接続問題
基本情報技術者試験で扱う並列接続問題を例に考えてみよう。前述の通り、それらは「システム内の機器の 1 つが機能していればシステム全体は機能する」と説明されていることから、式 (
並列接続の稼働率に対して、一般的な基本情報技術者試験の解法では:
一方、式 (
もう一つの例として、A, B, C 全ての機器が等しい稼働率
このように、一般化した解法と基本情報技術者試験の解法は異なるアプローチで同じ結果となるものの、前者のほうが圧倒的に複雑で計算量が多い。並列接続問題は状況を限定することで簡単な考え方で実用的な解答を導くことができるように配慮されたものである。
例2: 直列接続問題
式 (
例3:
Apache Cassandra で一貫性レベルに Quorum を指定すると (n-1)/2 + 1 ノードに