現代はデジタル空間となり、耐障害性などの技術がその重要性から注目されています。システムに耐障害性を組み込むことで、障害が発生しても問題なく動作し続けることが可能となります。耐障害性とは、システムの部品に故障が起きたときに適切に対応する仕組みを指します。
フォールトトレランス(または障害への適応)とは、システムの一部が故障やクラッシュしても、全体が継続して動作できるように、あらかじめ組み込まれた能力を指します。システムを障害に強く設計する狙いは、特定の故障による停止を防ぎ、常にサービスを提供し続けることにあります。
障害に強いシステムは、故障した部品の代わりとなるバックアップを備え、通信の途切れを防ぎます。以下は、その代表的な例です。
障害に強いシステムを設計する最大のメリットは、全体の停止やシステム障害のリスクを低減または回避できる点にあります。また、部品の故障によるシステム停止のリスクも防げます。耐障害性は、航空管制など命に関わるシステムでは特に重要です。
耐障害性システムの主な構成要素は以下の通りです。
これは、メインシステムとは別にバックアップシステムを用意することを意味します。例えば、メイン電源が嵐や発電所のトラブルで停止した場合、代替電源が必要となります。こうした場合、バックアップ発電機などの選択肢が役立ちます。
また、耐障害性における多様性は、バックアップが必ずしもメインと同等の性能を持たない可能性もあることを意味します。場合によっては、メイン電源が復旧するまで、システムの一部機能を削減する必要があるかもしれません。
障害に強いシステムでは、余分なリソースを活用して弱点を補完する場合があります。例えば、必ずしも全てが同時に稼働しなくてもよい複数の電源装置(PSU)を搭載するシステムでは、メインのPSUに障害が出た場合、他のユニットがすぐに代替し、システムは継続して動作できます。
また、システムレベルでの冗長化、すなわち全く別のサーバーシステムを用意する方法も可能です。
レプリケーションは、障害対応のためのより複雑な手法です。単一システムの異なるバリエーションやサブシステムを作り、それらが常に同一の結果を出すよう設計します。もし結果に差異が生じた場合は、選択アルゴリズムを用いて障害のあるシステムを識別、選択します。
レプリケーションは、各コンポーネントごとに複数のプロセッサが連携して同じ結果を生む形や、システム全体で複数のサーバーを同時に運用する形で実装できます。
耐障害性は、どのシステムにも組み込むことができる考え方です。もし一部が停止しても、システム全体が止まらないように設計する必要があります。
耐障害性は、負荷分散やフェイルオーバーの考え方に基づいており、突発的な障害のリスクを除去します。通常、これらの機能は稼働中のシステムに組み込まれ、管理者が変化を検知できるようになっています。
耐障害性は、以下の2つの基本的な動作モデルに基づく仕組みです。
これらの手法は、障害が起きてもソフトがクラッシュしないように設計されています。各手法には特徴があり、長所と短所が存在します。
一般的な手法として、N人の開発者が、複数(N個)のソフトウェアバリエーションを作成し、同時に運用することにより、障害耐性を高めます。
この方法は、初期開発段階で障害を検出することを目的としており、後の複雑な問題を回避します。常にバックアップが用意される一方、作業量や資源を多く必要とするため、時間やコストがかかるという面もあります。
これは、Nバージョンプログラミングに似た手法で、N個のソフトウェアバージョンを作成しますが、各バージョンは異なるアルゴリズムで作られます。また、全てのバージョンを同時に使用するのではなく、順次利用されるため、締切が重視される場合に有用です。
前述の2手法ほど広くは用いられていませんが、この方法は各計算ごとにシステムテストを実施します。データの破損やプロセッサの大規模故障時に最も効果を発揮します。
まず、ハードウェアの障害耐性は、ソフトウェアに比べ比較的シンプルな考え方です。目的は、細かな故障があっても関連する機器が正しく動作し続けることを保証することにあります。主に採用される手法は以下の通りです。
これは、ハードウェアが定期的に自動で自己点検を行う仕組みです。機器は迅速にチェックを行い、問題の原因となる部品を即座に交換します。この自己点検の間隔は前もって設定され、最小限の人手で早期の障害検出と修正が可能となります。
TMRは、重要なハードウェアのバックアップとして、3つのコピーを自動生成します。全てが同時に動作しており、1つに障害が生じた際は他の部品が即座に代替します。この手法は有効ですが、3つの同時運用コピーの作成および管理は手間がかかります。
高可用性とは、システムが停止時間を極力短く保ち、常に稼働し続ける能力を意味します。システムの稼働率、例えば99.999%(ファイブナインズ)が基準となります。
多くの場合、企業は高可用性と耐障害性の技術を組み合わせ、細かな障害やトラブルが発生しても業務を継続できる体制を整えています。両者はシステムの稼働性を示す概念ですが、それぞれ企業にとっての意味合いや重要性は異なります。
耐障害性と高可用性を備えたシステムを構築する際の重要なポイントは以下のとおりです。
Webアプリの運用において、耐障害性は負荷分散ソリューションを用いて、継続したサービス提供と迅速な障害復旧を実現するための考え方です。負荷分散とフェイルオーバーは、耐障害性の基本要素となります。
負荷分散により、複数のサーバーで業務を運用できるため、特定の1台に障害が発生しても問題ありません。多くの負荷分散ツールは、各サーバーに均等に負荷を分配し、いずれも故障や停止に強い状態を維持します。
また、負荷分散は、一部のサーバーに障害が発生した場合にも有効です。例えば、2台の生産サーバーを備えたシステムでは、いずれかに問題が起きた際、負荷分散装置が自動的に役割を引き継ぎます。
フェイルオーバーシステムは、不測の事態に迅速に動作します。システム全体が停止した場合、自動的に別の段階での運用が開始され、メインシステムの復旧作業が進められる仕組みとなっています。
Subscribe for the latest news