先月の記事でシステムの冗長性について触れましたが、もう少し詳しく書きます。
稼働系と待機系という複数のシステムを用意することによって、つまり多重化することによって耐障害性を高めるのがシステム冗長の基本的な考え方です。
しかし、これにはデメリットもあります。
第一にコストが倍増すること。
本来一つのサービスを提供するために一つのシステムで十分なのに、余分にもう一つ用意しなければならない。
ネットワーク機器も余分に一つ、サーバも余分に一つ、ライセンスも余分に一つ。
さらに運用メンテナンスもしていかなければならないので、それも余分にかかってしまいます。
第二に、せっかく冗長化しているのに実は両系のシステムが同時にダウンするケースが意外と多いということがある。
これは冗長構成を取っているマシンが同一ベンダー、同一OSバージョン、同一プロトコルで揃えていることに起因しており、
そこに内在するバグを踏んでしまうケースが考えられます。
*
ではどうやって克服するのか。
まず単純にコスト面を考慮して、冗長構成を取らないということも一つの方針です。
例えば、開発環境やSTG環境や身内だけが利用する社内システムなどのそれほどの可用性が求められないシステムは、
冗長を取らずにシングル構成を取ってもよいでしょう。
もう一つは、縮退運転を許容することができるかということ。
これは例えば、あらかじめ待機系システムの処理容量を稼働系の1/2で用意しておきます。
いざ障害時に待機系へ切り替わると、平時の半分しかサービス能力が提供できませんが、逆に言えば半分は担保できる。
これが縮退ということの意味です。縮退運転を許容できるのであれば、上記のケースだとコストを半分削減できることになります。
さらにこの考え方をもう少し発展させてみます。
稼働系統を複数用意して、それに対する待機系統をひとつにする。
稼働系ひとつあたりの処理能力と、待機系ひとつあたりの処理能力は同等とします(1:1)。
このケースだと、稼働系ひとつに障害が発生しても縮退にはなりません。
でも同時にふたつ以上の稼働系の障害が発生した場合(二重障害)、ひとつの稼働系に関しては完全なサービスダウン状態に陥ってしまいます。
このように、複数の稼働系に対して一つの待機系を組み合わせる構成を、N+1構成、N+1冗長と呼びます。
稼働系の多重障害が起きるケースが極めて希な場合なんかに、このN+1構成は有効でしょう。単純にNの数だけコストダウンすることができる。
また処理能力の割合に応じて、N+M構成というように稼働系と待機系の比率を変化させてもよいでしょう。
しかし多重障害が発生した場合の影響が極めて深刻ならば、発生する可能性がいくら低くても、
同等の能力を有するバックアップシステムを用意しなければいけないと思います。
例えば、原子力発電所などの大規模な社会インフラなどがこれにあたります。
こういったシステムに対して、コストだけを考慮するのは不適切だと思います。
*
以上のように、システム冗長にも様々なパターンがあります。
・単一構成→シングル構成
・二重構成→稼働系と待機系、Active/Standby方式、Active/Active方式
・複数構成→N+1冗長、N+M冗長
設計者は、求められる要件に応じたシステムを採用すればいいのです。要件に見合った方法を検討しましょう。