従来のコンピュータシステムは、手元にあるコンピュータで実行・保存していました。しかし最近はアプリケーションやデータを個々のコンピュータで実行・保存するのではなく、すべてインターネットなどネットワーク接続されたサーバー上でアプリケーションの実行やデータの保存などを行う「クラウドコンピューティング」という方式が一般的になりました。
クラウドコンピューティングによってアプリケーションやデータの処理が、個々のコンピュータでの処理から、サーバーに集約することができます。そのためCPUやHDDなどのコンピュータ資源の有効活用と集中管理による運用負荷の軽減やセキュリティの確保などの削減が可能になりました。クラウドコンピューティングでは、サーバーに接続するコンピュータをクライアントと呼び、接続するための最低限の機能だけを持っていれば良く、利用者ごとの環境や設定内容はすべてサーバー側に集約されています。そのためクライアントが故障してもデータが失われることはなく、代替機に交換するだけですぐに利用を再開できるというメリットがあります。
クラウドコンピューティングがここまで注目された理由は、なんと言ってもインターネットの高速化と接続料金の低下です。インターネットが高速になり、インターネットを介したデータのやり取りにストレスが無くなりました。さらにそれに反比例するように、インターネットの接続料金が安くなりました。
自社でサーバーを購入し運用した場合、サーバーの購入費と構築費がかかりますし、構築が完了するまで数ヶ月の期間が必要になります。またユーザーが増えるとCPUやHDD、メモリなどの容量が不足し、そのたびに追加の購入が必要になります。このような問題もクラウドコンピューティングを活用すれば、サーバーが必要なときに必要なだけすぐに使用することができます。コストに関してもOPEXとCAPEXを考慮すると、利用の仕方によっては自社でサーバーを運用するよりも安く済みます。自社で運用していると、障害時の交換や、ソフトウェアの入れ替えなどの運用費用、サーバーが古くなったときの更改費用が発生しますが、クラウドコンピューティングの場合はそれがありません。
また、クラウドコンピューティングをインターネット上に置くことで、仕事のスケジュールなどを会社でも自宅でも確認することができるようになります。もちろんパソコンやスマートフォンなどのさまざまなデバイスからアクセスしても同じ情報を確認することもできます。このような様々なメリットから、クラウドコンピューティングが爆発的に普及してきています。
クラウドコンピューティングはサービス形態で大きく3つに分類することができます。
パブリッククラウド(public cloud)
不特定多数の利用者を対象に提供しているクラウドコンピューティングサービスで、Amazon Web Serviceなどのクラウドプロバイダーが提供しています。ユーザはハードウェアや通信回線などを自分では所有せず、クラウドプロバイダーが提供するパッケージされたクラウド環境を共有しながら使用します。
プライベートクラウド(private cloud)
企業内または共通の目的を有する企業群を対象に提供しているクラウドコンピューティングサービスです。プライベートクラウドには、サーバを企業が所持し、クラウドの技術を活用して現在のコンピュータリソースの最適化を行うオンプレミス型と、サーバはクラウドプロバイダーが提供し、システムの一部分を企業が占有し利用するホスティング型の2種類があります。
ハイブリッドクラウド(hybrid cloud)
ハイブリッドクラウドは、パブリッククラウドとプライベートクラウドを組み合わせて利用するクラウドコンピューティングサービスです。ハイブリッドクラウドはシステムの特性に応じて、個人情報などを扱うシステムはプライベートクラウドで運用し、データの処理を頻繁に行ったり一時的に大量のリソースが必要になるシステムをパブリッククラウドで運用することで、それぞれのメリットを最大限に活かすことを目的とした方法です。
クラウドコンピューティングは、コンピュータリソースを提供するものもあれば、OSまで提供するもの、あるいはアプリケーションまで提供するものなど利用者のニーズによって、様々なものを提供しています。そのためクラウドコンピューティングがどこまでをサービスとして提供するのかを大きく3つの定義で分類しています。
IaaS(Infrastructure as a Service)
IaaSは「イアース」や「アイアース」と呼び、ネットワークとハードウエア(CPU・メモリー・ハードディスク)、OSまでを提供するサービスです。ユーザーはOSがインストールされたサーバー環境を提供され、その上にユーザーが必要とするアプリケーションなどをインストールして利用します。通常のレンタルサーバーと提供形態は変わらないように見えますが、大きな違いはレンタルサーバーは物理的なサーバーを提供するのに対し、IaaSは後述する仮想化技術を使ってユーザーが必要とするリソースを提供することができるという点になります。AmazonのEC2などがIaaSに当てはまります。
PaaS(Platform as a Service)
PaaSは「パース」と呼び、IaaSの構成に加えてWebサーバーやWebサーバーなどのミドルウェアを提供するサービスです。PaaSはOSを直接操作することはなく、ミドルウェアのみを操作することになるため、OSの各種設定や運用作業が不要になります。Google App EngineやWindows AzureなどがPaaSに当てはまります。
SaaS(Software as a Service)
SaaSは「サース」と呼び、PaaSの構成に加えてメールやスケジュール管理などのアプリケーションまでを提供するサービスです。Gmailに代表されるGoogle AppsやSalesforceなどがSaaSに当てはまります。
仮想化とは、サーバやストレージ、ネットワーク機器などの物理的な構成にしばられずに、論理的な構成でシステムを使うことが出来る技術です。「物理的には1台のサーバを、あたかも複数のサーバに見せる」、「複数台のサーバをあたかも1台のサーバのように見せる」といったことを可能にする技術を仮想化と呼びます。
仮想化を使うことで、発生するメリットには以下のようなものがあります。
通常、サーバやネットワーク機器を選定する際、将来の拡張性を考慮して余裕を見込んでシステムを導入します。そのため普段はほとんどリソースを使用することなく運用することになるため、「ムダ」が発生してしまいます。仮想化を活用することで、1台の機器を複数の機器として利用することが出来るため、全体の利用効率を向上させることが可能になります。
例えば昼間だけリソースを使用するシステムと、夜だけリソースを使用するシステムを1台の機器で仮想化してあげることで、資源の有効活用が可能です。また機器の台数が削減できるため消費電力も削減できます。
通常のサーバやネットワーク機器を拡張する場合、一度機器を停止させてから作業する必要がありました。しかし仮想化を利用することにより、システムを停止させることなく拡張させることが可能になります。
仮想化技術を利用すれば、機器に障害が発生しても、他の機器で処理を引き継ぐことができ、サービスを止めることなく提供し続けることが可能になります。
仮想化を利用すると、物理的な機器の台数が削減出来るため、管理する手間も当然減ります。また、仮想化することで、簡単にバックアップや復元、移行を行うことが出来るのも、運用管理の簡略化に一役買っています。
クラウドコンピューティングと仮想化は非常に相性が良いです。アプリケーションやデータを個々のコンピュータではなく、ネットワーク上あるいはインターネット上に集約して設置するクラウドコンピューティングに仮想化を組み合わせると、さらにメリットがあります。クラウドコンピューティングによって機器コストや運用コストを削減し、さらに仮想化を組み合わせることで、さらなる資源の有効活用や柔軟な拡張性が期待出来ます。
仮想サーバーは1台の物理的なサーバー上に、論理的に複数のサーバー環境を構築したものを言います。ユーザーはその他のシステムからは、論理的に1台のサーバーを独立したサーバーとして認識しますので、通常の物理サーバーと同じように扱われます。仮想サーバーは、それごとに個別のシステムやアプリケーションを稼働させることができます。
物理サーバー上で複数の仮想サーバーを動作させるメリットには大きく以下の2つのメリットがあります。
その昔、複数の物理サーバーをシステムごとに稼働させているものの、実はリソースの半分も使っていないなんてことが良くありましたが、仮想サーバーを活用することで、サーバーのリソースをフルで活用出来るようになります。
サーバーが急に必要になったとしても、今まではサーバー購入のための稟議書を書いて、承認をもらって、調達して、納入して、設定して・・・という作業が必要でしたが、仮想サーバーであれば、使いたいときにすぐに仮想マシンを稼働させることが出来ます。ちょっと検証用のサーバーを1台立ち上げたいという時に非常に便利です。
サーバーを仮想化する手法は、物理的なサーバー上にサーバー仮想化ソフトウェアを構築します。このサーバー仮想化ソフトウェアが物理サーバーのCPUやメモリ等のリソースを論理的に分割して、各論理サーバー(仮想マシンといいます)に割り当てます。仮想マシンを構成する方法には、大きく以下の2つの方法があります。
ホストOS側はWindowsやMAC OS、Linuxなどの、物理的なサーバー上で稼働しているOS上にサーバー仮想化ソフトウェアを動作させる方法です。仮想化のための専用のOSを用意する必要がなく、通常のアプリケーションと同様に実行できるため、手軽に利用出来ることがメリットです。デメリットとしては、Windows等のOS上でゲストOSを動作する手法になるため、パフォーマンスに影響が 出てしまうというデメリットがあります。ホストOS型の代表的な仮想化ソフトウェアとして、 VMware Player、VMware Fusion、Parallels Desktop等があります。
ハイパーバイザー型は、物理的なサーバーOSと同様に、BIOSから直接仮想化ソフトウェアを動作する手法です。そのためホストOSは存在せずに仮想マシンを実行することが出来るため、ホストOS型のデメリットになっていたパフォーマンスを低下させることなく仮想マシンを動作させる事が可能です。個人で利用する場合や一時的に検証したい場合には手軽なホストOS型を利用し、実際に現場で利用する場合にはハイパーバイザー型を利用するのが一般的です。
仮想サーバーが増えると、論理的にサーバー数が増え、さらに簡単に仮想サーバーを立ち上げたり削除するといった運用が可能になります。そうなると、ネットワーク側はReachabilityを確保するために、VLAN設定業務をする必要があるのですが、この作業を手動で行う場合、仮想サーバーの数が多くなると設定作業量も多くなり複雑になってしまうという問題がありました。また、L2ネットワークのリソースの問題(VLAN数やMACアドレス学習など)も発生し、大規模なL2ネットワークを構成できないという制約も出てきました。VLANは非常に便利な技術ですが、課題もあります。
VLANを識別するためのVLAN-IDは12ビットです。そのため、最大でも4094個(0と4095は使用出来ない)が構成できる最大のVLAN数になります。4094個という値は一見すると多いような気もしますが、大規模なデータセンターの場合、4094個では不足してしまうことがあります。
このような課題を解決するために、ネットワークの仮想化という概念が 生まれました。ネットワークも仮想化することで、物理的なサーバーやネットワークの制約に縛られること無く、サーバーとネットワークを柔軟に構成することができるようになります。
現在、ネットワークの仮想化技術が使われているのは、データセンターがほとんどです。理由は、データセンターのネットワークが抱えている課題に対して、現在の仮想化技術で解決出来ることが多いからです。
仮想化技術を使ったネットワークをSDN(Software Defined Network)といいます。サーバーの仮想化で物理サーバーの集約にとどまらず、CPUやメモリー、ディスクなどのコンピュータリソースを自由に増減したり移動したりすることができるようになりました。さらに自動化も進んでいて、簡単な命令だけで自由に仮想サーバーを用意したり、数を増やしたりできるようになりました。サーバー側はこのように仮想化技術が先行して進歩していましたが、ネットワークは従来の手動による設定変更が中心になっていました。これではせっかくサーバー側が自動化しても十分な効果を発揮できないという問題がありました。この課題に対応するため、SDNという考え方が生まれ、ネットワーク機器も仮想サーバーに連動して自動的に設定の変更ができるようになりました。
SDNのフレームワークは、3つのレイヤに分かれていて、 そのレイヤ間を接続ためにインタフェースが規定されています。
SDNを活用したネットワーク例は以下の通りです。
Cプレーン(制御機能)とDプレーン(データ転送機能)を分離して、経路の制御はコントローラで中央制御し、パケット転送はネットワーク機器が実施します。
ITシステムは当然ネットワークだけではなくて、サーバーもあればストレージもあります。SDNもネットワークだけではなく、サーバーやストレージとも連携した方が効率が良いし、SDNのメリットを活かすことができません。そのために、ITシステム全体を管理・制御するための仕組みが必要になります。このITシステム全体を管理するソフトウェアを「オーケストレーター」と呼ばれています。
オーケストレータは仮想サーバーと仮想ネットワークを 管理・制御することができる「OpenStack」や「CloudStack」などが有名です。
SDNを活用したネットワーク構成例を以下に示します。
オーケストレータやSDNコントローラは、各ベンダーの仕様によっては、物理ネットワークと伝送装置を同じSDNコントローラで制御できる場合もあったり、仮想サーバー用に別にSDNコントローラが必要な場合もあります。