読者です 読者をやめる 読者になる 読者になる

amori's blog

よろず技術系と趣味関係の雑記です

冗長構成の信頼性について

信頼性

2016.07.15 追記

この記事、このサイトでアクセス数が多いのですが、うかつにも数式が正しく表示されない状態にあることにずっと気がつかないでいました。

はてなブログの記法の初期設定の問題のようなのですが、結局は記事を新規に起こさねば解決できないようです。

数式がメインの記事については順次引っ越ししますが、それまではtex形式の式から読み取って下さい。ごめんなさい。

 

さて、このブログのメインコンテンツはよろず技術系情報(だったはず)なので、久々にそっち系の話。

 

システムの信頼性と冗長構成(非保守)

 

信頼性や稼働率の向上のためにシステムを冗長化構成が用いられることが普通です。

バックアップ系とか並列運用とか。

しかし単純な冗長系構成、つまり壊れたそのままで補修しないいわゆる「非保守冗長系」では意外に信頼性は向上しないということが案外認識されていないことが多々あるので、これを定量的に解説してみます。

 

システムの信頼性の指標として一般に平均故障寿命(MTTF:Mean Time To Failure)もしくは平均故障間隔MTBF:Mean Time Before Failure)が用いられます。(以下で数式検討では区別がないので一律にMTBFとします)

 

例えば、装置の故障発生確率が1時間当たりλの場合はMTBF=1/λ (時間)

故障率が \frac{(10^{-4})}{時間}ならば、MTBFは10000時間で1年ちょっと。

 

ではこの装置をふたつの2重構成にしたならばMTBF/MTTFが2倍になるかというとそうではなく、 rac{3}{2lambda}に留まります。

3重にしてもまだ2倍には届かず rac{11}{6lambda}です。

 

ここで、 (1, rac{3}{2}, rac{11}{6}) ときたら勘のいい方は想像がつくかと思いますが、結論からいいますと、これ調和級数の和になるのです。

[egin{equation}1, 1+rac{1}{2}, 1+rac{1}{2}+rac{1}{3} end{equation}]

次は ( 1+rac{1}{2}+rac{1}{3}+rac{1}{4}=rac{25}{12}) となり、4重構成でようやく元の2倍をやっと超える程度です。

 

調和級数の和は発散はするけれども増加が少ない数列の代表格ですので、つまり冗長構成は単純に数を増やすだけでは効果が少ないということがわかります。

(計算は後述)

 

コンピューターシステムやハードディスクなどの多重系ならば一個壊れたら他で稼働している間に壊れたところを直して、またもとの多重系に戻せるので、そのような場合は「保守冗長系」でMTBF(信頼性)はこの結果よりもはるかに高くなります。

(いずれ整理します。)

 

このような非保守冗長系は、例えば飛行機のエンジンなどが該当します。飛行中に壊れても修理できませんからね。ジャンボジェットだとエンジンが4機ありますが、最悪1機でもある程度の運行は可能であり、最寄りの空港までは運行できるように設計・運用されています。つまり全エンジンが停止するという最悪の事態に至る可能性は、単純な故障率による概算だとエンジン4機は1機の1+1/2+1/3+1/4=25/12≒2倍ということです。

通常運用可能な条件をエンジン2機以上または3機以上とする場合、これを 2 out of 4,3out of 4という呼ぶ条件になりますが、この場合の信頼性については次の「M out of N」を参照ください

 

非保守N重系の信頼性の導出

では、故障率λの装置がN重構成場合に、MTBFが調和級数の和、つまり(displaystyle rac{1}{lambda}sum_{k=1}^{N}rac{1}{k})になることを確認してみましょう。

 

MTBFは信頼度関数R(t)を積分することで求められます。故障率λの信頼度関数は (R(t) = e^{-lambda t})で、

egin{align}int_0^{infty}R(t)dt &= left[-rac{1}{lambda} e^{-lambda t} ight]_0^{infty}  &= rac{1}{lambda}end{align}

が単体構成のMTBFです。

2重構成では、装置がふたつとも故障しない限りは動作可能とするので信頼性関数は、

[R(t) = 1 - (1-e^{-lambda t})^2]

となりMTBFは、

[egin{align}int_0^{infty}(1 - (1-e^{-lambda t})^2)dt &= int_0^{infty}(2e^{-lambda t}-e^{-2lambda t})dt &= left[-rac{2}{lambda} e^{-lambda t} + rac{1}{2lambda} e^{-2lambda t}  ight]_0^{infty}  &= rac{3}{2lambda}end{align}]

