「クラウドOS」という言葉が最近よく聞かれるようになった。CloudStackやOpenStackなどのクラウド基盤ソフトウェアが「クラウドOS」と呼ばれるケースが多くなる一方で、マイクロソフトは「クラウドOSビジョン」で同社の戦略を語り、ヒューレット・パッカード(HP)は「HP Cloud OS」を発表している。では、「クラウドOS」とは何なのだろうか。本記事ではその定義と現在の潮流を紹介しながら、その本質を探っていく。
そもそも、“クラウド”の定義は「NIST(National Institute of Standards and Technology、米国立標準技術研究所)」による定義が一般的なものとして定着している。
一方で「クラウドOS」の定義として定着しているものはなく、その示す意味や範囲には幅があるようだ。ここではいわゆる「クラウドOS」とはどういうものなのか、一般的だと思われる定義を紹介していこう。
WindowsやLinux、Solarisなどの従来のOS(Operating System)は、プロセッサーやストレージなどのハードウェアリソースを抽象化し、APIとしてアプリケーションから利用可能にすることなどが主な役割とされている。
クラウドOSとは何かを考えるとき、まずこの既存のOSの役割になぞって考えてみよう。
従来のOSが備えるハードウェアを抽象化する機能は、「異なるハードウェア構成のコンピューターであってもアプリケーションを変更することなく実行できる」という利点を生み出している。何年も前の古いマシンのために開発されたアプリケーションが、プロセッサーが64ビットになりハードディスクもSSDに代わった最新ハードウェアでも実行可能なのは、OSによってハードウェアが抽象化され、アプリケーションが利用するAPIの互換性が保たれているおかげだ(もちろんそれは必要条件であって十分条件ではないが)。
クラウドOSが抽象化すべきハードウェアとは何かを考えると、データセンターを構成する多数のサーバー群やストレージ群、ネットワーク機器群などだと言えそうだ。また、クラウドOSのAPIを利用するのはクラウドアプリケーションとなるだろう。
クラウドOSの実装例として、OpenStackを取り上げてみる。下記はOpenStackのWebサイトに掲載されている図だ。これによると、OpenStackは「Standard Hardware」を抽象化し、クラウドとして「Compute」「Storage」「Networking」を提供。アプリケーションに対してAPIを提供しているように見える。
果たして現実はどうか。クラウドにアプリケーションを展開した状態を図に描いてみると、現実のクラウドの構造が見えてくる。
1つ目のポイントは、クラウドアプリケーションと呼ばれるものが1つの実体を持つのではなく、複数のWebサーバー、ミドルウェア、データベースといったソフトウェア群から構成される、分散システムである点だ。
例としてWebサーバーとミドルウェア、バックエンドデータベースで構成される、ある業務アプリケーションを考える。これをクラウドに展開し、Webサーバーとミドルウェアは負荷に応じてスケールアウトし、データベースはリードレプリカを作って可用性を高めるようにした。
2つ目のポイントは、クラウドアプリケーションたる分散システムを構成するWebサーバーやミドルウェアなど、クラウドアプリケーションが動作するためのAPIを提供しているのが、WindowsやLinuxといった従来のOSである点だ。
と同時に(ある意味当然ながら)、従来のOSはWebサーバーやミドルウェアといったアプリケーションに対してハードウェアを抽象化する役割も果たしている。
つまりクラウドであっても従来のOSは使われており、引き続きハードウェアの抽象化とAPIを提供する役割を果たしているということだ。クラウドOSは従来のOSを置き換えるような存在ではなく、従来のOSとは別のところで、別の役割を果たしていることになる。
これは現在のクラウドの基本的な構造として、OpenStackでもCloudStackでも、基盤にOpenStackが採用されているHP Cloud OSでも、VMware vCloud Suiteでも変わらない。現在の一般的なIaaS型クラウド基盤全てに共通している。
では、クラウドOSはどこでどんな役割を果たしているのか。
クラウドの大きな特徴の1つは、仮想サーバーや仮想ストレージ、仮想ネットワークなど、コンピューティングリソースのほとんど全てが仮想化されている点にある(ただし仮想化は必ずしもクラウドの必要条件ではない。仮想化よりも自動化やSoftware-Defined化の方が本質的に重要であるが、そこは本稿の主題から外れるため、ここでは分かりやすく「仮想化」という用語を使わせていただく)。
これら仮想化されたリソースは、クラウドのコンソールからボタンを押したり、APIをコールすることで即座にユーザーに提供される。
例えば、クラウドのコンソールから「2コアのプロセッサーで8GBメモリのサーバーを3台、それぞれ2テラバイトのストレージを持ち、同一サブネット上に展開」と設定してボタンを押せば、数分後には設定通りのサーバー、ストレージ、ネットワークが提供される。
いわゆるクラウドOSと呼ばれるIaaS型クラウドのための基盤ソフトウェアは、全てこの仮想化されたリソースを提供する仕事をしている。こうしたコンピューティングリソースの割り当てを「プロビジョニング」という用語で呼ぶことがある。
つまり、現時点でのクラウド基盤ソフトウェア、いわゆるクラウドOSの基本的な役割は、プロビジョニングを実現することにあるのだ。
クラウドOSはプロビジョニングを実現するため、仮想サーバーの生成と管理、仮想ストレージの生成と管理、仮想ネットワークの生成と管理機能などを備えている。
そしてユーザーはクラウドの管理コンソール経由でクラウドOSに対してリクエストを出すか、もしくはAPIを直接叩くことでプロビジョニングを指定することができるのだ。
Copyright © ITmedia, Inc. All Rights Reserved.