
仮想化
5
.
仮想化の話の前に、コンピューターのリソース(CPU、GPU、主記憶装置、補助記憶装置等)について話をします。
通常、アプリケーションサーバーやDBサーバーを設置する際には、利用者が最も多くアクセスする時間帯、もしくは多くの処理要求がある時間帯、いわゆる”ピーク時”の負荷に合わせて、どのくらいのコンピューター・リソースの質と量が必要となるかを見積ります。必要なリソースを見積もる際にはぎりぎりでは見積もらず、ある程度の余裕を持たせて見積もります。
ピーク時にコンピューター・リソースが足りなくなると、利用者がサービスにアクセスしづらくなったり、サーバー自体がダウンしてサービスが止まったりします。最も負荷のかかるピーク時に合わせてリソースを用意するため、ピーク時以外の閑散期には、リソースの状況には空きがあることになります。
このようなときにリソースを有効活用するために生まれたのが、「仮想化」と呼ばれる技術です。通常は1台のコンピューターの中には(プログラムを実行するための)1つの実行環境しか用意できませんが、仮想化を行ったコンピューターには1台の中に複数の実行環境が用意できます。このようにすることによって、1台のコンピューターのリソースを複数の実行環境で共有することが可能になります。仮想化の技術が発達したことにより、システムの基盤をクラウドサービスで実現できる時代が始まりました。
仮想化には、以下のような3つの型があります。
・ホスト型
・ハイパーバイザー型
・コンテナ型
<ホスト型の図>
ホスト型は、ホストOSとなる層の上に「ホスト型仮想化ソフトウェア」と呼ばれるソフトウェアをインストールし、その仮想化ソフトウェアの上に複数のゲストOSをインストールすることができます。それぞれのゲストOSの層の上には、異なるアプリケーションプログラム実行環境やプログラムがインストール可能です。ゲストOSから上の層を一まとめにして“仮想マシン”と呼びます。
ホスト型は、既存のコンピューターに大きな変更を加えることなく利用できるのがメリットです。その代わり、ホストOS・ゲストOSが重なって動作するため、処理が重くなります。また、ゲストOSはホストOSの影響を受けることになります。
<ハイパーバイザー型の図>
ハイパーバイザー型は、ホストOSなしにハードウェア層の上に直接「ハイパーバイザー」と呼ばれる仮想化ソフトウェアをインストールします。基本的な考え方はホスト型と同じですが、ホストOSがない分、ゲストOSからハードウェアを直接操作することができ、ホスト型に比べると高速に動作します。その代わり、扱いが難しく、正しく運用するためにはホスト型よりも高い専門性が要求されます。
<コンテナ型の図>
コンテナ型は、ホスト型やハイパーバイザー型とは大きく異なっています。ゲストOSを使用せずに、コンテナ管理・自動化を行うためのソフトウェアをインストールして、複数のアプリケーションプログラム実行環境を用意することができます。このときのアプリケーションプログラム実行環境およびその上で動作するプログラムを1つにまとめた箱のことを“コンテナ”と呼びます。コンテナ管理・自動化を行うためのソフトウェアとして有名なのが、DockerとKubernetesです。
ゲストOSがない分、軽快に動作し、なおかつ異なる環境へのコピーが容易になります。
用途としては、自分が開発したプログラムおよびプログラムが必要とする環境を“コンテナ”として1セットで扱い、それを他人が用意した環境へ持っていってそのまま動作させることが可能になります。
コンテナがない環境では、プログラムを動作させるための環境(OS・その他の必要なソフトウェア)を自分で予めインストールして設定し、それが完了した後に目的のプログラムを配置して動作させます。コンテナがある場合は、自分で環境を用意・設定する手間を省くことができます。従って、自分のPCで正しく動作しているコンテナをそのままコピーしてサーバーへ持っていき、動作させるということが可能になります。