注目ブログご紹介

現実になった仮想化


投稿者:Eva Skoglund, 5/23/2016

先日ウインドリバーの開発者である友人からこんな質問を受けました。「仮に小型の開発ボード(MinnowBoardなど)の仮想プラットフォームがあるとして、仮想マシンやLinuxコンテナで実行するのがいいのはどんな場合で、仮想プラットフォームとしてクラウド型のラボで実行するのがいいのはどんな場合なんだろう?」

3秒黙考してから、思わずこう答えていました。「最大の違いは、クラウド型ラボの仮想プラットフォームでは瞬時に共有する仕組みでしょうね。全員が同じラボにログインしている仮想の部屋があると考えてみて。全員が同じものを見ていて、ソフトウェアや実行中のセッションを瞬時に共有しているわけ。」

私たちは有益な議論を交わし、友人はクラウド型ツールについて新たな知識を仕入れて、満足げに立ち去りました。しかし、私はこの件が頭から離れませんでした。コンテナとクラウド型の仮想プラットフォームはまるで別物ですが、それでいてとても似ています。仮想化の概念が異なるのです

おそらく、友人と同じように考えている方が他にもいると思います。確かに、現在ある、さまざまな仮想化の概念は紛らわしいことがあり、その原因はよくわかります。友人への回答が満点だった気もしません。この問題は、どのような論点に整理できるのでしょうか。仮想化の概念の相違点、つまり、それぞれがどんなものかということと、それらを使用する理由の両方を理解する必要があります。

まずは、ハードウェアの仮想化があります。たとえば、NFV(Network Functions Virtualization)やSDN(Software Defined Network)など、ソフトウェアによって定義されたものすべてです。これは、従来からある仮想マシン(VM)技術の進化したもので、マシンやOS全体が仮想化されます。ソフトウェアコンテナ(Linuxで使われるコンテナなど)は、「より軽量」タイプのVM技術とみることができます。すべてのコンテナが同一のOSカーネルを共有して、ファイルシステムの部分だけが異なるコンテナに分割されます。OSイメージ全体ではありません(多少の差異はあります。すべてのソフトウェアコンテナが一様の形式というわけではありません)。以下に簡略な図を示します(詳細図と説明は、Imesh Gunaratneが執筆したこちらの記事をお読みください)。

現代のソフトウェアシステムは、こういった仮想化レイヤが重なり合って、途方もなく複雑になりかねません。仮想マシンを作成した当初の理由は、複数のユーザが1台のメインフレームを共有できるようにするためでした。仮想マシンでは、仮想マシン内でどんなOSでも実行できます。仮想マシンを使用して、大型メインフレームを共有できます。最近では、ハードウェア、OS、その他の「ハードウェアに近いソフトウェア」を仮想化する理由は、ビジネス上の理由が一般的です。それは、ハードウェアよりソフトウェアのほうがアップデートが容易で、また、ハードウェアの利用率を向上できるからです。仮想化の本質は、機能をハードウェアへの実装から、ソフトウェアへの実装に移行することです。そしてソフトウェアなら、要求の変化により迅速に対応できます。

次に、クラウド型のテクノロジがあります。簡単に言うと、何らかのソフトウェアをどこか別の場所にある大規模なサーバパークで実行して、ローカルマシン上で実行するクライアントを介してリモートにアクセスすることです。基本的に、自分のコンピュータを使う代わりに、計算時間を「レンタル」するのです。クラウド型テクノロジの目的は何でしょうか。まずは、クラウド技術を社内で使用するという観点から検討しているのか、あるいは、クラウド型のテクノロジとして製品を提供することを検討しているのか、分けて考える必要があります。

    • 後者の場合は、今後顧客にサービスを提供する(「モノ」を売る代わりに)ために、クラウド活用を検討していると思われます。これは、SaaS(Software as a Service)モデルの販売に分類できます。顧客が購入するのはサービスで、そのサービスはクラウド経由で提供されます。製品のライセンスを購入するのではありません。Salesforce.comとSAPの対比などがわかりやすい例です。
    • クラウド技術の社内活用を検討している場合は、その理由は、より簡単かつ柔軟にテクノロジやツールを利用できるからだと思います。それによって、コミュニケーションや共同作業がやりやすくなります。ローカルなインストールの管理、あらゆるメンテナンス作業、異なるバージョンの履歴管理はやりたくないものです。また、クラウドサービスなら、使用量に応じて支払うことが可能でしょう。ツールを使用する量によって、コストを簡単に増減できるほか、多額の先行投資が不要になります。コスト構造の要因になります。

もう1つの仮想化概念が仮想ラボです。多くの場合、ローカルのクライアントを使って、リモートのラボにアクセスすることを意味します。基本的に物理的なラボが「どこか別の場所」に設置してあって、ローカルクライアントからリモートにアクセスします。クラウド型のテクノロジにおおむね近いです。主な相違点は、クラウドコンピューティングはコモディティ化した交換可能なハードウェアを使用する傾向がありますが、ハードウェアラボは特定の製品やソフトウェアスタック向けの専用ハードウェアが含まれる点です。仮想ラボが必要な理由は、コストの削減です。会社やチームの全員に大規模なオンサイトラボを用意するのは費用がかかりすぎます。現実的ではありません。スペースを取りすぎるし、メンテナンスも実施しなければなりません。大量のリソースが必要です。

