仮想化
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で正しく動作しているコンテナをそのままコピーしてサーバーへ持っていき、動作させるということが可能になる。
