#はじめに
この記事は「仮想化とは何ぞや?」という根本的な情報を整理するための記事です。
#前提知識として
仮想化の説明の前にコンピュータの基本的な構造を押さえておく必要があります。
コンピュータは非常に大まかにいうと下記のような階層構造になっています。
高 アプリケーション
| ミドルウェア
| OS
| ファームウェア
低 ハードウェア
アプリケーション:ウェブブラウザのような特定の動作をするプログラムがここに属します。
ミドルウェア:Javaのようなアプリケーションが動作するための環境がここに属します。
OS:WindowsやLinux等がここに属します。
ファームウェア:OSとハードウェアを仲介するソフトウェアがここに属します。
ハードウェア:メモリやCPU、ハードディスクといった物理的な部品がここに属します。
#仮想化とは
「仮想」という言葉について、辞書を引いてみると以下のような説明が出てきます。
実際にはない事物を、仮にあるものとして考えてみること。仮に想定すること。
引用元 デジタル大辞泉
IT業界において「仮想化」とは前述した階層構造において「自身よりも低い層のもの」を「仮にあるもの」として動作させることを言います。
例えば、前述の構成のOSを「仮想化する」という場合、OSより低い層にあたる、ファームウェアとハードウェアを「仮にあるもの」として動作させるということです。
高 アプリケーション
| ミドルウェア
| OS★OSを仮想化する場合
| ファームウェア(仮にあるとする)
低 ハードウェア(仮にあるとする)
#仮想化登場以前
昔はハードウェアとOSは1対1で結びついていました。
コンピュータが1台あるとすれば、その上で動作するOSは1つで、他のOSを動作させようとするなら、OSをインストールし直す必要がありました。※デュアルブートについてはここでは割愛します。
コンピュータの性能が凄まじい速度で向上し、いろいろなサービスがコンピュータの上で稼働するようになりました。その結果として、サービスを提供する側にとっては困ったことが起こります。
OSとハードウェアが1対1で結びついているので、サービスを動かすために必要なOSが複数ある場合、コンピュータ(ハードウェア)も複数必要になるのです。
ハードウェアが複数必要ということは、物理的なモノを置くためのスペースを確保しなければなりません。コンピュータは電気で動きますので、電源も必要です。
結果として、大規模なサービスを展開するためには、コンピュータを買うお金(機器代)、物理的なスペースを確保するためのお金(家賃)、コンピュータを動かすためのお金(電気代)がかなりの金額としてかかることになりました。
#仮想化の登場
かなりの金額をかけてサービスが稼働したとします。
では、サービス稼働後の状況を見てみましょう。
サービス稼働後、当然ですがユーザがサービスを利用すれば、コンピュータが処理をしますので、それだけリソースを使用します。非常に多くのユーザがサービスを利用すれば、ひょっとするとサービスが落ちてしまうこともあるかもしれません。
しかし実際問題として、「非常に多くのユーザ」が「常に」「サービスを利用している」ということはありません。これはつまり時間帯やサービスによっては「コンピュータのリソースが余っている」ということが起こりえるということです。
機器代+家賃+電気代とお金をかけたのに、「使用されるリソースは半分もいかない」
こんな状況を解決するための手段として、「仮想化」が登場/普及しました。
#仮想化は何をしているのか
前述したとおり、「仮想化」とは「自身よりも低い層のものを仮にあるものとして動作させること」です。これによって1台のハードウェア上で複数のOSを動作させることが可能になりました。
ここではOSを仮想化した場合を例に、実際にどんなことをしているのかを説明します。
OSを仮想化する場合、OSより低い層であるファームウェアとハードウェアが仮にあるものとして動作させるということです。
OSが何か処理をする場合、以下のような流れで動作しています。
1:ハードディスクやSSDから必要なデータを読み取る
2:メモリに必要なデータを広げる
3:CPUで処理してもらう
4:処理の結果を受け取る
共通しているのはOSは結果を受け取るまでは、あくまでハードウェア(CPUやメモリ)にお願いしているということです。
非常に雑な言い方ですが、OSからすれば、処理のお願いを聞いてくれて、結果を返してくれるのであれば、その過程はどうでもいいのです。
OSを仮想化する場合は、「あるソフトウェア」がOSからの処理のお願いをハードウェアのふりをして受け取り、結果をハードウェアのふりをして返すということをしています。
この自身より低い層(ここではハードウェア)のふりをしてくれる「あるソフトウェア」を「ハイパーバイザ」と呼びます。ハイパーバイザは以下のようなことをしてくれています。
1:ハードウェアのふりをしてOSから処理のお願いを受け取る
2:ハードウェアに渡して処理をしてもらう
3:ハードウェアから処理の結果を受け取る
4:ハードウェアのふりをしてOSに結果を返す。
#仮想化のメリット
前述した「OSの仮想化」をするとハイパーバイザというソフトウェアがハードウェアのふりをしてくれます。つまりハイパーバイザがハードウェアのふりを頑張ってくれれば、OSを複数動作させられるということです。
ハードウェアとOSは1対1という既存の構成ではなく、1対Nという新しい構成を取れるようになります。以前は10台のコンピュータ(ハードウェア)が必要だったサービスが、リソースさせ足りているならば、3台のコンピュータ(ハードウェア)で事足りるということになりました。
10台から3台に減ることで、機器代が安くなります。さらに使用するスペースが減るので、家賃も減らせるかもしれません。稼働させる台数が減ったことで、電気代も浮くことになりました。
#仮想化のデメリット
仮想化のメリットは前述したとおりです。お金を節約できる可能性が多いにあるということです。
しかし当然、デメリットも存在します。
それは構成が複雑になる分、保守が大変になる可能性があるということです。
OSがハードウェアからのエラーを検知した場合、仮想化以前であれば、そのエラーはファームウェア、またはハードウェアに起因するものとして解析が進められるでしょう。
仮想化後はそこにハイパーバイザというソフトウェアが加わります。
OSとハイパーバイザの相性問題、ハイパーバイザとハードウェアとの相性問題等、解析が難しい部分が出てくることになりました。
これは既存のシステムを仮想化しようという場合に、十分に考慮するべき箇所であるといえます。
#最後に
かなりおおざっぱですが仮想化に関する基礎知識を書き出してみました。
突っ込みどころ等はコメントをいただれば幸いです。