« Emacsのコンパイル | Main | Kerberos »

March 02, 2007

冗長構成の考え方について

冗長構成とは簡単にいうと壊れたときでも予備が動く構成である。最近の言葉で言えばクラスタリング。ネット上に無数にあるWEBサーバはたいてい冗長構成になっていて、ノンストップで動き続ける。いまどき冗長構成になっていないサーバはあり得ない(もちろん個人サーバは別)。

昨年あたりから仮想マシン関連のソフトウェアがいろいろ出てきた。なので、あまり現実的ではないが、やろうと思えば1台のマシンで冗長構成をとることも可能になっている。しかし、仮想マシン技術の進歩はそんな単純なことをするためにあるのではない。一番大きな目的は、CPUの効率的活用だろう。最近の複雑なシステムは非常に多くのスレッドを同時並行で動かすために、マシンの性能を使いきれないことが多い。であれば、1個のCPU上で複数の仮想マシンを動かした方が効率的だ。そもそもハイパースレッディングというCPU技術は、性能の良いCPUにはアイドル時間が多いことが分かっているために出てきた。アイドル時間の原因はCPUとメモリの間のアクセスが非常に遅いことによる。CPUにはデータに1加算する命令が必ずあるが、これをレジスタに対して行なうのと、メモリに対して行なうのでは100倍ほど時間が違ってくる。つまり、メモリを参照し1加算してメモリを書き換えるという動作の間に、ものすごく多くのアイドル時間が発生してしまうのだ。その間に他のことが出来ると考えたのがハイパースレッディングの発想である。ただし、アイドルがいくらたくさんあるといっても、ハイパースレッドをたくさん増やすことは出来なくて、CPUとバスの接続を考えるとせいぜい2個までと思われる。なので、CPUにはまだまだアイドル時間がいっぱいあるわけだ。そうなると、もうアプリレベルでCPUを効率的に使用するなんてことを考えても埓があかないことに気がつく。そこで仮想マシン、つまり1個CPU上で複数のOSを動かすという発想が出てきたわけだ。

アプリケーション・スレッドなんていうのは、CPUから見たらホンの一瞬ずつしか動いていないように見えるのだろうが、OSのカーネルコードであればそうでもない。しかもひとつのCPU上で複数の仮想マシンを動かすのであれば、複数のOSが動くのだから、高性能CPUの空きクロックを使う良い方法になる・・・このような話は、アプリケーションソフトウェアの性能にボトルネックが一切無い、つまり複数のスレッドが相互の動作を一切邪魔しないよう巧妙緻密に練り上げられている場合の話であり、実際のアプリケーションソフトウェアにおいて、そんなことは絶対にあり得ないので、現場で動いているシステムの CPU空きクロックの多さは、間違い無くCPU設計者が想像する以上だろう。

別に私はVMware社の回し者でもなんでもない。ただ、顧客がハードウェアの性能をソフトウェアがちゃんと使いこなしているか気にし始めたときには、ストリームを1バイトずつ読み出すソフトウェアに作り変えるか、仮想化技術を活用するしか選択肢が無いように思えるのである。もちろん性能ボトルネックの原因の多くは使用する市販パッケージのコア部分にある。なので、そのパッケージを担いで開発してしまった以上、性能改善は基本的に無理である。仮りにそれを解決する能力が自分にあったとしても、そこは権利問題でガチガチになっていて手出しが出来ない領域なのだ。

これからのソフトウェアはそのあたりがますます巧妙になってきて、開発サイドが試験をしているうちは良いが、いざ現場に出すとボロボロの結果を招くことが多くなるだろう。つまり、ある条件を超えると動作が豹変するような性能特性を持ったソフトウェアが多くなっていくということである(顧客は金が無いし、そんなところは契約書にも設計書にも規定出来ないから?)。そんなものを扱っているのに、壊れたら代わりに動く予備マシンが無いとダメ(これって要するに思考停止以外の何物でもない)だなんて言っていると、痛い目に逢うような予感がしてならない。だって、予備系は現用系と同じ動きをするだけだから、何の解決にもならない(姑息な時間稼ぎにはなるか?)と思うんだけど。

とにかく、まずは「このシステムは無駄無くCPUを使っています」と胸張って言えるようにならないとダメで、次に考えるべきなのはサービスアプリよりもトラヒック制御を優先し、CPUネックが発生しているのであれば仮想マシンを動的に増やす、内部にIOネックが発生しているのであれば外部からの要求を規制する、といったような動きをさせる必要がある。しかもそういうことをシステムの実装検討の段階から考慮し、パッケージ選定しなければ上手くいかないだろう。

まあ、ハードウェアが冗長になっていなければ納得しないようなオジサンたちは、システム障害が発生すると運が悪かったとあきらめるしかないわけで、素直に顧客に誤りに言ってくれるし、われわれにもお咎めが無いので精神衛生的には良いのだが(笑)。

|

« Emacsのコンパイル | Main | Kerberos »

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/74224/14232376

Listed below are links to weblogs that reference 冗長構成の考え方について:

« Emacsのコンパイル | Main | Kerberos »