仮想/レンタルサーバ技術も注目されてきています。筆者の会社ではWebアプリケーションをいくつか開発して保守をしていますので、それを検証する環境を用意していますが、OSのバージョンアップや使用しているサーバソフトのセキュリティアップデートなどについて常時対応するのは大変ですし、納品時の環境を維持したままにサーバマシンを置くこともできません。
そこで、仮想マシンで検証環境を用意して、必要なサーバを必要なときだけ稼働させるということをしています。これにより、無駄な電力を消費することもありませんし、必要のないサーバマシンを置く必要もなくなり、効率良い開発ができるわけです。
また、筆者の会社では、サービスの内容によっては、エヌ・ティ・ティピー・シーコミュニケーションズのVPS(Virtual Private Server)サービスである「WebARENA SuitePRO」を利用しています。このサービスも仮想マシンで実装されているため低価格で利用ができて大変便利です。
値段だけで考えると、「@YMC」が提供するVPSのようなものもあります。共用サーバでは使いたいアプリケーションがインストールできない、専用サーバが必要なほどアクセスや負荷は発生しない、といった場合に利用しています。
従来はシステムにサーバを1台追加するとなると、対応をするのに時間がかかったものですが、仮想マシンに関する技術が発展したおかげで、現在では、より柔軟なシステム構成が可能となっています。
筆者の社内では、この恩恵がどれくらいのものか理解しているので、積極的に仮想サーバ技術を利用してきました。そんなところで、「Amazon Elastic Compute Cloud(以下、Amazon EC2)」や、「Morph AppSpace」のような、仮想サーバを時間単位でレンタルできるような環境がサービスとして提供されてきましたから、これにも注目しています。
また、2008年10月現在でPythonのみサポートの「Google App Engine」も、次はJavaをサポートするという噂がありますが、 一体どうなるのでしょうか。
「時間単位のレンタルができる」ということは、「負荷が掛かる時間帯だけ、稼働させる仮想サーバを増やすといった運用が実現できる」ということですから、うまく利用できれば、非常に効率のよいシステム運用ができる可能性があります。
一般的に、Webサービスは複数台のサーバから構成されるシステムにより提供されますが、ユーザーはそれを意識せずとも使えます。つまり、クラウドの中で、サーバの台数が変わってもユーザーには分からないのですが、サーバ台数を変動させながらも安定したサービスを提供するというのは、難しいものです。しかし、Amazon EC2などを利用すると、そういった運用を実現するための環境が簡単に手に入るわけです。
Amazon EC2では、AmazonでAMI(Amazon Machine Image)と呼ばれる仮想マシンイメージが利用でき、あらかじめ以下のようなOSのイメージが提供されています。
仮想サーバは自前でも用意できますが、複数のOSイメージを用意するのは、それなりの手間が掛かります。スケーラビリティの評価をしたり、単体で稼働させていたシステムを複数台構成へ移行するための検証を行ったりする場合、新規構成に必要な台数のサーバを短期間で低コストで用意できるというのは魅力的です。
仮想サーバの魅力は語り始めると尽きませんが、Java開発者としてはもう一歩進んで、これらのサービスでJavaの環境は簡単に構築できるのかが気になるでしょう。その点、Amazon EC2では、そもそもJavaと親和性の高いOpenSolarisが採用されていたり、レッドハットがJBossをAmazon EC2で利用できるサービスを提供する(参考:JBossをAmazonのクラウド上で提供へ、レッドハット)など、Java陣営を積極的にサポートする姿勢が見られます。
また、「cloudtools」のように、Amazone EC2 にJava EE環境を簡単に構築するツールも開発されています。こういった状況ですから、仮想サーバについても、今後の動向から目が離せません。
さて、Javaとクラウドコンピューティングの関係について考えてみましたが、いかがでしたか。筆者としては、Javaはクラウドコンピューティングのプラットフォームになれる力を持っていると思っています。所感に近いですが、意見を述べておきます。
サーバサイドでは、Java VMはアプリケーションとOSの間にあったギャップを埋めてきました。Javaが出現するまでは、ターゲットOSに合わせてアプリケーションを開発し、ターゲットOSを変更する場合は移植作業が当たり前でした。もちろん、移植作業をしなくても済むように注意深く設計をして実装することもできましたが、それは高度な技術でした。
しかし、いまや「Windows上で開発をして、運用はLinuxで行う」といったことは、高度な技術を用いなくても普通にできます。オープンソースソフトウェアがWindowsへ移植されているため、環境が整ったということも大きいですが、最終的な実行環境としてサーバサイドではUNIX系OSとJavaが採用されていることを考慮すると、Javaの存在が大きな影響を与えたと考えられます。
Java VMは実在しないマシンを仮想的にソフトウェアで実装したものですが、現実にあるマシンをソフトウェアで実装した仮想マシンが、XenやVMwareです。これらの出現により、OSとハードウェアの間にあったギャップがなくなりました。
ハードウェアが故障したために、同じ部品を購入しようとしても、手に入らないとか、代替の部品として他社製品を追加したら動かなくなってしまったとか、そういったことがよくありましたが、XenやVMwareを使うと、そういった問題は少なくなります。こういう視点で考えてみると、Java VMやOS、仮想マシン(XenやVMware)が一式で、アプリケーション側から見たハードウェアの仮想化が実現します。
クラウドコンピューティングでは、ネットワークにより、実際にアプリケーションが稼働しているハードウェアというのは隠蔽(いんぺい)されますから、ハードウェアが仮想化されているかどうかについては重要性はありません。しかし、実際にサービスを提供するアプリケーション側からは依然としてハードウェアは“意識”しないといけないのですが、Java VMやOS、仮想マシンの一式で、仮想化できるのであれば、利用しない手はありません。
もちろん、OSと仮想マシンの一式だけでもある程度の仮想化は可能ですが、携帯端末なども視野に含めると、Java仮想マシンを利用した方が有利ではないかと考えています。
秋の夜長に、皆さんもJavaとクラウドコンピューティングについて考えてみませんか。
@IT関連リンク
開発者が知っておくべきJavaと仮想マシンの歴史
安藤幸央のランダウン(42) JavaとVMが生まれた背景や名前の由来、さまざまなJDK、マイクロソフトやAndroid、iPhoneとの関係、Java VMで動くスクリプト言語など
「Java Solution」フォーラム 2008/9/4
いま再注目の分散処理技術
最近注目を浴びている分散処理技術「MapReduce」の利点をサンプルからアルゴリズムレベルで理解し、昔からあるJava関連の分散処理技術を見直す特集企画
Java「仮想化」開発環境を検証
1つのマシン上に仮想マシンを複数用意することができる仮想化技術を導入し、Java開発環境としてのメリットを検証する
小山博史(こやま ひろし)
情報家電、コンピュータと教育の研究に従事する傍ら、オープンソースソフトウェア、Java技術の普及のための活動を行っている。長野県の地域コミュニティである、SSS(G)やbugs(J)の活動へも参加している。
著書に「基礎Java」(インプレス)、共著に「Javaコレクションフレームワーク」(ソフトバンククリエイティブ)、そのほかに雑誌執筆多数。
Copyright © ITmedia, Inc. All Rights Reserved.