こんにちは。今回は、インフラ設計で必要となる設計要素のうち信頼性設計と冗長化設計の基礎について記事にしたいと思います。ハードウェアを複数台保有して信頼性をあげるのかがポイントとなってきます。
・信頼性を維持するための設計の考え方を理解する
・冗長化設計するまえに知っておきたいことを抑える
フォールトレラン設計
信頼性設計を考える前にフォールトレイラン設計という考え方を理解しましょう。フォールトレイラン とは、システムに障害が発生した時に、正常な動作を保ち続ける能力のことです。
具体的には以下の3つの考え方があります。
フェールセーフ
機械が故障した場合に予備機が動作することにより通常通りのシステム運用を行えること。
フェールソフト
システム故障時においては、 障害箇所をり離し、システムの機能や処理能力を落としながらも停止することなく機能を部分的な機能維持することです。
フールプルーフ
これは人間は作業ミスをする前提で、ユーザがミスを起こさないための設計です。例えば入力制限や、「本当に実行しますか?」のようにワンクッションおく機能を具備することです。
フールプルーフはアプリケーションよりの考えのため、この記事ではフェールソフトとフェールセーフについて記載します。
(前提)冗長化設計をする前に知っておきたいこと
冗長化設計を考える前にまず以下3点を頭に入れて欲しいです。
- 信頼性が100%がシステムは存在しないこと
- システム全体の可用性は機械だけではなく運用整備含めて実現する
- 冗長化するほどコストがアップすること
まず信頼性が100%がシステムが存在しないのは、単純に100%動き続ける機会は存在しないためです。AWSなどでも高信頼として99.9999・・・など言っていますが、100%ではありません。それは壊れない機械が存在しないためです。
運用手順含めて可用性を実現するというのは、信頼性100%の機械が存在しないことに繋がります。100%壊れない機械が存在しない上は、壊れてしまうことを前提にどんなに冗長化していても対処運用整備はしておく必要があります。
最後のコストはあたりまえですが、冗長化すればするほどコストはあがります。ハードウェア・ソフトウェア費用ばかりに目が行きがちになりますが、冗長化すると設計も複雑になり、試験も複雑になるので人に関するコストも増加するので注意してください。
まずは冗長化すべきか考える
まずすべての機器を冗長化する必要はありません。冗長化が必要か見極めて行いましょう。見極めるためのポイントは以下です。
- システムの重要性(ミッションクリティカル性など)
- 許容されるサービス停止許容時間
例えば航空管制や証券のシステムなど社会インフラ的なシステムは停止は許されません。そのため、冗長化が必要となります。一方で自社内のちょっとしたツールであれば止まっても大きな問題はないでしょう。だから冗長化しないという考えです。そのシステム(機器)が停止した場合にどのくらい影響があるのか確認しましょう。
加えてサービス停止許容時間も確認しましょう。例えば5時間までなら停止が許容されるシステムで、手配含めたハードウェア交換が2時間で済むなら別に冗長化する必要がありません。壊れてから手配開始すればよいのです。このあたりはSLAという形でユーザサイドと合意をとる必要があります。
少し長くなったので前編はここまでとします。後編では具体的な冗長化構成の種類を解説します。