フォールトトレラント設計

フォールトトレラント設計あるいは障害許容設計（フォールト・トレラントせっけい、英: fault tolerant design）は、システム設計の手法であり、システムの一部に問題が生じても全体が機能停止するということなく（たとえ機能を縮小しても）動作し続けるようなシステムを設計するものである。 この用語はハードウェアあるいはソフトウェアの障害があってもほとんど途切れることなく動作し続けるコンピュータシステムの設計を指して使われることが多い。 他の領域の例としては、自動車の設計でタイヤが一本パンクしても走行できるような設計を指す。 フォールトトレラントな部品 部品それぞれが内部に異常を発生しても部品として機能し続けることができれば、システム全体としても機能し続ける。自動車の例で言うと、自動車にはランフラットタイヤを装備しているものがある。これは、内部に硬いゴムの層を持っているもので、表面がパンクしても走行が可能となっている。走行できる時間は限られているしスピードも落とす必要があるが、パンクによる操作不能が招く事故を防いだり、タイヤ交換と比べてダウンタイムを短縮できたりする。 冗長性 これはバックアップの部品があって、障害が発生したときに自動的に代替して動作するものである。例えば、ダブルタイヤや二軸の後輪や前二軸の車両ではタイヤをひとつ失っても走行には問題無い。多くのタイヤを持っているため、タイヤひとつでは危険ではない。ただし、部品点数が増えるため故障率は上がり、外れたタイヤが被害を及ぼす等の問題は増える。 あるシステムにおけるすべての部品に対してフォールトトレラント設計を施すのは得策ではない。冗長性を上げると反面コストなどが増大し、費用対効果の面で見合わなくなってしまう。 どの部品をフォールトトレラントにすべきかを決定するには以下のような判断基準が考えられる。 その部品はどれだけ重要か？ 輸送のみを目的とする自動車では、ラジオやオーディオは重要（必須）な機能ではない。したがって、ラジオやオーディオをフォールトトレラント設計にする必要性は低い。 その部品はどのくらい障害を起こすか？ 自動車のドライブシャフトのように、いくつかの部品は故障することはほとんど考えられないので、フォールトトレラント設計の必要性は低い。 その部品をフォールトトレラントにするのにかかるコストは？ 例えば、自動車のエンジンに冗長性を持たせるとすると、経済的にも重量やサイズもコストが高くなることが予想される。 全ての条件に適合した部品の例として自動車の搭乗者拘束システム（シートベルトやエアバッグ）がある。我々が意識しない第一の搭乗者拘束システムは重力である。自動車が転覆などした場合、重力による拘束はなくなってしまう。このような事故の際に搭乗者を拘束するのは安全上非常に重要なので、第一の条件に合っている。シートベルトがない時代には事故によって搭乗者が外に放り出されることがよくあった。したがって第二の条件にも合っている。シートベルトなどは価格的にも重量的にもコストは高くない。したがって第三の条件にも合っている。以上のことから、シートベルトを全ての自動車に装備するのはよい考えと言える。その他のエアバッグなどの補助部品はやや高価なので、第三の条件に適合しないかもしれない。このため、安価な自動車にエアバッグを搭載していないものが（高価な自動車よりも）多いのである。逆に、センチュリーおよびセンチュリーロイヤルは、乗っている要人の保護が最優先事項であるため第三の条件は無視され、通常の使い方では満たされない第二の条件も銃撃等による故障という特殊条件を考慮し、同様に絶対に故障してはならないため第一の条件を満たす、としてエンジン及び補機類の冗長化が行われている。 通常は操縦桿と各動翼を複数の系統で繋ぎ、1系統が切断しても操縦不能とならない設計となっている。またケーブル、油圧、フライ・バイ・ワイヤなど、別種の方法で繋ぐことも多い。 ミッションクリティカルなシステムにおいて、コンピュータのフォールトトレラント性は重要である。そういった用途に用いるため、製品自体に広範なフォールトトレラント設計を盛り込んだコンピュータも作られており、タンデムコンピューターズやストラタステクノロジー、NECなどの製品がある。これらはCPUを含む全てのハードウェアを二重化し、ハードウェア障害（部品障害）に対してはフォールトトレラント性を確保し、記述された通りソフトウェアを動作させる。（コンピュータに限った問題では無いが、飛行機のパイロットに墜落させる意図がある場合と同様にオペレーティングシステムやアプリケーションソフトウェアのバグなどの障害やユーザー操作上の問題は対応できない）。 タンデムコンピューターズは、その名前のとおり同社のビジネスをフォールトトレラントなシステムを開発/製造/販売するものとしていた。同社のNonStopシステムは「シングルポイント・トレラント」なシステムであり、十年間の動作時間の計測をして公表していた。 ハードウェアのフォールトトレラント性は、故障した部品をシステム動作中に交換することを要求する場合がある。 このようなバックアップがひとつだけ存在するシステムを「シングルポイント・トレラント」と言う。フォールトトレラントシステムと呼ばれているものはほとんどこのタイプである。このようなシステムでは平均故障間隔(MTBF)が十分に長くないと、部品交換中に使用中のバックアップも故障してしまうことがある。MTBFが長ければ長いほど良いが、フォールトトレラントシステムに特にそれが求められているわけではない。 バッテリーで稼働可能な組み込み系システムのコンピュータと異なり、汎用コンピュータは動作中に（通常のシャットダウン手順を経ることなく）突然の電源断が発生した場合、予期せぬ状態に陥ってしまうことがある。揮発性メモリに記録された一時情報が失われるだけでなく、読み書き中のユーザードキュメントファイルが破損してしまったり、システムファイルの破損によりOSが起動しなくなったり、さらにはハードウェアが故障してしまうこともある。産業系システムでは通例、コンピュータの動作中に停電が発生した場合も、予備電源を使ってある程度の動作を続け、安全に自動シャットダウンすることができるようにするため、無停電電源装置 (UPS) を備えている。 医療機器など生命にかかわる分野では、停電に備えることは必須であり、発電機や大容量バッテリーなどを用意することで電源が二重化されている。 マイクロコンピュータを搭載した人工呼吸器において、メインのマイクロコンピュータだけではなく、サブのマイクロコンピュータも搭載し、メインコンピュータが仮に故障しても自動的にサブのマイクロコンピュータ作動する。 こと超急性期医療現場や手術室で使用される麻酔器の場合、酸素の供給が断たれた際に、自動的に亜酸化窒素ガス（笑気ガス）の供給も断たれる（酸素の供給が全くなくなり笑気ガスのみの供給となると、生体に極めて危険な影響をおよぼす）。 自動車のエンジン制御を二重化した例としてトヨタ・センチュリーはよく知られている。コスト高よりも信頼性を高めることを優先した実装例でもある。また日本国内での市販車で唯一の実装であることが、官公庁の選択時において他社（他車）と差別化する大変大きな訴求ポイントともなっている。搭載されているV型12気筒エンジン制御システムが二重化されており、いずれか片方の6気筒が故障しても走行できる。また燃料ポンプも二重化されている。 例えば近年[いつ?]では、一般的な乗用車においてもサブマイコンの採用やフェイルオペレーション (fail-safe operation) の実装によりフォールトトレラントな設計がされていることが多い。例えば、純正もしくはディーラーオプションのようなカーナビの場合、実際に不具合が発生すると最寄の整備工場を案内しつつ最低限のエンジン制御を行なうなど最低限のサービスを提供可能とするような仕組が実装されつつある。 また、リモコンキー搭載車でリモコンの故障やバッテリー切れなど不具合に備えメカニカルキーを使用可能にし、またキーそのものも用意されることがある。これは「リモコンの不具合は珍しいこととは言えず、特に水没は日常のあらゆるシーンで発生しうる（故障率）」「キーが使えなければ乗車もエンジン始動もできない（重要度）」「コストも高くない」の3つの条件に合致するフォールトトレラントの一つと言える。 オートバイ、特に小排気量車においては2019年現在においてもキックスターターを装備する車両が存在する。これはセルモーターの不調やバッテリーあがりなどセルスタートが使用できない事態においてもエンジン始動が可能になるためフォールトトレラント設計としての側面があるといえる。 フォールトトレラントシステム（故障しても動作するシステム）と滅多に故障しないシステムは違う。例えば、ウェスタン・エレクトリック社のクロスバー交換機システムは40年間に2時間という故障発生確率であり、非常に故障しにくい（フォールト・レジスタント）と言える。しかし、ひとたび故障するとシステムは完全に停止するので、フォールトトレラントとは言えない。