一部が故障してもシステム全体を停止させず処理を継続できる仕組み。
フォールトトレラントとは、システムの一部が故障しても全体を止めず、処理をそのまま継続できるようにする設計思想のことです。「フォールト=故障」「トレラント=耐える」という意味で、直訳すると「故障に耐えられる」となります。
考え方の前提は「機器はいつか必ず壊れる」というものです。壊れないことを期待するのではなく、壊れることを見越して、同じ役割の部品をあらかじめ複数用意しておきます。1つが倒れても残りが肩代わりするため、利用者は故障に気づかないまま使い続けられます。
身近な例で考えると、飛行機のエンジンが複数あるのと同じです。1基が止まっても残りのエンジンで飛び続けられるように、はじめから余分を持たせておく──これがフォールトトレラントの基本的な発想です。
フォールトトレラントを実現する中心的な手段が多重化(冗長化)です。これは同じ役割の構成要素を二重以上に持っておき、故障した部分を切り離して残りで処理を続けるという考え方です。「冗長=余分を持つこと」を意味します。
多重化される構成要素には、たとえば次のようなものがあります。
・電源:電源装置を2台積み、片方が壊れても給電を続ける
・サーバ:同じ処理を行うサーバを複数台用意する
・ディスク:データを複数の記憶装置に書いておく(RAID=複数ディスクをまとめて冗長化する技術)
・ネットワーク:通信経路を2系統用意し、片方が切れても通信を維持する
故障した部品はシステムから自動で切り離し、健全な側だけで動かし続けます。上の図解では、電源Aが故障しても電源Bが給電を続けるため、システム全体は止まりません。橋を2本かけておけば、1本が通行止めになっても向こう岸へ渡り続けられる、というのと同じ発想です。
どちらも「故障時に止めない」点は似ていますが、性能を落とすかどうかが決定的に違います。フォールトトレラントは性能を落とさず完全に処理を継続することを目指すのに対し、フェールソフトは機能や性能を一部縮小してでも継続します。
| 観点 | フォールトトレラント | フェールソフト |
|---|---|---|
| 故障時の動き | 止めずに継続 | 止めずに継続 |
| 性能・機能 | 落とさず完全継続 | 一部を縮小(劣化を許容) |
| 主な手段 | 多重化(冗長化) | 縮退運転(フォールバック) |
飛行機にたとえると、フォールトトレラントは「予備のエンジンに切り替えていつも通り飛ぶ」イメージ、フェールソフトは「エンジンが減ったぶん速度を落としてでも飛び続ける」イメージです。完全な継続を狙うのがフォールトトレラント、劣化を受け入れてでも止めないのがフェールソフト、と整理すると区別しやすくなります。
多重化があると「故障があっても止まらない」のは、故障した部品を切り離し、残った部品だけで処理を続けられるからです。1つが壊れた瞬間、もう1つが自動的に肩代わりします。利用者側からは「ちょっとどこかに不具合が出た」とすら気づかないことが多いのです。
なぜ切り離せるのか。それは、多重化された各部品がそれぞれ「独立して同じ機能を持っている」からです。電源Bが電源Aと完全に独立して給電できるように設計されているため、Aが壊れてもBだけで問題なく動きます。依存関係がなければ、1つが壊れても他の部品には影響が及びません。
上の図を見ると、多重化ありのシステムでは故障のタイミングでも稼働が途切れていません。一方、多重化なしでは故障中に停止が発生しています。フォールトトレラントの目標は「稼働時間を途切れさせない」こと──多重化はそのための最も直接的な手段です。
多重化すると、システム全体の稼働率(=使える時間の割合)が大幅に上がります。稼働率とは、全体の時間のうちシステムが正常に動いていた割合のことです。
なぜ2重化すると稼働率が上がるのか。それは「両方が同時に故障する確率」が「どちらか一方だけが故障する確率」よりはるかに低いからです。
・単体の稼働率が 0.9(=10%の時間は止まる)の部品を2つ並べると
・両方同時に故障する確率 = 0.1 × 0.1 = 0.01(1%)
・2重化後の稼働率 = 1 − 0.01 = 0.99(99%)
コンビニが閉まっているときでも隣のコンビニが開いていれば目的を達せる──それと同じで、どちらか一方が動いていれば全体は止まらないという仕組みです。フォールトトレラントが「稼働率を高める効果的な手段」として広く使われる理由がここにあります。
Q1.フォールトトレラントシステムの説明として最も適切なものはどれか。
Q2.フォールトトレラントを実現するための手段として最も適切なものはどれか。
Q3.フォールトトレラントとフェールソフトの違いとして適切なものはどれか。