概要
Java™ は 27 年以上にわたり、エンタープライズ・ソフトウェア開発に最もよく使われるプログラミング言語の 1 つです。世界中の無数のシステムが、この広く知られた言語を使用して構築されています。
従来の Java アプリケーションはモノリスです。アプリケーションの実行に必要なすべてのものをパッケージ内に含んでいますが、モノリスという性質上、変更を施すときに開発者がアジリティを維持することは困難です。開発者は基本的に、1 つ変更するだけでも全体を取り出し、再コンパイルしてテストし、再デプロイしなければなりません。
アプリケーションのモダナイゼーションによって、開発者は例えば Java で構築されたレガシー・アプリケーションにアジリティを復活させることができます。これを実現するために、レガシー・アプリケーションを最新のプラットフォームに移行し、モノリスをマイクロサービスのような保守しやすい小さなコンポーネントに分割し、最新のソフトウェア開発とデプロイメントの手法を適用し、古いものと新しいものを統合します。
これらのアプリケーションをモダナイズすることは、既存のアプリケーションコードを書き換えるのではなく従来のアプリケーションを更新することになるので、企業の時間とコストの削減に役立ちます。クラウドネイティブとマイクロサービスのアーキテクチャを採用することで、開発者は Java アプリケーションの効率性を向上でき、企業は今後の業務への投資を増加できます。
Java アプリケーションをモダナイズする理由
Java アプリケーションはこれまで、モノリシックなアーキテクチャに依存してきたため、長期にわたるサポートと管理には非常に大きなオーバーヘッドが必要になっていました。Java アプリケーションをクラウドおよびコンテナ向けにモダナイズすると、パフォーマンス、スケーラビリティ、コストを改善しながら、これらのアプリケーションから継続的に価値を創出する機会が生まれます。
移植性と広範なエコシステムのおかげで、Java は数十年にわたってエンタープライズ環境に好んで選ばれてきました。オブジェクト指向でプラットフォーム独立、安定性があり、下位互換性があるためです。Java は、適切に定義されたアプリケーション・プログラミング・インタフェース (API)のセットと広範な開発者ツールを備え、習得が容易です。
最近では、アプリケーション開発が大きく変化し、開発者は従来のモノリシック・アーキテクチャ・パターンからより軽量でモジュール性が高いサービスと機能へと乗り換えています。これらは Kubernetes などのクラウド・コンピューティングやコンテナ・オーケストレーション・プラットフォームを使用して構築されることがよくあります。このアプローチは一般的に「クラウドネイティブ Java」と呼ばれています。
Java は元来、起動時間の高速化、メモリーフットプリントの低減、コンテナのために設計されているのではないため、進化させる必要がありました。明るい面として、Java のメリットはクラウド環境でもモダナイズすれば利用できます。
メリット
- 効率化された開発者体験:クラウド環境では、開発者はボタンを押すだけで、数分間でリソースをプロビジョニングできます。ネットワーク、ストレージ、その他のサービスを構成するための適切に統合されたツールもあり、すべて事前設定済みですぐに使用できます。
- 高可用性とクラウドプロバイダーのサポート:クラウドプロバイダーは、高可用性を保証し、膨大な量の作業やコストを注がなければプライベート・データセンターでは満たすことが難しいサービスレベル契約 (SLA) をサポートします。独自のインフラストラクチャを管理することなくあらゆる種類のアプリケーションを実行したいと望む人には、魅力的なクラウドサービスとなります。
- スケーラビリティと弾力性: スケーラビリティは開発者がクラウドコンピューティングに移行する最も重要な理由の 1 つで、変化するニーズに合わせて、オンデマンドでリソースを増減できます。非クラウド環境で同等のスケーラビリティを確保しようとすると、多くの場合で途方もなく高いコストがかかります。
- グローバルリーチと管理されたアベイラビリティゾーン:クラウド環境によりグローバルリーチが可能になり、世界中で低レイテンシーのサービスが提供されます。戦略的に配置されたデータセンターで、クラウドユーザーは独自のアプリケーションのリーチを拡張でき、これまでは実用面や経済面でできなかった、または単に不可能だった、世界のさまざまな地域の顧客にデプロイできます。
- 低コスト:クラウドコンピューティングでは事前にまとまった資金は不要なので、電力、スペース、メンテナンスなど、ハードウェアの稼働に伴うコストが節約されます。クラウドデプロイは迅速で手間がかからず、クラウド環境はアクセスしやすく習得が容易なので、開発者の生産性と市場投入時間が改善され、これによってコストが削減されます。
クラウドネイティブの Java アプリケーションとは
クラウドネイティブの Java アプリケーションとは、ローカルマシンではなくクラウド上で構築、デプロイ、管理されるアプリケーションやマイクロサービスを指します。このモダナイズされたソフトウェア開発アプローチは、企業がより柔軟でスケーラブルなソフトウェアを作成し、パフォーマンスやセキュリティを犠牲にすることなく改善を高速化するのに役立ちます。
クラウドネイティブの Java に含まれるもの
クラウドネイティブの Java は、開発を可能にするために以下のような多くのクラウド手法に依存しています。
- 仮想マシンではなくコンテナを使用してアプリケーションをパッケージ化し、ランタイム環境と分離します。コンテナ内の Java アプリケーションは、動作に必要なものすべてがバンドルされているため、より高い効率性とスピードを実現し、ユーザーエクスペリエンスを向上します。コンテナによって、クラウド上の複数のオペレーティングステム上で Java アプリケーションを実行することが可能になります。
- 継続的インテグレーション/継続的デリバリー (CI/CD) パイプラインを採用し、自動化によって人の介入を最小限に抑え、ユーザーに頻繁にアップデートを提供します。信頼性の高い CI/CD パイプラインは、アプリケーションの異なるブランチで作業している開発者がデプロイ前に変更を単一の 「トランク」にマージできるようにします。これは、異なる個別開発環境 (IDE) からの変更を調整するという時間のかかる作業を排除するために、自動化を利用する 1 つの方法です。
- DevOps フレームワーク。開発部門と IT 運用部門が、アイデアを素早くアプリの改善につなげるために、コラボレーティブな一連のプラクティスによりサービス提供にアプローチします。これは、開発、提供、統合、自動化のための統合環境を提供する、コンテナによるクラウドネイティブ開発において特に重要です。
クラウドネイティブの Java には、以下を含む数多くのアプローチがあります。
Linux コンテナの Java 仮想マシン
Java 仮想マシン (JVM) は、Linux コンテナを含むあらゆる場所で Java プログラムを実行できるようにします。このアプローチでは、クラウド上のクラウドサーバー上で実行されるハイパーバイザーホスト OS、ハイパーバイザー VM 上で実行されるゲスト OS、ゲスト OS 上で実行される Docker コンテナ、Docker コンテナ内のホスト CPU 上で Java バイトコードを実行する JVM、同じホスト上のすべてのコンテナがカーネルを共有するなど、複数の構成が考えられます。構成によってはメモリ管理に課題が生じる可能性があります。
MicroProfile
Quarkus のようなフレームワークでサポートされているこのアプローチは、他のものよりも軽量ですが、クラウドタスクを処理するために使用する Kubernetes に精通している必要があります。MicroProfile は、マイクロサービス・アーキテクチャのために最適化されたコミュニティ主導のベンダーニュートラルな仕様であり、他のクラウドネイティブ・テクノロジーとのさまざまな統合で支持されています。
ネイティブイメージ
ネイティブイメージ・テクノロジーは、Java コードをスタンドアローンの実行ファイルに事前にコンパイルすることを可能にし、ほぼ瞬時の起動時間、メモリ使用量の低減、システム間の可搬性などのメリットをもたらします。このアプローチではコンパイラーとして Liberica Native Image Kit (NIK) を使うことが多く、NIK は Java バイトコードをバイナリコードに変換しますが、すべてのプログラムを最適化することはできません。実験的な Spring Native を置き換えた Spring Boot 3 は、人気のある Spring フレームワークの一部で、Java アプリケーションを実行可能ファイルにコンパイルします。
クラウドネイティブの Java フレームワーク
クラウドネイティブの Java アプリケーション開発に興味がある場合、さらに調査する価値のあるフレームワークが複数あります。その例をいくつかご紹介します。
Quarkus は、JVM およびネイティブコンパイルのために作成されたフルスタックの Kubernetes ネイティブ Java フレームワークで、Java をコンテナに最適化し、サーバーレス、クラウド、Kubernetes の各環境で効果的なプラットフォームとして使用できるようにします。
Micronaut は、スピードとモジュール性に重点を置いた JVM ベースのフレームワークです。依存性の注入をランタイム時ではなくコンパイル時に行うことで、他のフレームワークと比較して起動時間の短縮とメモリフットプリントの削減を実現できます。
Spring Cloud Functions は、長年使われてきた Spring 開発フレームワークの新バージョンで、クラウド・デプロイメント向けに調整されています。このフレームワークの Cloud Function は、リアクティブなスタイルと命令型スタイルの組み合わせをサポートすることができ、Web サービスからバックグラウンドワークまであらゆる方法でデプロイされることを意図しています。
Eclipse Vert.x は、JVM 上でリアクティブなアプリケーションを構築するためのさまざまなツールを提供し、ワークロードの要件に応じてスケールアップやスケールダウンができるようにします。これは、イベントループを使用して、並行ワークロードを処理する非同期プログラミングモデルを使って効率性を重視することにより実現されています。
Dropwizard は、その安定性のほか、構成、アプリケーション・メトリクス、ロギング、運用ツールなどに対する追加設定なしのサポートで知られる成熟したフレームワークです。構造が古い Java 開発アプローチと合うため、既存のアプリケーションの修正に使用する場合にその力を発揮します。
最後に、Google やマイクロソフトも基本的な機能については Java のスターターフレームワークを用意しているので、ニーズが比較的単純な場合は、これらのオープンソース・フレームワークを使うこともできます。
Java アプリケーションを Red Hat でモダナイズする方法
すべてのアプリケーションが同じモダナイズの経緯をたどる必要はありません。開発者は、各アプリケーションの特性と、組織の現在および予期されるニーズに最適な方法を選択できます。
このことを念頭に、Java アプリケーションをモダナイズしてモノリシック・アーキテクチャから脱却し、クラウドデプロイモデルの真のメリットを活用しようとする場合、Java アプリケーションのモダナイゼーションには、リホスト、プラットフォーム再構築、リファクタリングの 3 つの主要な方法があります。
リホスト:仮想化
リホストはリフトアンドシフトとも呼ばれ、既存アプリケーションをそのまま仮想マシン (VM) 内にデプロイします。リホストでは、従来のアプリケーションサーバーで実行される Java アプリケーションを、ハイブリッドクラウド・プラットフォーム上で実行される VM にリフトアンドシフトします。モノリシック・アプリケーションはアプリケーションサーバー上では変更されず、既存のすべての統合や依存関係は維持されます。
プラットフォーム再構築:OpenShift
プラットフォーム再構築では、Red Hat® OpenShift® などの Kubernetes ベースのクラウド・プラットフォーム上のコンテナにアプリケーションをデプロイします。
Java アプリケーションを OpenShift にプラットフォーム再構築すると、プラットフォーム固有の機能を活用できるようになります。たとえば、ビンパッキング、水平スケーリング、CI/CD 統合ツール、統合監視ツールなどです。OpenShift には、Java アプリケーションイメージの構築およびデプロイのプロセスを効率化するさまざまなツールがあり、MicroProfile およびコンテンツトリミングの導入を通じて先進的なクラウドネイティブ開発テクニックを導入する機能も提供します。
リファクタリング:OpenShift Application Foundations
リファクタリングとは、アプリケーションをマイクロサービスに変換し、新しいテクノロジーを統合し、クラウド・プラットフォーム上にデプロイすることです。リファクタリングでは、Java アプリケーションを、ハイブリッドクラウド・プラットフォーム上のサービスメッシュにデプロイされたマイクロサービスとして再開発します。サービスは時間をかけて再構築し、機能を古いアプリケーション・アーキテクチャから新しいアーキテクチャへと徐々に移行できます。Strangler パターンを使用して、モノリスを徐々にマイクロサービスに変換して、新しいサービスを追加しながら古いサービスをリファクタリングできます。
Red Hat OpenShift と Application Foundations により、アプリケーション・ライフサイクル全体での実行を効率化するプラットフォームが実現します。この組み合わせで開発者は、セキュリティを念頭に置き、ハイブリッドクラウド全体で大規模にアプリケーションを構築、デプロイ、運用できます。
Java アプリケーションのモダナイゼーション・ジャーニーの計画
Red Hat を選ぶ理由
オープンソース Java と Kubernetes の両方のエキスパートである Red Hat は、お客様が Java アプリケーションをモダナイズしてアジャイルでクラウドネイティブな IT 環境を構築し、進化するビジネス要求をサポートできるように支援できます。アプリケーションのモダナイゼーション・ジャーニーのための、統一された完全なオープン・ハイブリッドクラウド基盤を提供します。
20 年以上にわたって信頼され続けている開発プラットフォームである Java は、多くの企業でさまざまなエクスペリエンスを実現するために利用されています。Red Hat は、多くの開発者が既存の Java アプリケーションを維持および改善し、クラウドネイティブ環境向けに再構築し、テスト済みのフレームワークで新たなイノベーションを実現できるよう支援してきました。
Red Hat のプラットフォームは、アプリケーションのモダナイゼーションに必要な柔軟性、相互運用性、一貫性を提供します。Red Hat OpenShift® はセキュリティ重視のハイブリッドクラウド・プラットフォームで、アプリケーションを環境上に確実に開発、デプロイ、管理できます。さらに、Java アプリケーションがクラウドに対応しているか評価するために、Red Hat は Migration Toolkit for Applications (MTA) を用意して、アプリケーションのモダナイゼーションと移行プロジェクトの加速を支援するツール、レポート、知識を開発者に提供しています。
アプリケーションのモダナイゼーションの詳細については Red Hat にお問い合わせください。今後お近くで開催される、Red Hat テクノロジーを体験できるイベントの情報も合わせてご確認ください。