最後に、仮想プラットフォームです。この仮想化概念では、あるハードウェア(仮想ラボで使用されるハードウェアなど)のソフトウェアモデルがあり、そのモデルを普通のパソコンやサーバに搭載されたシミュレータ内で実行します。非常に大規模なソフトウェアスタックを実行できる、高忠実度のシミュレータ(Wind River Simicsなど)の場合、ソフトウェアアプリケーション全体(OSからアプリケーションまで)を、シミュレータ内の仮想プラットフォーム上で実行できます。仮想プラットフォームを使用することで得られる主な価値は、開発効率と大規模なテストです。開発者は、ハードウェアの制約を受けずに、より優れたツールで共同作業できることから、作業のスピードも効率も上がります。利用可能な仮想ボードの数に制限がないので、テストを大幅にスケールアウトできます。最終的には、より短時間でソフトウェアの生産品質を実現できます。

仮想プラットフォームの図:仮想プラットフォームの内部では、仮想ハードウェアが下位のホストハードウェアとまったく異なっていてもかまいません。「内部の」OSと外部のホストOSが違っていてもかまわないのと同じです。多くの場合、仮想プラットフォームは、生産に入る際の特定のハードウェアやソフトウェアスタックの複製です。アプリケーションが開発時と生産時で同一のケースが多々あります。

クラウドコンピューティングと仮想プラットフォームは、組み合わせることも可能です。ローカルクライアントやWebブラウザを使って、仮想プラットフォームにリモートアクセスできます。(友人が話題にした案の1つです。MinnowBoardの仮想バージョンをクラウド型ラボで実行します)。この場合、前述した概念のメリットを得られることになります。コモディティ化した汎用サーバを使用して、テストや開発コードを実行できます。ローカルハードウェアを使わずに済む仮想ラボのメリットや、仮想プラットフォームのメリットが得られます。ハードウェアをオンデマンドでスケールアップできるので、ラボが物理的に制限されなくなります。即座に利用可能で、ボードの数は無制限で、実際のソフトウェアスタックを実行できます。下図を参照してください。このような仮想プラットフォームのクラウド型ラボの一例がWind River Helix Lab Cloudです。

ここまで述べてきた論点をまとめましょう。

    • 仮想化技術(仮想マシンやコンテナ)を使用する理由は、多くの場合、ハードウェアリソースを最適化して、市場の変化や要求により迅速に対応できるようにしたいからです。機能を特定ハードウェアへの実装からソフトウェアへの実装に移行すると、変更するのが簡単になります。
    • より継続的な収益源を確保して、売れるか売れないかの一発勝負に頼らないようにしたい場合、顧客にテクノロジのライセンスを販売するより、SaaSの販売への移行を検討することが考えられます。この理由の場合、製品のクラウド化がいいかもしれません。
    • 組織の運用コストを削減したい、スタッフの効率を向上して、共同作業をやりやすくしたい場合は、2種類の仮想化概念が役立ちます。
      o クラウド型ツールを活用する:管理がより楽です。ローカルにインストールするものがなく、すべてのユーザを常に同期できます。(ツールを所有せずに)実際に使用した分の料金を支払うのが一般的なので、コストとニーズをより一致させることが可能です。
      o 物理ラボを補完する目的で仮想ラボを使用:より現実的です。スペースも費用もそれほどかかりません。メンテナンス費用も抑えることができます。
      o ソフトウェア開発を加速して、より短時間でソフトウェアを生産品質にしたい場合は、仮想プラットフォームを検討してください。つまり、仮想プラットフォームでは、ソフトウェアのデリバリをより頻繁に(さらには継続的に)行えるということです。年に1度のリリースで妥協することなく、もっとペースを上げられます。前述した継続的な収益源というビジネス目標にぴったりです。

この問題について一考してみた結果、友人には改めてこう答えたいと思います。「何を実現したいの?収益のアップや開発期間の短縮とか、ビジネス面から考えているの?それとも、仕事のやり方を刷新して、スタッフの効率を高めて、共同作業をできるようにしたいとか。もしかしたら、その両方を組み合わせる方法を整理したいのかしら。洗練されたソリューションだから、Linuxコンテナで実行したいものがあるとか、作業環境をクラウドに移行したいとか?」

仮想化技術のタイプとそれらを使用する理由を検討してみてわかったのは、ソフトウェアの開発やデリバリを、少しずつ段階的にではなく、抜本的に一気に加速しようとしているケースが多いことです。知ってのとおり、ソフトウェアによって、多くの製品に価値を付加して、差別化することができます。ソフトウェアの開発やデリバリをどのように行うかが、多数の企業にとってビジネスを左右する重要な要素になりつつあることは今や明白です。その部分で、多くの仮想化技術が役に立ちます。

ウインドリバーのLab Cloudを実際に試してみたい方は、以下で無償アカウントを登録できます。https://lab.cloud.windriver.com/

P.S. まだ友人と話の続きをしていないので、彼の目的が何だったのかわかりません。今度はっきりさせなくては・・・。