障害が起きたときのための設計思想
システムの運用では設定通りに動いていない状況、いわゆる異常系も考慮しておく必要がある。
ヒューマンエラー、システムトラブルも想定した一般的な設計手法に「フェイルセーフ」「フェイルソフト」「フォールトトレランス」「フールプルーフ」がある。
フェイルセーフ(fail-safe)事故ったら止めるように
「事故ると人が死ぬ」ようなシステムで、何か起きたらとりあえず安全に倒すのがファイルセーフだ。たとえば鉄道の信号システムでは故障や停電した場合に赤になって、とりあえず列車を停めて衝突事故を防ぐ。
初出は1958年のThe Delicate Balance of Terrorという論文とされている。熱核弾頭はロケットで発射するのではなく、飛行機で投下したほうがよい。なぜなら、誤って発射したロケットは引き戻せないが、飛行機なら出発後に引き返すように指示できるからだ。これほど「事故ると人が死ぬ」事例も少ないので、初出から最適な用例だと思う。
フールプルーフ(foolproof)誰でも事故らず使えるように
「たとえ間違っても事故らない」ように設計するのがフールプルーフだ。たとえばUSB端子は正しい向きでないと差し込めないので、方向を間違えて壊したり感電しないようになっている。
フールプルーフは1874年頃から使われていたそうだが、明確な出典は確認できなかった。
製造業では「ポカヨケ」と呼ばれている。トヨタのホームページでも単純なミスを防ぐ工夫として「ポカヨケ」が紹介されている。
フェイルソフト(fail-soft)事故ってもなんとか使えるように
「事故っても止まると困る」システムで、シャットダウンするのではなく少ないリソースで稼働を続けるように設計するのがフェイルソフトだ。たとえば航空機ではフェイルセーフで止めたら墜落する。主要なシステムは調子が悪くなっても代替系や手動操縦で何とか着陸できる設計になっており、graceful degradation(段階的機能低下)とも呼ばれる。
こちらも初出は明確ではないが、もともとはフェイルセーフをもじって出来た言葉とされている。wikipedia によると1960年代にNASAが開発したコンピュータで「fail gracefully」(段階的に失敗する)が提唱されていたそうで、同様の意味を示す複数の用語が存在している。
フォールトトレランス(fault tolerance)事故ってもなかったことにできるように
「事故があっては困る」システムで、事故が起きてもそのまま使えるように設計するのがフォールトトレランスだ。たとえば証券取引など、停止により多額の経済損失が出るようなシステムでは、本番環境と同等のバックアップを用意して、故障したらすぐに切り替えてそのまま使えるようにする。
フェイルセーフより前、1951年に設計されたコンピュータからあった設計発想とされている。また、障害を許容する、という意味なので、フェイルセーフ、フールプルーフ、フェイルソフトも含んだ、障害が起きても損害を最小限に抑える設計手法全般を包括する用語として使われることもある。
そこまで一般的になっていない用語として「フールリゾルブ」(fool resolve)がある。入力ミスを自動で修正したり、誤ってデータを消してもバックアップから自動で復元できるような仕組みだ。ユーザーの操作と異なる結果を自動でもたらす仕組みは少し怖いが、今後はAIによってこの仕組みが増えてくるかもしれない。
Discussion