2014年6月に開催された日本ユニシスグループの総合イベント「BITS2014」における、ユニアデックス株式会社戦略マーケティング部エバンジェリストの高橋優亮氏の講演録をお届けする。
仮想化一刀両断!なんでも「2つ」で言いきってみる
「今回はなんでも2つで言いきるという実験をしたいと思います」(高橋氏)
ユニークな切り口で始まったセミナーは、まずサーバー仮想化を導入する動機からズバッと切り込んだ。
動機のひとつは「物理サーバーを減らし、コストを下げたい」という、いわゆるサーバー統合。台数が減れば、使用電力や運用コストが下がるし、エコにも貢献できる。
もうひとつは「サーバー数を変数化し、クラウド的に運用したい」というもの。仮想サーバーにすると、使用状況に応じて自由自在にサーバー数を増やすことができる。改めて言葉にすると、仮想化の目的は意外とシンプルであることが再確認できた。
では、仮想化して起こる問題は? これには2つある。「複雑性が持ち込まれる」ことと、「パフォーマンス」の問題だ。
従来の物理環境に比べ、仮想化環境は複雑である。今まではネットワークケーブルとサーバーとストレージといったシンプルな構成だったが、仮想化はそうはいかない。たとえば、ハイパーバイザーが動いている環境下では、経験と知識を積んだエンジニアでなければ原因を見極めるのは難しく、複雑になればなるほど管理する方も大変になり、導入に踏み込めないのだが、高橋氏は斬!と、ひとつ刀で切り込む。
「複雑性に対する処方箋が必要なんです。それがvSOM(注1)やSCOM(注2)などといった良いツールです。そういったツールを駆使して抽象度を上げて、複雑性を押さえ込むんです。」トラブルが発生し、人の目ではわからないことでも、ツールを使えば識別は可能になる。vSOMやSCOMなどのツールは、「いつ手を打つべきか」、そのタイミングを教えてくれるというわけだ。
仮想化のパフォーマンスにおけるペナルティー?
パフォーマンス問題の本質も、2つに集約される。ひとつは「仮想化したことによる問題」、そしてもうひとつは「集中化によるパフォーマンス低下」である。
仮想化環境とは、物理マシンとOSの間にハイパーシステムを入れ、いわゆる仮想環境を作り出す仕組みだ。余計なものが入れれば、素の状態より速くなるはずがないと考えるのも、自然の流れだろう。しかし、それももう過去の話だ。ハードウエアの性能がアップし、今ではほとんど気にならなくなっている。現状でも遅さが問題になっているなら、新しいマシンとソフトウエアを導入すれば、あっさりと解決する。
難しいのは2つ目の「集中化によるパフォーマンス低下」の方だ。なぜ、パフォーマンスが下がってしまうのか? 最たる原因は何なのか?
「これを理解するには、高速道路の交通渋滞を思い浮かべるのが近道だ」
と高橋氏。高速道路で事故でもないのに渋滞し、いつの間にか解消されたという経験をお持ちではないだろうか?「何にもないのに渋滞になる」原因の最たるものが下り坂から上り坂への変化点だ。一台の車が、運転手でも気づかないほどわずかに減速する。それに続く車は車間距離を保つため、ブレーキをかける。これが積もり積もって、大渋滞になってしまうわけだ。
「実は、サーバー仮想化のパフォーマンス問題は、この渋滞のメカニズムと全く同じ理屈なんです!」
一体どこがネックとなるのか? CPUか? メモリーはどうだろう? メモリーが足りないと、ハードディスクにスワップファイルを書き出し、メモリー領域を確保するスワップアウトやページアウトが始まる。こうなるとマシンの速度は遅くなり、パフォーマンスは10万分の1に低下する。
高橋氏は言い切る。
「スワップしたら負けです! そして、メモリーは可能な限り積んでください!」
では、なぜこのような現象が起こるのか? 答えは「I/0(注3)が遅いから」だ。この問題をなんとかするために、UNIXなどマルチプロセスの最適化については様々な研究がされてきたが、仮想環境での最適化の研究はほとんど進んでいなかった。ところがここ最近、高性能な高速I/O製品が次々とリリースされ、ハイパーバイザーを導入し、ひとつの箱の中で複数のOSが動く環境でも対応できるようになってきた。I/Oを速くしたり、ハードディスクを高速化する製品など、いろいろなタイプのものが出てきた。
仮想化環境の最適運用とは何か?
では、仮想化システムの最適運用とは、一体何なのか? 高橋氏はいきなり結論から切り込んだ。
「エンジニアとお金を出す立場の方とのせめぎ合いです」
管理者の立場からいえば、なるべく無駄なコストはかけたくない。せっかく導入したシステムなのだから、効率よく十分にその性能を使い切って欲しいと考える。一方、エンジニアの立場から言うと、ギリギリの環境での運用はしたくない。もしものときに対処できるように、可能な限り余裕のある環境を作っておきたいと思うのが常だ。それぞれの立場で、それぞれの言い分がある。
わかりやすいようにグラフで表してみよう。縦軸をレイテンシーと待ち時間、横軸を負荷にしたとき、低い負荷で運用したいのが、エンジニアやユーザーの立場、負荷が高くなるギリギリの線まで頑張って使ってくれと思うのが導入を決める管理者の立場だ。そこで、双方が納得するポイントを探す必要がある。レスポンスが悪くなりはじめた手前のポイントを閾値(しきいち)として、その閾値以下で運用する。これが「システムの最適運用」となる。しかし、閾値付近は、かなり敏感なポイントなので注意が必要だ。閾値の手前であれば負荷が2倍、3倍とかかっても、ほとんど変化がないが、ある地点を超えると、とたんにレイテンシーが何倍に増えてしまう。
ほんの少しの超過が、ホストの遅延を増やし、すべてのゲストに影響してしまう。その結果、サグによる大渋滞と同じような状況が発生する。しかも、その渋滞はいつ起こるか予測不能なのだ。では、どう備えればいいのか? 多くの人は「チューニングするべきだ」と答えるだろう。しかし、高橋氏の「奥義」は、ひと味もふた味も違っていた。
パフォーマンスチューニングと高橋の定理(仮)
理想のパフォーマンスを目指してチューニングするには、「何か」と「何か」を交換しなければならない。たとえば、F1カーがあんなにもサーキットで高速で走行できるのは、凸凹道を走ることを一切考えずに作っているからだ。F1カーは悪路走破性を一切捨てたことによって、オンロード高速性を手に入れた。このように「条件を限定する」ことが、パフォーマンスチューニングを行う上で最も重要になる。
データベースサーバーでいうならば、データを読み出すスピードだけに特化したチューニングなら、いくらでも方法がある。しかし、リードライトも50%ずつ、平均的にこなせるような調整は難しい。これを証明しているのが、「There is No Free Lunch《ただの昼食なんてものはない》定理」だ。
特殊用途に最適化された特殊アルゴリズムは、その他の状態のときには、汎用アルゴリズムりもパフォーマンスは落ちるということだ。
「早すぎる(時期尚早な)パフォーマンスチューニングは、諸悪の根源」と、高橋氏。何故ならば、仮想化基盤は運用が熟してくると、統計的効果で自動的に「平均化」されるからだ。
「仮想化製品はデフォルトで「平均的な時を最適に」動くようにチューニングされて出荷されています。要するに「デフォルトこそ最強!」なんです」
どうしたら理想郷へたどり着けるのか?
すべての資源が狙った高い負荷率で、なおかつ安定して稼動している状態こそ、最高のパフォーマンスを発揮する理想の状態である。これなら導入を決定した管理者も現場のエンジニアもユーザーも、このシステムに関わる全ての人がハッピーになることは間違いない。
では、その理想郷に近づくためにはどうしたらいいのか?
「仮想化するなら、自動化しよう!」その理論はこうだ。
仮想化は複雑でそれ相応のお金もかかる。さらに、統計的効果が狙える規模までやらないとメリットが薄いのも仮想化である。そんな大規模で複雑な環境を人手運用しようとすると、大変だし、人件費もかかる。そもそも人間がやることなので間違いも多い。だったら「高機能な運用ツールを導入して、積極的に自動化しよう!」というのが、高橋理論の骨子だ。
「負荷率90%という数値を見ただけでは、それがピンチなのか、正常なのか、我々には判断しづらい。すべては環境次第ですから。でも、日頃からシステム全体を監視しているOps(注3)ツールなら、それが正確に読み取れるんです」
インストールした直後のOpsツールは、ほとんど反応をみせない。しかし、しばらくサーバーがどんな動きをしているのか、情報収集を重ねるうちに、この環境ではリソースをどう使っているかを学習していく。そして、いつもと違う使い方をしたときに、「いつもと違いますよ!」と、教えてくれるのがツールの存在価値となる。
Opsツールを導入することで、エンジニアにとって「2つ」のメリットが得られる。
達人エンジニアには、「より高度なことをするための時間をくれる」のがOpsツールであり、初級エンジニアにとっては、「何が正常で何が異常なのか教えてくれる」、つまり「初級エンジニアを育てる」ツールであるわけだ。
人を「作業」から解き放ち、本来の「仕事」に戻してくれるのが、Opsツールなのだ。何を機械に任せ、人は何をするべきか。その「そもそも」の部分に問いかけをくれるのが仮想化システムなのかもしれない。企業と人と自動化と。いかに使い、いかに共存すべきかを改めて考えるきっかけが得られた。
注1:vSOM(vSphere with Operations Management)
仮想化基盤を構築する「vSphere」と、運用管理を効率化する「vCenter Operations Manager」を組み合わせた仮想環境を可視化する統合ソリューションです。
注2:SCOM(System Center Operations Manager)
組織内に点在するさまざまなサーバーおよびクライアントを、統合的に管理、監視、運用するためのシステム管理製品です。
注3:Ops
仮想化インフラの分析/運用ツール「VMware vCenter Operations(VC Ops)」のことで、仮想マシンやネットワーク、ストレージのパフォーマンスデータを収集し、一元的にGUIに表示できます。