連載:Java「仮想化」開発環境を検証(1)
Java開発に仮想化技術は有効か
スティルハウス
吉川和巳
2005/9/22
本連載では、最近J2EEのプラットフォームにも採用されるようになってきた仮想化技術を実際にハイスペックなPCに導入し、その有効性を検証する試みを計4回にわたって紹介しよう。
■マシン準備はJ2EE開発の悩み
J2EE開発における悩みの1つは、開発やテスト用のマシンの確保とセットアップ作業です。
例えばPHPなどによる小規模開発であれば、1台のテスト用マシンに複数のWebアプリケーションを載せたり、パワーの低いノートPCで作業したりしても問題になりにくいでしょう。しかしJavaの場合はそうはいきません。例えばTomcatやJBoss、WebLogicなどのアプリケーション・サーバを使う場合、それらをインストールしたマシンを複数のプロジェクトで共有するのは無理な話です。デバッグ中にはアプリケーション・サーバを頻繁に再起動するし、JDKのバージョンやクラスパスが錯綜(さくそう)してトラブルが起きるのも避けたい。またバグを速やかに切り分けるためには、アプリケーション・コード以外は余分なものを一切含まない、できるだけクリーンな実行環境を用意したいところです。
たとえ余っているノートPCや古いサーバを1台確保できたとしても、そうした非力なマシンは概してJ2EE開発には荷が重いでしょう。まず、JSPページのコンパイルに時間がかかり過ぎると、開発作業の足を引っ張りかねません。コードを直したらそれをテストするという繰り返しをテンポよく進めたいところです。また、アプリケーション・サーバの起動やシャットダウンにあまりに時間がかかるのも困りものです。開発中のアプリケーションそのものが重いこともあります。
さらに、当初は軽量さが魅力であったEclipseも最近は重くなりつつあり、気が付くと数百MBのメモリを消費していることもしばしばです。便利なプラグインを数多くインストールしたり、大規模なプロジェクトをCVSサーバと同期したりすると、緩慢な動作が目に付いてしまいます。その一方で、開発者にはディスク・アクセスの遅いノートPCが開発環境として配布されることも少なくありません。強力なプロセッサとたっぷりのメモリ、そして高速ハードディスクを搭載した最新のデスクトップPCで作業したい……という誘惑に駆られるEclipseユーザーも多いはずです。
■開発、ステージング、プロダクション
Webアプリケーション開発では、主に以下のような実行環境をセットアップすることとなります。
- 個人の開発環境 …… 各人のPC上で動作させる実行環境
- 共有の開発環境 …… 日々のビルドやテスト、DB、CVS、wikiなど
- ステージング環境 …… リリース前のQA作業や最終確認用
- プロダクション環境 …… 本番用
図1 それぞれの実行環境 |
1つは、各開発者のPC上で動作させる「個人の開発環境」です。TomcatやJBoss、PostgreSQLといった軽量のソフトウェアであれば、この各人の環境で動作可能でしょう。2つ目は、日々のビルドやテスト、テスターによるQA作業用のマシンとして利用する「共有の開発環境」です。OracleやWebLogicといった重量級のソフトウェアや、チーム開発をサポートするCVSやwiki、バグトラッカーなども、この環境で共有します。3つ目は、リリース前のQA作業や最終確認を実施する「ステージング環境」。そして4つ目は、本番運用を行う「プロダクション環境」です。もっともプロジェクトによっては、ステージング環境をスキップしてそのままプロダクション環境にリリースすることもあります。
プロダクション環境はともかく、開発環境やステージング環境をプロジェクトごとに準備するのは厄介な作業です。前述した理由により、それなりのパワーを持つPCをすべての環境に用意しなくてはなりません。また、それぞれに以下のような作業を繰り返すのも骨が折れます。
- OSのクリーン・インストール
- JDKやEclipseのインストール
- ApacheやDBのビルドやインストール
- アプリケーション・サーバのインストール
- ビルド環境の構築(環境変数の設定やスクリプト配置など)
よって複数のプロジェクトが同時進行する開発現場では、実行環境の確保や準備作業に追われてしまいます。
一方で、開発環境やステージング環境のためのサーバは、いつも高負荷状態であるわけではありません。むしろ、ビルドや負荷テストを実施しない限り、大半の時間はプロセッサ・パワーを持て余している状態が多いはずです。また、プロジェクトのカットオーバー後ほとんど利用されてないのに、サポートや次期フェイズのために各環境はそのまま維持しなくてはならない、……というケースも目に付きます。
■Java「仮想化」開発環境で問題を解決しよう
以上の問題点をまとめると、以下の3点に集約できます。
- 開発やテスト用のパワフルなマシンを、プロジェクトごとに用意したい
- 開発やテスト用のセットアップ作業でラクしたい
- 専用マシンのリソースを持て余すムダをなくしたい
これらの問題を解決する手段が、「パワフルなマシン」と「仮想化技術」のコンビネーションです。
仮想化(virtualization)とは、1台のPCやサーバのリソース(すなわちプロセッサやメモリ、HDD)を分割し、複数の仮想的なマシンとして利用する技術です。もともとはメインフレームの分野で用いられてきた技術ですが、ここ数年はPCやUNIX分野にも普及しつつあります。例えばPC向け仮想化ソフトウェアとしては、ヴイエムウェアのVMwareシリーズやマイクロソフトのVirtual PC、オープンソース・ソフトウェアのXenなどが代表的です。さらにUNIX分野では、HPのVirtual Server Environment、IBMのVirtualization Engine、そしてサンのSolaris Containerなどが提供されています。またプロセッサ側の仮想化支援機能として、インテルのVirtualization TechnologyがPentiumおよびItaniumの両プロセッサで間もなくサポートされる予定です。
図2 VMware Workstationの画面 |
これらの仮想化技術のメリットを簡単にいえば、「1台のマシンを複数台の仮想マシンとして使える」ということです。これは開発者にとって、上述した3つの問題を解消するうってつけの手段となります。
そこで今回は、仮想化ソフトウェアによるJava「仮想化」開発環境を実際に構築し、そのメリットとデメリットをレポートしたいと思います。筆者はフリーの開発者としていくつかのJ2EE開発案件に参加しており、自宅兼オフィスでは常時2〜3台のPCを開発環境として24時間稼働させていました。それぞれ個別のプロジェクトに割り当てて使用していたのですが、やはりPCの台数の増加や、リソースの不足と持て余しに悩まされてきました。例えば、大抵はどのPCもアイドル状態なのですが、いざJSPのコンパイルやソフトウェアのビルドを行わせるとプロセッサ・パワーが追いつかなくなり、作業の遅さにストレスがたまります。
そうしたところ、ヴイエムウェアよりVMware Workstation 5がリリースされました。これを機会に筆者は、「3台のPC」から「1台のパワフルなPC+VMware」への移行を決断しました。次回以降は、以下のような内容で、Java「仮想化」開発環境の構築のをレポートしたいと思います。
- パワフルなPCとVMwareの導入
- 仮想マシンの「実力」はどの程度か
- 仮想マシンのパフォーマンスを引き出すコツ
- Java開発環境の仮想化で得られるさまざまなメリット
次回は、十分なパワーを備えたPCを購入し、VMware Workstationをインストールして仮想マシンをセットアップする過程を紹介したいと思います。
Java Solution全記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|