雑種路線でいこう

ぼちぼち再開しようか

二重化或いは多数決は有効か

そういえばTANDEMやSTRATUSのようなノンストップ・コンピュータって、ハードやミドルウェアを多重化しててもソフトは多重化できないんだよねー、なんて与太話は昔からしてたんだ。いやソフトの多重化が有効な場合があるのは認めるけど、あまり現実的じゃないね。軌道計算とかをバッチで複数のコードで解いて後から照合するとかはいいとして、取引所やWeb系のオンライン・リアルタイムシステムをソフト的に多重化するのは技術的に現実的ではないか、やってもあまり意味がない。
kakaku.comをはじめとした昨今の不祥事は、真面目なエンジニアリングで本来は防げたもので、原因は適切な規模の投資を行っていないか、人材不足にある。東証の度重なる事故にしても、マトモな運用をしていれば本来は防げたレベルの問題であって、ソフトを多重化する前にやるべきことが山積している。
そんな状況に手をつけずに倍以上の規模のプロジェクトを走らせた日には、下手をするともっと悲惨な結果が待っているのではないか。『あぶないコンピュータ―頻発するコンピユータ事故からの教訓』にも、異なる3つのソフトウェアで検算したシステムで、2台が間違えて誤った解を出してしまうという事例が出てくる。
そもそもオンライン・リアルタイムシステムの場合、多重化しようとすると違う答えが出たときのデータの整合性をどう取るかとか、検算を含めると3重化に必要なハードウェア性能は3倍どころか5〜10倍になってしまう。いまどきのバグはスレッドの競合はじめ、多くは負荷が集中した場合に起こるのであって、ハードウェアに多重化するだけの充分な余裕があれば、そもそも顕在化しないバグも多いはずである。*1
エンジニアリング的に防げないバグもあることは認めるが、事故の背景を踏まえると、二重化や多数決でさえ銀の弾丸ではない。トレードオフを意識してボトルネックから手をつけるのが工学の基本であって、ソフトウェアの二重化、多数決が信頼性向上に資する領域は、現実にはかなり限られているのではないだろうか。

止まると困るシステム、間違えると困るシステムについて、少なくとも人間の生活がかかっている部分に関しては、二重化なり「(ヘテロな)システム同士の多数決」なりの仕組みを導入すべき時期にきていると言えるのではないだろうか。
http://d.hatena.ne.jp/codemaniax/20051211/1134262791 より引用

*1:無論、適切な負荷試験を通じて高負荷時のバグも潰すべきことはいうまでもないが、再現性が低いしデバッグも大変だから、ある確立でこういったバグが残る可能性は念頭に置くべきである。また、運用時にはそういったバグが顕在化しないよう、容量には充分な余裕を持たせるべきではないか