広い意味でのシステム多重化が必要だ
東証のシステムダウンの件でちょいと思ったこと。
停止することが許されない重要なシステムってのは、普通は多重化される。だが、この「二重化」というのがなかなか曲者で、単純に同じシステムを2セット用意すればいいという物でも無かったりする。いろいろ考えなきゃならない点があるわけだ。
本当に二重化すれば故障率は減少するのか?
多重化のための仕組みや手順が追加されるぶんだけ、かえって故障率は高くなったりする場合が往々にしてある。
ハードディスクを多重化しようとしてRAIDを組んだら、RAIDコントローラーがまっ先に死んでしまった……なんてのはたまに聞く話だ。また例えばネットワークの二重化の場合、レイヤー2とレイヤー3の両方で二重化してしまったりすると、その筋の検知パケットがネットワークを乱れ飛び、トラブルの元になる場合がよくあったりする。複数のシステムがあると、システム構成の変更とかアプリのバージョンアップの時とか、運用のミスが出やすくなるのも確かだ。
セットごとに構成を変更する必要はないのか?
通常の故障ではなく、ある製品やサービスがもともと内在している問題が顕在化する場合、これは同じ構成で二重化しても全く意味が無い場合がある。
例えば、同じ通信会社の回線サービスを二本引いても、その通信会社のアクセスポイントに何かあったら結局ネットワークが停止してしまう。
例えば、あるメーカーのある部品のあるロッド特有の問題がある場合(これがよくあるんだ)、同じ構成のハードが何台あっても同時に壊れる可能性がある。
例えば、特定のソフトウエアに問題がある場合も同様だ(特定のwindowsのパージョンの問題とか)。
これらに対応するためには、単純な二重化ではなく、複数の機器で複数の製品やサービスを使い分ける必要があるわけだ。だが、ネットワーク関連から個々のハードウェアまでて、そのメーカーや製品やサービスの組み合わせをまじめに考え始めると、きりが無い。さらに、複数の構成のシステムってのは、テストの手間が2倍かかる事も忘れてはいけない。難しいね。
どの部分を二重化する?
システムという物は膨大なレイヤーの積み重ねからできているわけだ。下は電源や空調、そしてネットワーク機器やサーバの個々の部品から、上はDBとかアプリケーション、一番上にあるのが人間によるシステムの運用体制かな。このどの部分を多重化するかが難しい。
多重化されていたはずのシステムが、予期せぬ電源異常で落ちる場合がある(こないだ空港であったね)。高価なシステム全体が、たまたま二重化されてなかった安価なハブひとつの故障で停止する事もある。ハードウエア関連を完全に二重化したとしても、その上に載っているアプリケーションが同じ物であれば、アプリケーションの更新に失敗したら全体が停止してしまう(今回の東証のシステム障害はまさにこれ)。また、運用体制が貧弱で経験の無い人しかいない時間があると、その時間帯に限って大障害が起こったりする。
かといって、電源から人間まで常時フルセットで2系統用意しておくことは、実際には不可能だし(片系は通常は完全に無駄なわけだからね)。
もっとも重要なのは広い意味での二重化、代替手段の確保
まぁ、この辺は、学問として研究している人もいっぱいいるし、現場で苦労している人もいっぱいいるので、いまさらいうまでもない事なのだが。要するに、システムの多重化ってのは非常に大変な問題なのだが、同時にエンジニアの腕の見せ所でもあるってことだ。
そして、忘れちゃいけないのは、どんなにお金をかけて二重化しても、停止するときには停止するってことだ。したがって、絶対に止まってほしくない重要なインフラのシステムは、広い意味での二重化ということで、かならず代替手段を用意しておかねばならないわけだ。
例えば、東京証券取引所が止まっても、ジャスダックや他の取引所でなんとかなる仕組みを作っておく。当然、どの取引所でも同じシステムが使われていた、なんてのは言語道断だ。
例えば、成田のシステムがダウンしても、羽田を利用できるような管制の運用体制を整えておく。
例えば、大規模なウイルスなどでインターネットが麻痺しても、重要な通信は電話やFAXで行うようマニュアルを用意しておく。
例えば、自衛隊のバッチシステムが妨害されても、米軍とうまく連携しておけるようする。 etc.
こーゆー国政レベルでの大きな設計図を描けるエンジニア役のお役人が必要なんじゃないかな、今の日本には。
| 固定リンク


コメント