Java×VMwareのコスト増で見直される「Javaアプリ移行の常識」とは:IT基盤の新たな標準はどうあるべきか【後編】
JavaとVMwareという企業システムの2大基盤でライセンス体系が再編され、企業はITコストの見直しに迫られている。こうした中で注目を集めているのが、Javaアプリケーションの移行と再設計による最適化だ。
企業のアプリケーション基盤として長年にわたり定着してきた、プログラミング言語およびその実行環境を含むアプリケーション基盤「Java」と、VMwareの仮想化基盤。この2つのライセンス体系が相次いで見直されたことで、企業のIT部門は運用コストの再評価という課題を突きつけられることになった。
そうした中で加速しているのが、アプリケーションのクラウド移行や最新化(モダナイゼーション)を通じて、コスト最適化や運用効率の向上を目指す動きだ。選択肢になるのは、既存のアプリケーションを改修せずに移行するリフト&シフトだけでない。コンテナ化やクラウドネイティブ(クラウド環境を前提としたアプリケーション設計)化による意外なメリットが見込める点もある。
リフト&シフトとJavaの「再設計」
Javaに特化したソフトウェア企業Azul Systemsの社長兼CEOであるスコット・セラーズ氏によれば、既存の仮想化基盤から別のプラットフォームへJavaアプリケーションをリフト&シフトすることが可能だ。特に、VMwareの仮想化製品のライセンス体系変更に伴い、コスト増に直面している企業にとっては、実行可能かつ現実的な対策と言える。
コンテナ化がJavaアプリケーションの移行手段になるケースもある。コンテナ化を効果的に活用するには、Javaアプリケーションをより小さく、管理しやすい単位に分割し、再設計(リファクタリング)する必要がある。このように分割することで、「マイクロサービス」(機能ごとに独立して開発・運用できるサービス群)への移行が可能になり、「クラウドネイティブ」な運用がしやすくなる。従来のように、全ての機能を1つの塊として構築する「モノリシックアーキテクチャ」ではなく、クラウドネイティブなアプリケーションとして再構築することで、クラウド上のリソースをより柔軟かつ効率的に活用できるようになる。
Javaプラットフォームは、アプリケーションの実行効率をさらに高められる可能性を秘めている。セラーズ氏によると、Javaアプリケーションの実行環境である「JVM」(Java Virtual Machine:Java仮想マシン)には、仮想化やコンテナ管理の最適化に役立つ詳細な情報が数多く含まれているという。「JVMは実行中のアプリケーションに関する膨大な情報を持っており、これをコンテナオーケストレーターである『Kubernetes』の管理基盤と連携させることで、コンテナ環境でのアプリケーション展開をより効率化できる」と同氏は述べる。
セラーズ氏はその具体例として、Javaアプリケーションのワークロード(処理負荷)において、JVMが持つ詳細な内部情報を活用することで、「Kubernetes」(コンテナを自動管理・運用するためのオーケストレーションツール)による「オートスケーリング」(負荷に応じてリソースを自動的に増減させる仕組み)などの判断が、より的確に行えるようになる可能性があると説明する。
同氏によれば、現在のKubernetesの制御レイヤーは、アプリケーションの外側から取得できる情報のみに依存している。例えば、CPU使用率やメモリ消費量といった「粗い粒度のメトリクス」を基に判断しているが、JVM内部にはそれらよりもはるかにきめ細かく、実行状況に即した情報が豊富に含まれているという。このような詳細情報をKubernetesが活用できるようになれば、より正確な制御が可能となり、コンテナのリソース管理やスケーリング判断の最適化につながると、セラーズ氏は指摘する。
併せて読みたいお薦め記事
連載:IT基盤の新たな標準はどうあるべきか
Java、VMwareのライセンス体系変更の影響
冗長な処理を省く仕組みも
クラウドインフラでJavaアプリケーションをより効率的に実行するためのアプローチも登場している。その一例が、Azul Systemsが提供する「クラウドネイティブコンパイラ」と呼ばれる技術だ。これは、クラウド環境で実行されるJVMのパフォーマンスを最適化するための仕組みであり、複数のノード(クラウド内でアプリケーションを実行するサーバ)にまたがって、コードのコンパイル処理を効率化する「共有コンパイラサービス」として機能する。この技術を活用することで、各ノードが独立して同じ処理を繰り返す無駄を減らし、クラウド全体での処理効率が向上する。
「Javaアプリケーションは起動するたびに、全てのノードで同じ処理を繰り返している。つまり、起動直後にJVMがアプリケーションコードをコンパイルし、その後、実行状況に応じた最適化処理(ウォームアップ)を経て、ようやく最大のパフォーマンスを発揮できる状態に達する」。こうセラーズ氏は説明する。クラウド環境では、同じアプリケーションを複数のノードに展開し、それぞれにJVMを複製して実行することが一般的だが、各JVMは個別に同様のコンパイルやウォームアップ処理を行うため、この工程が冗長になりがちだ。「基本的には、各ノードが非常に似た処理をそれぞれ独立に繰り返しているに過ぎず、実質的にはスループット(単位時間あたりの処理量)を高めるためにスケールアウトしているだけだ」(同氏)
クラウドインフラにおけるJavaアプリケーションの利用が広がる一方で、VMwareの仮想化基盤を使ってJavaアプリケーションを運用している企業は、ライセンス体系の変更に伴うコスト増に直面している。このような状況を踏まえると、従来の構成を見直す必要性はますます高まっている。
具体的な移行策の一つになり得るのが、Oracleが提供する商用Java実装「Oracle JDK」から、オープンソースの「OpenJDK」ベースの代替製品へ移行し、さらにVMware以外の仮想化プラットフォームに切り替えることだ。これらの移行は、コストの最適化だけでなく、将来的な運用の柔軟性確保という観点からも、十分に説得力のある判断だと言える。
Copyright © ITmedia, Inc. All Rights Reserved.