となります。

3重構成は同様に、

[egin{align}int_0^{infty}(1 - (1-e^{-lambda t})^3)dt &= int_0^{infty}(3e^{-lambda t}-3e^{-2lambda t}+e^{-3lambda t})dt &= left[-rac{3}{lambda} e^{-lambda t} + rac{3}{2lambda} e^{-2lambda t} -rac{1}{3lambda} e^{-3lambda t} ight]_0^{infty} &= rac{3}{lambda} -rac{3}{2lambda} +rac{1}{3lambda}  &= rac{11}{6lambda}end{align}]

です。

では本題のN重構成の一般化です。

[egin{align}int_0^{infty}(1 - (1-e^{-lambda t})^N)dt &= int_0^{infty}(1-sum_{k=0}^{N} {}_N C_k( -e^{-lambda t})^k )dt &= int_0^{infty}(-sum_{k=1}^{N} {}_N C_k (-1)^k e^{-klambda t} )dt &= -left[ sum_{k=1}^{N} {}_N C_k rac{(-1)^k}{-klambda} e^{-klambda t} ight]_0^{infty} &= rac{1}{lambda}left[ sum_{k=1}^{N} {}_N C_k rac{(-1)^k}{k} e^{-klambda t} ight]_0^{infty} &= -rac{1}{lambda} sum_{k=1}^{N} {}_N C_k rac{(-1)^k}{k} end{align}]

 

なんか微妙に複雑になってしまいましたが、がんばって計算するとΣのところはちゃんと調和級数の和になります。

このΣ内の式を導出するために以下の恒等式を考えます。

[egin{align} (1+x)^N &= sum_{k=0}^{N} {}_N C_k x^k end{align}]

の両辺を積分すると、

[egin{align} rac{1}{N+1}(1+x)^{N+1} &= sum_{k=0}^{N} {}_N C_k rac{1}{k+1}x^{k+1} + C end{align}]

x=0で、 [ rac{1}{N+1} = C ] なので、x= -1 で、 [ 0 = sum_{k=0}^{N} {}_N C_k rac{1}{k+1}(-1)^{k+1} + rac{1}{N+1} ]

Combinationの部分を [ {}_{N+1}C_{k+1} = {}_{N}C_{k+1} + {}_{N}C_{k}] を用いて展開すると、 [egin{align} -rac{1}{N+1} &= sum_{k=0}^{N} ({}_{N+1}C_{k+1} - {}_{N}C_{k+1})rac{1}{k+1}(-1)^{k+1} &= sum_{k=0}^{N} {}_{N+1}C_{k+1}rac{1}{k+1}(-1)^{k+1} - sum_{k=0}^{N} {}_{N}C_{k+1}rac{1}{k+1}(-1)^{k+1} &= sum_{k=1}^{N+1} {}_{N+1}C_{k}rac{1}{k}(-1)^{k} - sum_{k=1}^{N+1} {}_{N}C_{k}rac{1}{k}(-1)^{k} end{align}]

第2項においてk>Nについては( {}_N C_k = 0 )なので( displaystyle sum_{k=1}^{N} {}_{N}C_{k}rac{1}{k}(-1)^{k} )になるので、各項をF(N+1),F(N)とおけます。よって、 [ egin{align} F(N+1) - F(N) &= -rac{1}{N+1} F(N) - F(N-1) &= -rac{1}{N} cdots F(2) - F(1) &= -rac{1}{2} end{align}]

両辺をF(N)から整理すると、 [ egin{align} F(N) - F(1) &= sum_{k=2}^{N} -rac{1}{k} F(N) &= sum_{k=2}^{N} -rac{1}{k} - 1 sum_{k=1}^{N} {}_{N}C_{k}rac{1}{k}(-1)^{k} &= -sum_{k=1}^{N}rac{1}{k} end{align}]

となります。よってN重構成のMTBFは、

[egin{align}int_0^{infty}(1 - (1-e^{-lambda t})^N)dt &= rac{1}{lambda}sum_{k=1}^{N}rac{1}{k} &= rac{1}{lambda}(1+rac{1}{2}+rac{1}{3}+cdots+rac{1}{N}) end{align}] でけた(^^)

 

追記・修正:2014.05.14  「非保守冗長系」を明記。あとエンジンの例や細かな表現修正