「Javaはクラウドネイティブに向いてない」は誤解? 設計や実装の注意点:レッドハット伊藤氏とマイクロソフト寺田氏が語るクラウドネイティブ(3)
レッドハットでソリューションアーキテクトを務める伊藤智博氏とMicrosoftでクラウドアドボケイトを務める寺田佳央氏が第3回にわたってクラウドネイティブを語る本連載。最終回はJavaとクラウドネイティブの関係について。
Web系テクノロジー企業の間で取り組みが広まっている「クラウドネイティブ」について、レッドハットのソリューションアーキテクトを務める伊藤智博氏とMicrosoftでクラウドアドボケイトを務める寺田佳央氏が語る本連載。第3回は、Javaとクラウドネイティブの関係、これから開発者や運用管理者に求められるスキルセットを語った。
クラウドネイティブとJavaの関係
――クラウドネイティブの取り組みを見ているとGoなどJava以外の言語を選択しているケースも多いように感じます。
伊藤氏 はい、ご認識の通りJavaはクラウドネイティブではあまり使われていません。Javaは誕生から25年以上にわたって進化してきました。そのほとんどの期間は「システムのダウンタイムを発生させない」という顧客の要件に合わせて進化してきました。そのため、変化が遅れていたJavaの起動速度や処理性能が多言語と比べて劣っているとの印象を持たれがちです。
しかし、近年のアップデートでJavaには軽量に動くために必要な仕組みが整ってきました。詳細は割愛しますが、事前にコンパイルできるコンパイラの「AOT(Ahead Of Time、事前)コンパイラ」やネイティブイメージで実行する「GraalVM」などが登場しました。重厚長大なプラットフォームでクラウドネイティブを実現するのは難しいと思われるかもしれませんが、こうした技術を利用すれば、Javaとクラウドネイティブの相性は良くなります。
また、Javaは皆さんもご存じの通りどのようなプラットフォームでも動作します。新たなメモリやCPUなどハードウェアが登場、進化しても対応が進み、実行できるようになることもメリットの一つでしょう。最近ではMicrosoftとRed HatによるArm対応が挙げられます。これによってArmアーキテクチャを基盤とした環境でもアプリケーションが実行できるようになっています。
他にもJavaにもともと備わっているJIT(Just In Time)コンパイラや「JDK Flight Recorder」といった性能や運用を支援する機能の他に、Eclipse MicroProfileプロジェクトが提供する非機能要件の機能群(例えばEclipse MicroProfile Metrics/Healthなど)を仕様として定義していることもポイントです。それらの仕様を実装したフレームワークの「Quarkus」もあるため、Quarkusを使って要件を満たすアプリケーションを容易に実現できるでしょう。
寺田氏 私はJavaを利用する企業を国内外問わず見ていますが、すでに「Java on Azure」の利用者が一定数以上いることから、クラウドネイティブの文脈でもJavaの利用は進んでいると考えていて、伊藤さんの印象とは異なります。今後ますますJavaに対する投資を加速し、Java利用者を大切に考えていく所存です。
連載第2回で紹介した「Azure App Service」も、Spring Bootで開発されたアプリケーションの本番環境として利用いただいているお客さまがいます。また「Red Hat JBoss EAP」を利用することもできます。
Eclipse MicroProfileで実装したクラウドネイティブなアプリケーションは、Mavenを使用してQuarkusのアプリを Azure App Serviceにデプロイする(関連リンク)こともできます。コンテナのオーケストレーションツールとしては、Azure Kubernetes ServiceやAzure Red Hat OpenShiftを利用可能で、本番環境で利用するお客さまがいます。さらにSpring Boot利用者に便利なAzure Spring Cloudというサービスなども提供しています。
伊藤さんの認識の通り、2021年時点でJavaの高速起動や軽量化において課題があることは私も理解しています。ですが、ライブラリやツールが豊富に用意されているため、好んで利用いただくお客さまもいるように思います。
今後もJavaが選択され続けるためには伊藤さんの指摘にもあるように、Javaの各種フレームワークや周辺プラットフォームの継続的な開発や成長が不可欠です。Javaコミュニティーの力や関連企業がとても強い力を持っているため今後もしばらくは安心して使えるプラットフォームになると信じています。
Javaの好きなところは、ずばり「Java VM」(Java仮想マシン)の存在です。Javaは20年以上をかけて常にパフォーマンスとの戦いをしてきました。そして現在は、Java VMがいったん起動すると非常にハイパフォーマンスで動作するため、常時稼働するようなサーバサイドのアプリケーションの実行環境として最適です。他の言語ランタイムでパフォーマンスが出なかったためにJavaに戻ってきたという企業もあるくらいです。そしてガベージコレクションに関してもいまだに改善が続けられている他、クラウドネイティブなアプリケーションの安定した動作に欠かせないアップデートも含まれています。
「Java×クラウドネイティブ」における設計、実装のポイント
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 2021年のインフラストラクチャ&オペレーションに影響を与える6つのトレンド
今後12〜18カ月にわたり、リモートワークとクラウド移行がインフラのトレンドをけん引し続ける見通しだ。 - なぜ金融系プロジェクトで先進のコンテナ技術を選択したのか
NRIのコンテナ・Kubernetes活用事例について紹介する本連載。第2回はFinTechサービスをクラウドやコンテナで支援した事例を紹介する。 - マイクロサービス移行後のテスト、CI/CD、運用監視で現場が疲弊しないためのポイント
マイクロサービスアーキテクチャへの移行を進める上で生まれた課題にどう取り組んだのか。オイシックス・ラ・大地の川上徹氏がOisixのマイクロサービス移行後のテスト、CI/CD、運用監視を紹介します。