August 13, 2012
自分がかつてやってきた仕事について、ミッション・クリティカルというネタを考えていた。このエントリーは、若干自分ブレストの意味も兼ねて、ミッション・クリティカルについて考えてみたいと思う。
ミッションクリティカルという言葉は、よく基幹システムの世界で使われる。24時間365日稼働することが前提になっている重要なシステムは、ミッション・クリティカルなシステム、と呼ばれる。
自分は、半導体系の生産装置の制御のエンジニアだったので、その時の経験で言うと、万が一、火災が起きそうなときに適切に装置が止まるか、ということや、人がコンベヤに挟まれた時に如何に最小の被害で装置が停止するか、など、人の命を守ることに責任を持つ設計をすることがミッションクリティカルな業務だと考えている。
なので、SIの人から見るミッションクリティカルの感覚とはちょっと違うかもしれない。
ネットで調べるとこの言葉は、「「ミッションの実施・維持・完遂」を最重要視することを表す形容詞。」と書いてあるサイトがある。
更に、もう少し曖昧な表現で「一番大事なことを守る発想」を「ミッション・クリティカル的」として考えてみたいと思う。
安全面で言うと、ミッション・クリティカルな設計をするときに一番大事なことは、いかに自然法則に法って論理的に安全を守れるか、というのが割と基本形だ。
例えば、
「スイッチが切れた時にシステムが暴走しないように安全側に動作する」
「何かあった時に、必ずスイッチが切れるように事が起きる」
ようになっていれば、例えばコアのコントローラーが暴走したとしても、それによって例えば、熱源となるヒーターが止まらなくなったとしても、別の装置が物理的にヒーターの電源をシャットダウンしてくれれば、最悪の自体は基本的に起きない。
これがシンプルな仕掛けで実現されていればいるほど安全と言える。
後から人の手が入る可能性があるシステムでメンテナンスが難しく、後から安全が脅かされることが前提になってるような設計や実装はクソだからだ。
これをインターネットのエンジニア向けに翻訳して、発想面での重要性を伝えることを考えてみたが、例えば、whileループの危険性だとか、プログラム言語に変換して説明するのはアリだと思った。
つまり、何か任意のバグを後から作りこんでしまった時にシステムが暴走して、サービス全体が停止するようなプログラムの書き方はダメで、最低限エラー画面には飛んで気がつくようにしましょ、とか、そういうことだと思う。
しかし、稀にこういう意見は衝突をする。そういう人の意見は、大体こうだ。
「後からミスした奴が悪い(プロ意識が低い、技術力が低い、、など)。」
人間は必ずミスをする。それはついぞ最近起きたレンタルサーバーの事故だってそうだし、原発系の事故は概ね人為的問題だ。
ただ人為的な問題が起きた時に、システムが適切に停止しないというのは、システムの設計の問題であることも多い。
例えば、原発は考え方として冷却水の循環が止まったらアウトというのは、如何にも人間に優しくない。自然法則では止められないものを作り、安全に維持するために正常系として動く冷却装置が必要というのは、安全装置の考え方として、いささか極論だったように思える。
確かに、すべての安全装置がすべてを助けることは無理だ。僕がかつて作っていた装置についても、安全確認用のセンサーが1つで、そいつが壊れたら危険なのであれば、2つつければ事故率は下がる。しかし、100%安全というわけではないので、厳しい安全基準の会社だと3つセンサーをつける。
それでも100%安全かと言われればそんなことはない。相当運が悪くなければ現実的に問題は起きにくい。しかも一箇所のセンサーのコストが3倍かかる。軍用基準などに乗っ取ったセンサーだと値段は半端ないので、一つの安全装置のセンサーのために沢山のコストをかけても、従業員の安全や機械損失が見逃せないという理念になっていれば、このコストをかけられる。
少なからず、世の中では妥協があって、コスト、確率論、過去の実績によって、「これぐらいなら大丈夫だ」というのが社会的コンセンサス、もしくは企業の安全基準として存在し、ミッションクリティカルに見合う設計の常識というのが形作られる。
無論、その社会的コンセンサスを超える不幸があった場合は、
「力は出し切った。頑張ったけどダメだった」
ということで、仕方ないということで正当化ができる。
しかし原発に関しては、発電装置たる原発が、自分自身の維持のために電源を必要とするというジレンマは、結構厳しかったですね。そんなシステムだということを全く知らなかった。
原発については「頑張ってたけどダメだった。あの地震はさすがに想定外」と言うのは、ちょっと厳しいと思う。
ただ、しばしばマーケティング優先で、不思議なシステムが世の中には存在している。
例えば、HDDの容量を増やす方法としてRAID5という仕組みがある。
HDDを沢山並べて、一つのディスクとして見せる方法だ。
RAID5が危険なのは、たった2台のドライブが壊れると全体が死ぬ仕組みなのに、ドライブの数をいくらでも増やして容量を増やすことができるところ。
大容量を実現するためにディスクを増やせるので、増やせば増やすほど危険率が跳ね上がる。しかも、RAID再構築中の死亡が無視できないと言われていて、一台壊れた後の再構築中の高負荷状態で二台目を道連れにしてしまうという笑えないことが起きる。
そういうシステムの問題が、あまり考えられることなく、まかり通ってるのがITの不思議なところで、売れてるから信頼出来るという考え方ではなく、もう少しミッション・クリティカル的な発想で考える必要はある。
RAID5システムを安全にするならNASなどをもう一台設置してミラーリングしておく必要はあると思う。多少ロールバックしても良いならテープバックアップの世代を増やしておくでも良いだろう。ただデータセンターのサーバなら、テープを変えてもらう運用コストをケチらずに。
ストレージ・システムは安くないので、相応の投資が必要なのが現実であって、その投資ができないならやめる勇気も持たなくてはいけないし、技術者は、正しい説得ができなくてはいけない。今ならクラウドの方が良いじゃん、という選択もあるだろう。盲目的にクラウドを信じるのは間違いという言葉は定番の枕詞かもしれないが、RAID5のシングルのNASで眠れない日々を過ごす事態を引き起こす可能性よりは、全然安全性は高いと思う。
今のOSレベルのソフトウエアは複雑になりすぎている。ハードはソフトの一部になってしまい、基本的にOSの電源制御も含めてすべてソフトウエアで動いているのが今時のスマートフォンなどの作り方にあらわれる。物理的に電気を切る方法がバッテリーを抜くという行為に限られるのが特徴的。
OSが継続、安定動作することをミッションクリティカル性とみなすなら、
例えばOSの欠陥に基づくセキュリティホールによるワームやウイルスを防ぐために、ウイルス対策ソフトを入れないと安全なシステムが成立しない、というのは、原発の冷却装置に近い。ウイルス対策ソフトのメーカーに生殺与奪を握られているとも言える。
あとiPhoneとAndroidで言うと、僕はAndroidは苦手だ。
根本的にマルチタスクが許されていて、アプリ単体の作り一つで、バッテリーを大量に消費してしまうことが何故かある。(僕はあまり理解していないが、そういう経験をしている)
これを止めるためにスタンバイ時には通信を停止させてしまうアプリや、アプリを自動的に停止してしまうソフトなどをインストールすることで、思っていたよりも良いバッテリーの持ちになるようだが、所詮、ソフトによる安全装置。
Androidがそこまで完成されてるわけではない、とか、モバイルなので、電波やタスク状態に急峻な状態変更があるのが、おそらく原因なのだと思うのだが、
タイミングによってうまく通信状態を停止できなかったり、アプリが落ちなかったりして、結果、暴走してるのかなんだかわからないが、気がつくとバッテリーが2%しか残ってないとか、本体がめっちゃ熱くなっているとか、そういうことが起きる、
iPhoneの場合は、現状は保守的に作られていて、Androidに影響されマルチタスク動作が一定の機能については使えるようになっているが、原則として今見えているアプリ以外は、停止状態になっているし、マルチタスクは通信やGPSという限られた機能しか許可されていないので、プッシュ通知をアホみたいに使っていなければ、バッテリーがあっという間になくなるということは避けられる。
スマートフォン等のモバイルデバイスにおけるミッションクリティカル性とは、「いつでもどこでも使いたい時に使えること」が「できる限り維持されること」だと思うので、その原則に則って考えると、現時点のAndroidは信用できない、というのが経験則。
ただ、別にこれが売れるとか売れないなどと言ったこととは無関係でAndroidは絶好調に売れていると思うので、ただ単に、僕は好みでiPhoneをメインに使っています、ということになるだけで、それ以上の話は何もない。
しかも電話機能についてはフィーチャーフォンを持ち続けている。
電話機としてのミッションクリティカル性で言えば、フィーチャーフォンが優秀だったからこそ、パソコン発想で自由なiPhoneやAndroidに負けてしまったと考えれば、この考え方に固執することは、毒にもなる。
そもそも、こんなことに気がついているなら、ものすごく信頼性の高いアプリ管理ソフトを作れば良かったわけで、そういうのがエコシステムに繋がっていき、最終的に安定したシステムになっていくことも多々あります。
MS Officeのアプリは、自分が落ちたことを認識してバックアップを復帰する仕組みを作ったのは、別に好きではないけど、問題を認識して頑張ったなとは思います。
そもそも安定したOSを作れば良いから、今からでも作りなおせ、みたいに思うのはビジネス発想として絶対悪で、とにかく前に進んでいけ、というのが正解なのかもしれません。
ただ、たまに原発事故みたいなことが起きるのかもしれませんが。
自分が書いた本に、Androidは、プライバシー面でのセキュリティもザルだから、これがどう評価されるか楽しみだ(心配だ)と書いたが、だからと言ってAndroidが売れない、という自体にはなっていないし、ほとんどのことは消費者は知る由もない。
せいぜい騒がれているのはLINEの電話番号マターの友達管理が、多様な人間関係にフィットしないことがあるくらいで、非常にユーザーフレンドリーな問題だけが、問題になるということだろう。
やっぱりマーケティング視点では、そういうものなんだと思う。
スマホはフィーチャーフォンと比べて「自己責任が求められるOS」と表現されるが、現状の自己責任ではなく、現実には僕も含めて、無知の上に成り立っているし、多分、今後もそうなのだろう。
なんの話か段々わからなくなってきたが、ソフトウエアでなんでも動く時代は、小さなモジュールや、スマホとサーバーの組み合わせなどで全体の系が動くわけだから、とにかく自分の手が届く範囲でのミッションクリティカル性も含めた完成度ってのは常に誰もが意識すべきだと思うし、自分が誰かに話をするとしたら、うまく共有、議論できたらいいなーと思っている。