Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Liberty InstantOnでクラウドネイティブにひろがるJakarta EEの世界

Liberty InstantOnでクラウドネイティブにひろがるJakarta EEの世界

2022年11月27日開催された日本Javaユーザーグループのカンファレンス「JJUG CCC 2022 Fall」で実施したセッションです。
Liberty InstantOnとは,Checkpoint/restore機能を追加したOpenJ9 VMと組み合わせることにより,Java EE/Jakarta EEに対応したアプリケーションサーバーOpen Liberty/WebSphere Libertyを超高速で起動することができる技術です。1〜数秒で起動していたLibertyの起動時間を1/10程度まで短縮することができます。現在βを提供しており,2023年の正式提供を予定しています。

Takakiyo Tanaka

November 27, 2022
Tweet

More Decks by Takakiyo Tanaka

Other Decks in Technology

Transcript

  1. 1 ミリ秒で起動する Full Platformのアプリケーションサーバー Liberty InstantOnで クラウドネイティブにひろがるJakarta EEの世界 ⽇本IBM ⽥中

    孝清 (Twitter @TTakakiyo)
  2. 2 ⾃⼰紹介 2 n ⽥中 孝清 n ⽇本アイ・ビー・エム株式会社 オートメーションソフトウェア テクニカルセールス

    n WebSphere Application Serverなどの テクニカルセールスを20年以上担当 n Twitter @TTakakiyo
  3. 3 Open Liberty / WebSphere Libertyとは n IBMが開発・公開しているOSSのJava EE /

    Jakarta EE / MicroProfileのランタイム n Eclipse Public Licenseで提供 / 無償で利⽤可能 n Open Libertyの成果を取り込み,IBMが販売する製品 n アプリや構成はOpen Libertyと同じものを利⽤可能 / バージョンはOpen Libertyと完全に同期 3 Open Liberty
  4. 4 エンタープライズJavaの業界動向 4 Spring Framework / Spring Boot MicroProfile Java

    EE Jakarta EE by Oracle by Red Hat kumuluzEE WebSphere traditional Launcher by Fujitsu
  5. 5 エンタープライズJavaの概要 nJava EE / Jakarta EE – 2000年ごろからバージョンアップを続けている業界標準仕様 –

    「アプリケーションサーバー」という実装形態が 昨今のクラウドネイティブ環境と親和性がないと敬遠されがち nMicroProfile – マイクロサービス・アーキテクチャーでアプリを実装するための新しい標準仕様 – 2016年から提供され,注⽬を集めているが,まだまだ機能が⾜りない nSpring Framework / Spring Boot – 旧Pivotal社(現在はVMwareに買収)によるフレームワーク – 先進的で⾼機能,DevOpsがやりやすく急速に⼈気が⾼まっている – バージョンアップへの追随が⼤変 5
  6. 6 エンタープライズJavaの概要 nJava EE / Jakarta EE – 2000年ごろからバージョンアップを続けている業界標準仕様 –

    「アプリケーションサーバー」という実装形態が 昨今のクラウドネイティブ環境と親和性がないと敬遠されがち nMicroProfile – マイクロサービス・アーキテクチャーでアプリを実装するための新しい標準仕様 – 2016年から提供され,注⽬を集めているが,まだまだ機能が⾜りない nSpring Framework / Spring Boot – 旧Pivotal社(現在はVMwareに買収)によるフレームワーク – 先進的で⾼機能,DevOpsがやりやすく急速に⼈気が⾼まっている – バージョンアップへの追随が⼤変 6 なんで︖︖
  7. 7 「アプリケーションサーバー」が敬遠されるようになった理由 アプリケーションサーバーの以下のような性質が, クラウドネイティブ時代に合わないとされているから n 導⼊や構成,アプリケーションのデプロイなどの運⽤負荷が⼤きい n サーバーのランタイムが⼤きい,重い,起動時間が遅い n アプリケーションサーバーの役割がプラットフォームの機能と重複する

    7
  8. 8 「アプリケーションサーバー」が敬遠されるようになった理由 アプリケーションサーバーの以下のような性質が, クラウドネイティブ時代に合わないとされているから n 導⼊や構成,アプリケーションのデプロイなどの運⽤負荷が⼤きい n サーバーのランタイムが⼤きい,重い,起動時間が遅い n アプリケーションサーバーの役割がプラットフォームの機能と重複する

    8 これらは Libertyならば解決できます
  9. 9 「アプリケーションサーバー」が敬遠されるようになった理由 アプリケーションサーバーの以下のような性質が, クラウドネイティブ時代に合わないとされているから n 導⼊や構成,アプリケーションのデプロイなどの運⽤負荷が⼤きい n サーバーのランタイムが⼤きい,重い,起動時間が遅い n アプリケーションサーバーの役割がプラットフォームの機能と重複する

    9 これらは Libertyならば解決できます
  10. 10 アプリケーションを開発し,実働環境で実⾏するまでの⼿順 開発環境 実働環境 コード作成 App Server導⼊ 構成 ビルド デプロイ

    実⾏ 通常のJava EEの アプリケーションサーバー 開発環境 実働環境 コード作成 ビルド 実⾏ 多くのMicroProfile実装や Spring Boot
  11. 11 アプリケーションを開発し,実働環境で実⾏するまでの⼿順 開発環境 実働環境 コード作成 App Server導⼊ 構成 ビルド デプロイ

    実⾏ 通常のJava EEの アプリケーションサーバー 開発環境 実働環境 コード作成 ビルド 実⾏ 多くのMicroProfile実装や Spring Boot Platform as Codeが やりにくい 😔 Platform as Codeが やりやすい 😁
  12. 12 LibertyならPlatform as Codeが簡単に実現 12 開発環境 実働環境 コード作成 ビルド ZIP展開

    実⾏ コード作成 ビルド 実⾏ または サーバー構成 導⼊可能 ZIP ランタイム (MavenがD/L) ビルド・ツール 実⾏可能 JAR or アプリ
  13. 13 Maven Libertyプラグイン 13 ├── pom.xml ├── src │ ├──

    main │ │ ├── java │ │ │ └── jp │ │ │ └── test │ │ │ └── HelloServlet.java │ │ ├── liberty │ │ │ └── config │ │ │ ├── jvm.options │ │ │ └── server.xml │ │ └── webapp │ │ ├── WEB-INF │ │ │ └── web.xml │ │ └── index.html │ └── test │ └── java │ └── jp │ └── test │ ├── ApplicationTest.java │ └── it │ └── EndpointIT.java └── target ├── LibertySample.war ├── LibertySample.zip プロジェクト構成ファイル アプリケーションの Javaソースファイル アプリケーションの Webコンテンツ アプリケーションを実⾏する Libertyサーバーの構成ファイル アプリ+Liberty+構成ファイルのZIP ビルド <plugin> <groupId>io.openliberty.tools</groupId> <artifactId>liberty-maven-plugin</artifactId> <version>3.7.1</version> </plugin>
  14. 14 14 Demo LibertyによるDevOps

  15. 16 「アプリケーションサーバー」が敬遠されるようになった理由 アプリケーションサーバーの以下のような性質が, クラウドネイティブ時代に合わないとされているから n 導⼊や構成,アプリケーションのデプロイなどの運⽤負荷が⼤きい n サーバーのランタイムが⼤きい,重い,起動時間が遅い n アプリケーションサーバーの役割がプラットフォームの機能と重複する

    16 これらは Libertyならば解決できます
  16. 17 サイズの⼩さなLibertyランタイム n モジュール化により, 本当に必要な機能だけを導⼊・利⽤できる 17 パッケージ ディスク メモリー Java

    EE 8 / Jakarta EE 8 + MicroProfile 4.1 125 MB 165 MB MicroProfile 4.1 56 MB 113 MB Servlet 4.0 24 MB 72 MB アプリケーションに必要な コンポーネントだけをデプロイ すべてのインスタンスで • メモリーを節減 • ディスクを節減 • デプロイ時間を迅速化 • インフラストラクチャー・ コストを削減 ($) • ランタイムを最⼩化する機能の ビルド・パイプラインへの統合 (Maven & Gradleプラグイン)
  17. 18 コンテナ時代は,起動時間の短さも重要となる VM環境とはことなり, コンテナ環境では頻繁に仮想環境の作成・起動・停⽌がおこなわれる n オートスケール(負荷に応じてコンテナのインスタンスを増減させる) – スムーズにおこなうためには,数秒以内の起動時間を実現する必要がある n Function

    / Serverless(リクエストがあったときにコンテナインスタンスを起動する) – 1秒以内の起動時間を実現する必要がある 18 時間 リクエスト レスポンス サーバーの 起動時間 サーバーでの 処理時間 応答時間
  18. 19 従来のJavaアプリケーションの起動の⾼速化の取り組み n Oracle Labsの研究プロジェクトとして開始された新しいJVM実装 n Javaのアプリケーションをネイティブイメージ化(実⾏可能ファイル化)することができ 数⼗〜数百msecでの起動を可能にする n ただし,Javaの全ての機能が利⽤できるわけではない

    – Javaの動的機能(リフレクション)をつかうには,事前に静的な解析や構成が必要 – Java EE / Jakarta EEアプリケーションサーバーをネイティブイメージ化することは,実質的に不可能 19
  19. 20 IBMの新しい起動の⾼速化︓Liberty InstantOn n Checkpoint/Restore機能を追加したOpenJ9 VMとの連携によって, WebSphere Liberty / Open

    Libertyの起動を⾼速化させる技術 n OpenJ9 VMは, LinuxのCRIU機能を利⽤ n 起動時間を 従来の約1/10まで 短縮することが可能 n 現在Beta版を公開 – 2023年にGA予定 20
  20. 21 Linux CRIUを利⽤したOpenJ9 VMのCheckpoint/Restore n CRIU(Checkpoint Restore In User space)

    – CheckPoint プロセスの状態をファイルに保存する – Restore ファイルに保存されたイメージからプロセスを復帰する n OpenJ9はこの機能を利⽤し, JVMの起動,アプリケーションの初期化が 終わったタイミングで, プロセスをCheckpointで保存できる n 保存したイメージから起動することで, 圧倒的に短い時間で処理を開始することが可能 21
  21. 22 22 Demo Liberty InstantOn

  22. 24 Liberty InstantOnのBetaについて n 基本的にコンテナで利⽤する技術として提供されます n CRIU機能が多くのroot権限を必要とするため, Podmanをrootfulで動かしたり,--privilegedを追加することが必要です – OpenShiftなどでの利⽤⽅法については,今後整理されていきます

    n 現在は,Java EEの全てのFeatureの対応は完了しておらず, Java EE 8 WebProfileおよびMicroProfile 4.1のAPIが利⽤できます – MDBやJava Batchなど,HTTPリクエストをトリガーとしないAPIについても対応するかは不明です n Intel CPUを使⽤したMac OS上で試す⽅法をQiitaで記事に書いています お⼿元で試してみることもできます – https://qiita.com/TTakakiyo/items/215a221ec90426880594 24
  23. 25 「アプリケーションサーバー」が敬遠されるようになった理由 アプリケーションサーバーの以下のような性質が, クラウドネイティブ時代に合わないとされているから n 導⼊や構成,アプリケーションのデプロイなどの運⽤負荷が⼤きい n サーバーのランタイムが⼤きい,重い,起動時間が遅い n アプリケーションサーバーの役割がプラットフォームの機能と重複する

    25 これらは Libertyならば解決できます
  24. 26 従来のアプリケーションサーバーの役割 26 業務処理 Java EE APIの提供 業務アプリケーション Java EEアプリケーションサーバー

    VM環境の提供 VMwareやLPARなど クラスタリング,WLM オートスケール,死活監視 バージョン管理・更新,etc. アプリケーションサーバーが 多くの役割を担っていた
  25. 27 クラウドネイティブ時代の実⾏環境では 27 業務処理 Java EE APIの提供 クラスタリング,WLM オートスケール,死活監視 バージョン管理・更新,etc.

    業務アプリケーション Java EEアプリケーションサーバー コンテナ環境の提供 OpenShiftやKubernetesなど クラスタリング,WLM オートスケール,死活監視 バージョン管理・更新,etc. ← 機能が重複する
  26. 28 クラウドネイティブ時代の実⾏環境では 28 業務処理 Java EE APIの提供 業務アプリケーション コンテナ環境の提供 OpenShiftやKubernetesなど

    クラスタリング,WLM オートスケール,死活監視 バージョン管理・更新,etc. Java EEアプリケーションサーバー ↑ APIの機能の提供に専念するべき
  27. 29 WebSphere Libertyで提供されている機能 29 WebSphere z/OS WebSphere ND WebSphere Liberty

    Core WebSphere Base zosConnect-1.2 zosLocalAdapters-1.0 zosSecurity-1.0 zosTransaction-1.0 zosWlm-1.0 couchdb-1.0 mongodb-2.0 wsSecurity-1.1 javaee-7.0 batchManagement-1.0 rtcomm-1.0 rtcommGateway-1.0 sipServlet-1.0 apiDiscovery-1.0 mediaServerControl-1.0 wsSecuritySaml-1.1 wsAtomicTransaction-1.2 scalingController-1.0 scalingMember-1.0 dynamicRouting-1.0 collectiveController-1.0 clusterMember-1.0 healthManager-1.0 healthAnalyzer-1.0 distributedMap-1.0 openid-2.0 openidConnectServer-1.0 openidConnectClient-1.0 osgiAppIntegration-1.0 spnego-1.0 collectiveMember-1.0 restConnector-1.0 sessionDatabase-1.0 ldapRegistry-3.0 webCache-1.0 javaMail-1.5 osgiConsole-1.0 json-1.0 timedOperations-1.0 monitor-1.0 oauth-2.0 serverStatus-1.0 wab-1.0 blueprint-1.0 webProfile-7.0 eventLogging-1.0 requestTiming-1.0 adminCenter-1.0 concurrent-1.0 bells-1.0 samlWeb-2.0 scim-1.0 federatedRegistry-1.0 constrainedDelegation-1.0 httpWhiteboard-1.0 osgiBundle-1.0 passwordUtilities-1.0 bluemixUtility-1.0 logstashCollector-1.0 javaee-8.0 webProfile-8.0 microProfile-2.0 microProfile-3.0 microProfile-4.0 microProfile-5.0 「従来のアプリケーションサーバー」で提供されていた機能 • 不要ならばOffにできる • そもそも製品の上位エディションでしか提供されていない jakartaee-9.1 webProfile-9.1
  28. 30 まとめ n Java EE / Jakarta EEのままでは, クラウドネイティブを活⽤できない……,というのは間違いです Libertyであれば,クラウドやコンテナの利点をとことんまで引き出すことができます

    n Open Liberty / WebSphere Libertyなら, Java EE / Jakarta EEのアプリ資産や開発者のスキルを活かしたまま クラウドネイティブの世界へ移⾏することができます n Liberty InstanOnは,Javaアプリケーションの制限が⾮常に少ない起動⾼速化技術であり, Function/Serverlessなど,Java EE / Jakarta EEの適⽤が難しいとされていた領域にも 活⽤の範囲を広げることができます 30
  29. 31 Libertyの利⽤⽅法を学習する n https://openliberty.io/guides/ – JDK,Git,Mavenがあれば実⾏できる チュートリアルを多数提供 31

  30. 32 Liberty Dojo n 2022年6⽉から8⽉にかけて,全4回で開催されたオンライン・セミナー – 「Cloud Nativeの世界でもJava EEを使える︕ OSSの実⾏環境

    Open Liberty」 https://ibm-developer.connpass.com/event/250329/ – 「Libertyの基本的な構成⽅法」 https://ibm-developer.connpass.com/event/252221/ – 「tWASからLibertyへのモダナイズ」 https://ibm-developer.connpass.com/event/252232/ – 「MicroProfileを触ろう」 https://ibm-developer.connpass.com/event/253664/ n 講義資料やビデオが参照可能 32
  31. 33 IBM Automation Community n IBM Automationのビジネスを協業させていただくパートナー様との関係を強化し、 技術情報を発信/共有するための⽇本のコミュニティ n 製品に関してのご質問、意⾒交換、イベント案内、

    コミュニティメンバーと交流を⾏うことができます 33 IBM AIOps Community IBM WebSphere & DevOps Community IBM Integration Community IBM Business Automation Community AIOps製品 (Instana, Turbonomic, Cloud Pak for Watson AIOps, Workload Scheduler) に関する日本語の技術情報を 共有・議論するために開設されています。 IBM WebSphere Application Serverに 関して、 技術者視点で機能や利用方法を 「日本語で 語る」ために開設したユーザー・グループです。 IBM Cloud Pak for Integration (API Connect, App Connect Enterprise, MQ, Aspera)に関する日本語の技術情報を 共有・議論するために開設されています。 IBM Cloud Pak for Business Automation (プロセスマイニング、RPA、BPM、BRMS、ECM) に 関する日本語の 技術情報を共有・議論するために 開設されています。