フォールト‐トレランス【fault-tolerance】
フォールトトレランス
フォールトトレランスとは、システムに障害が発生した場合にも正常に機能し続けることである。耐障害性などと和訳されることが多い。
通常のコンピュータは、システムの一部に支障を来たすと機能が停止してしまう。大規模なシステムやミッションクリティカルな業務のシステムには障害の発生は許されない。そのため、システムにある程度の冗長性を持たせることによって異常を回避する仕組みがとられる場合がある。例えば電源を多重化したり、ハードディスクを多重化したり(RAID)、無停電電源装置(UPS)を用いたりすることで、フォールトトレランスなシステムを実現することができる。
フォールトトレランスなシステムを構築する技術は、フォールトトレラント技術と呼ばれる。フォールトトレラント技術を用いたコンピュータはフォールトトレラントコンピュータと呼ばれる。フォールトトレラントコンピュータは耐障害コンピュータ、無停止コンピュータ、ノンストップコンピュータなどとも呼ばれる。サーバーの場合は特にフォールトトレラントサーバー(無停止型サーバー)などと呼ばれる場合もある。
フォールトトレラントと同様の概念には、フェイルセーフやフェイルソフトなどがある。フォールトトレランスは異常が生じても正常に機能することを意味するもので、フェイルセーフは人為的ミスによって他人に被害が及ばないようにする防止線のようなニュアンスがある。
フォールトトレランス
【英】:fault tolerance
概要
システムの一部に故障が発生しても, 全体としてはそれに耐える様な特性のこと, あるいは, その様な特性を実現するための設計・運用のアプローチのことをいう. フォールトトレランスの特性は, 故障が起こることは不可避であるという立場にたち, 冗長構成, 誤り検出, 誤りマスク, 再構成, 一貫性回復などの技術をあらかじめシステムに導入することで実現される. フォールトトレランスと対峙する概念にフォールトアボイダンスがある.
詳説
高信頼化システムを実現するための伝統的な手法のひとつは, システムを構成する個々の要素の信頼性を向上させることであり, これはフォールトアボイダンス (fault avoidance) とよばれる. 一方, いかに構成要素の信頼性が高くとも, 故障は本質的に避けられないものであるという前提に立ち, それらの要素またはシステムに, 故障に耐え得るような特性を持たせようとする手法が研究されてきた. この高信頼化手法がフォールトトレランス (fault tolerance) である. 本項では, フォールトトレランスの概念とその実現手法について述べる.
故障が発生しても, システムの機能に全く支障をきたさないことが, 理想的なフォールトトレランスの特性であるが, 機能の低下をシステムのある範囲だけに留める{フェイルソフト} (fail soft) や, 安全な状態で機能を停止するフェイルセーフ (fail safe) などの特性まで含めてフォールトトレランスという. この様な広い意味でのフォールトトレランスは, コンピュータシステムの普及とともに重要視されるようになり, 現在, フォールトトレランスは, 主としてコンピュータシステムの耐故障技術として認識されている.
ラプリエ (J. C. Laprie) は, フォールトアボイダンスとフォールトトトレランスを包括するディペンダビリティ (dependability) という統一的な概念を提案した [1, 2, 3]. それは, 「コンピュータシステムのディペンダビリティとは, 実行された仕事 (service) がどの程度正しく行われているかを明らかにするための品質 (quality) を示すものである」として定義された. 図1 に, ラプリエの提案した概念と用語の枠組を示す.
![]() |
図1:ディペンダビリティの概念と用語の枠組 |
ディペンダビリティを阻害する要因として, フォールト (fault) , 誤り(errors), 障害 (failures) の3つが示されている. フォールト (または故障) とは, システムの機能損失や不具合などの原因をいい, 従来の故障の概念に, ソフトウェアのバグやオペレータの操作ミスまで含めた広い意味の用語として定義される. そして, フォールトが表面化してシステム内部に不具合が生じることを誤りという. また, その誤りが, システム外部のユーザ等に認識されたとき障害となるのである [1]. 階層的なシステムでは, これらの用語の関係は再帰的であることに注意したい. 例えば, あるサブシステムに発生した誤りは, そのサブシステムと外部との接点において障害として認識されるが, 同時にその障害は, サブシステムを含むシステム全体にとっての誤りをもたらすフォールトでもある. なお, これらの用語の定義は, フォールトトレランスの研究分野では広く認知されているが, 日本工業規格 JIS X 0014 (信頼性, 保守性及び可用性) 等の定義とは異なることを付け加えておく.
さて, フォールトトレランス技術とは, 誤りが障害として認識されるまえに, それを検出してマスク (または隠蔽) する技術 (masking), あるいは, マスクできない場合でもその影響をできるだけ狭い範囲に限定し, 速やかに正常状態へ回復させる技術であるといえる. この様な特性は, 基本的に何らかの冗長性 (redundancy) を導入することで得られる. 冗長化の対象となる計算機資源は, ハードウェア, ソフトウェア, 時間の 3 つに分類できる [2]. ハードウェアとソフトウェアの冗長化の多くは, 同一の構成要素を複数個用いることで実現され, 時間についての冗長化は, ひとつの要素を使って同じ処理を繰り返すことで実現される.
誤りを検出するためには, 例えば, 対象となるハードウェアを二重化冗長構成して結果を照合したり, 誤り検出のための冗長符号を用いたりする. そして, その誤りをマスクするために, TMR (triple modular redundancy) や バージョンプログラミングなどの多数決冗長方式が用いられる. これらの冗長性は, 静的冗長 (static redundancy) と呼ばれる.
誤りのマスクに失敗して障害が発生すれば, システムの回復技術 (recovery techniques) が適用される. まず, 例えば待機冗長方式によって, 障害の認められたハードウェアを交換するなどの再構成が実行され, 続いてシステムの論理的一貫性を回復するために, ロールバック等のソフトウェア冗長が用いられる. これら障害回復のための冗長性は, 動的冗長 (dynamic redundancy) とよばれる.
[1] J. C. Laprie, "Dependable Computing and Fault Tolerance: Concepts and Terminology," Digest of Papers FTCS-15, (1985), 2-11.
[2] 当麻喜弘監修, 向殿政男編集, 『コンピュータシステムの高信頼化技術入門』, 日本規格協会, 1988.
[3] 向殿政男編集, 『フォールト・トレラント・コンピューティング』, 丸善, 1989.
[4] 南谷崇, 『フォールトトレラントコンピュータ』, オーム社, 1991.
信頼性・保全性: | フェイルセーフ フォールトアボイダンス フォールトデバッギング フォールトトレランス ベイズ信頼性 ベイズ信頼性実証試験 ベイズ推定 |
フォールトトレラントシステム
![]() | 出典は列挙するだけでなく、脚注などを用いてどの記述の情報源であるかを明記してください。 |
フォールトトレラントシステム(Fault tolerant system)は、その構成部品の一部が故障しても正常に処理を続行するシステムである。本項目はフォールトトレラントシステムの特定の実装方法に関して記述する。一般的な理論についてはフォールトトレラント設計を参照されたい。
概要
障害が発生した場合、単純な設計のシステムでは少しの障害でも全体が停止するが、フォールトトレラントシステムでは完全に機能を保ったまま処理を続行するか、障害の重大性に応じて機能を低下させながらも処理を続行する。フォールトトレラント性は連続稼働が求められるシステムや人命に関わるシステムで特に求められる。
フォールトトレラント性は個々のマシンの特性というだけではなく、マシン間の連携についての規則の特性でもある。例えば、TCP はパケット通信ネットワーク内に不完全なリンクや高負荷のリンクがあっても信頼性の高い双方向通信ができるように設計されている。これは受信側でパケット喪失、パケット二重化、順序変更などがあるものとしてプロトコルが設計されているためであり、結果として通信性能が低下してもデータの正確性が損なわれないようになっているのである。
データ形式も同様な考え方を当てはめることが出来る。例えばHTMLは下位互換を維持するよう設計されているため、新たな機能を使ったHTMLを古いブラウザが読み込んだとき、それを処理できないものとして捨てるのではなく理解できる範囲で表示することができる。
フォールトトレラントシステムにおける障害復旧はロールフォワード(roll-forward)とロールバック(roll-back)に分けられる。システムに障害が発生しエラーとなったとき、ロールフォワード復旧ではその時点のシステム状態で復旧を行い、処理をさらに先に進める。ロールバック復旧ではシステム状態を少しだけ前に戻して(例えばチェックポイントを使って)そこから処理を再開する。ロールバック復旧では、チェックポイント(戻す地点)と障害発生地点との間の処理は冪等(何度実行しても一回実行したのと同じ)でなければならない。いくつかのシステムはエラーの種類やエラー発生箇所によってロールフォワードとロールバックを使い分けている。
個々のシステム内では、フォールトトレランス性は例外的な状態を想定してそれに対処できるようにシステムを構築することで実現される。また、一般に自己安定性を持たせることによってシステムがエラーのない状態に収斂させることでフォールトトレランス性を実現する。しかし、システム障害が重大でそれに対処するのに非常にコストがかかる場合、よりよい方法は何らかの二重化をすることである。
フォールトトレラントシステムに求められること
フォールトトレラントシステムに求められる基本的特性は以下の通りである。
- 単一障害点(single point of failure)がないこと(障害に対して全体の障害とならないよう対策が施されていること)
- 単一故障点(single point of repair)がないこと(ハードウェア故障についても同様)
- 障害部品の隔離ができること
- 障害の伝播を防ぐこと
- 代替モードがあること
さらに、フォールトトレラントシステムは予定されたサービス停止と予期しないサービス停止の両方を尺度として使うことができる。通常、これらはアプリケーションレベルでの話であり、ハードウェアレベルの話ではない。これらを考慮した値を可用性と呼び、パーセントで表す(つまり、全時間のうち、サービス停止していない時間が何パーセントか)。99.999% の可用性を保証されたシステムは、統計的に99.999%の時間稼動し続けるはずである。
二重化によるフォールトトレラントシステム
二重化(多重化、冗長化)によるフォールトトレラント性は三つに分類される。
- レプリケーション:同じシステムの複製を複数用意し、それら全部に同じ処理を並列に実行させ、定足数を満足した結果を正しい結果として採用する。
- 冗長性:同じシステムの複製を複数用意し、障害が発生したら予備のシステムに切り替える。
- 多様性:同じ仕様の異なる実装のシステムを複数用意し、レプリケーションのようにそれを運用する。この場合、各システムが同じ障害を発生することがないと考えられる。
RAIDは冗長性を活用したフォールトトレラントな記憶装置の例である。
ロックステップ方式のフォールトトレラントマシンは各部分を多重化して並列して動作させる。多重化された各部分はどの時点で見ても全く同じ状態でなければならない。同じ入力を与えた場合に同じ出力が得られることが期待される。多重化部分の出力は多数決回路に集められ比較される。各部品を二重化したマシンはdual modular redundant(DMR)と呼ばれる。この場合、多数決回路は結果が異なっているということしか分からないので、復旧は別の方法で行う必要がある。各部品を三重化したマシンはtriple modular redundant(TMR)と呼ばれる。この場合の多数決回路は比較結果が2対1になったときにエラーを判定するので、正しい(と思われる)結果を出力することができ、エラーと判定された結果を捨てることが出来る。その後、エラーを発生させた複製部品は故障したものとみなし、多数決回路はDMR状態に移行する。このモデルはもっと多くの複製についても当てはめることが出来る。
ロックステップ方式のフォールトトレラントマシンは簡単に完全同期させることができ、各複製部品は同じクロックで同期して動作する。もちろん、各複製をクロック同期させないロックステップシステムも構築可能である(多数決回路で待ち合わせる)。(訳注:ただし、クロック同期しない場合、故障によって出力を多数決回路に送れなくなった部品をどう扱うかが問題となる。)
複製を同期させるには個々の内部状態が一致していなければならない。リセット状態などの同じ内部状態からいっせいに動作を開始するのである。一方で、複製間で状態をコピーするという方法もある。
DMRの一種にpair-and-spareがある。ふたつの複製部品がロックステップで同じ処理を行い、多数決回路が相異を検出したらエラー信号を出力する。もうひとつの二重化システムが全く同じ処理をしていて、ふたつの二重化システムの出力を比較してエラーとなっていない方を採用する。pair-and-spare では云わば四重化であって TMR よりも冗長だが、商用システムで採用された例もある。
単一故障点
システムの障害が発生し、何らかの修理が必要となったとき、修理している最中でもサービスが続行可能でなければならない。あるいは、ソフトウェアの障害でパッチを当てる場合も同様である。
障害部品の隔離
障害が発生したとき、その発生箇所を特定し、隔離できなければならない。このため、独立した障害箇所特定のための機構が必要となる。
障害の封じ込め
障害が発生すると、それがシステム全体に伝播していき、システム全体が障害となることがある。例えば、通信関係で障害が発生すると、不正なパケットが大量に発生してネットワーク全体の回線容量を消費し、結果としてサービス不能となる場合がある。このような場合に障害箇所を隔離して、システム全体に影響が及ばないようにする必要がある。
代替モード
障害によってはシステム(あるいは操作者や結果)を危険にさらす可能性がある。これを防ぐため、ミッションクリティカルなシステム(兵器システム、油圧機械など)はセーフモードを備える。これはインターロック機構やソフトウェアで実装可能である。
参考文献
- Brian Randell, P.A. Lee, P. C. Treleaven (6 1978). “Reliability Issues in Computing System Design”. ACM Computing Surveys (CSUR) 10 (2): 123–165. ISSN 0360-0300 .
- P. J. Denning (12 1976). “Fault tolerant operating systems”. ACM Computing Surveys (CSUR) 8 (4): 359–389. ISSN 0360-0300 .
- Theodore A. Linden (12 1976). “Operating System Structures to Support Security and Reliable Software”. ACM Computing Surveys (CSUR) 8 (4): 409–445. ISSN 0360-0300 .
関連項目
- ビザンチン将軍問題
- コンピュータ・クラスター
- 多層防御
- プロセスグループ
- トランザクション処理
- 信頼性設計
- 誤り検出訂正
- タンデムコンピューターズ
- ストラタステクノロジー
- フォールトアボイダンスシステム
外部リンク
- フォルト トレラント サーバーとは - マイクロソフト社のWeb
- Dependable Computing - 電子情報通信学会の研究会(フォールトトレラントシステム研究会から改称)
- Fault Handling and Fault Tolerance — ソフトウェアおよびハードウェアにおけるフォールトトレラント技法に関する文章
- Article "Experiences, Strategies and Challenges in Building Fault-Tolerant CORBA Systems" by Pascal Felber and Priya Narasimhan
- Article "Dependability And Its Threats: A Taxonomy" by Algirdas Avizienis, Jean-Claude Laprie, B. Randell
- Tutorial "Software Fault Tolerance: A Tutorial" by Wilfredo Torres-Pomales
- HPC4U - EU で行われているグリッドコンピューティング向けのフォールトトレラント技術開発プロジェクト
- HP NonStopサーバ
- 日本ストラタステクノロジ
- fault toleranceのページへのリンク