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

Eclipse MicroProfile 4.0の状況と利用方法の展望について / Overv...

Eclipse MicroProfile 4.0の状況と利用方法の展望について / Overview of Eclipse MicroProfile 4.0

2020/11/07開催の外部カンファレンス「JJUG CCC 2020 Fall」に登壇した際の資料です。
https://ccc2020fall.java-users.jp/

More Decks by 三菱UFJインフォメーションテクノロジー株式会社

Other Decks in Technology

Transcript

  1. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    Eclipse MicroProfileの進化状況 と利用方法の展望について 三菱UFJインフォメーションテクノロジー株式会社 デジタルプロデュース部 髙橋 博実 1
  2. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    髙橋 博実 たかはし ひろみ 社内のR&D(先進技術調査・開発)を担当 これまでのお仕事 市場リスク計算に 関するアプリ開発 社内アプリケーション フレームワーク開発 スマートフォン アプリ開発(Scrum開発) 2 新技術調査、社内推進 Javaカンファレンス参加歴 JavaOne 2010頃から複数回, Oracle Code One 2019 SpringOne 2018 等 自己紹介
  3. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    3 JJUG CCC 2018 Fall Eclipse Cheについて JJUG CCC 2019 Spring Eclipse MicroProfileについて AgileTechExpo Episode0 MUITのアジャイル開発の 取り組みについて 外部登壇 雑誌寄稿 日経SYSTEMS 2017年6月号 「レガシーJava」をモダナイズしよう 自己紹介
  4. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    会社紹介 三菱UFJ銀行をはじめとしたMUFGのIT戦略を支える! 三菱UFJニコス 三菱UFJモルガン・スタンレー証券 三菱UFJ信託銀行 三菱UFJ銀行 三菱UFJインフォメーションテクノロジー(MUIT) 三菱UFJフィナンシャル・グループ などグループ会社を 多数サポート システム開発・保守運用を支援 4
  5. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    会社紹介 181百万円 (三菱UFJ銀行 85%、三菱UFJフィナンシャル・グループ 15%) 資本金 従業員 1,982名(2020年4月現在) 事業内容 主として三菱UFJ銀行、並びに三菱UFJフィナンシャル・グループ 各社の業務等に関する、システムの企画・設計・開発・保守・運用 設立 1988年6月 ※詳しい沿革は、当社HPをご覧ください 本社 東京都中央区晴海二丁目1-40 採用担当 メール: [email protected] 検索ワード: MUIT 5
  6. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    目次 ◼ Eclipse MicroProfile概要 ◼ Eclipse MicroProfileの各種機能の紹介 ◼ 注目機能の一つであるLRAについて ◼ 今後の展望について Copyright(C) 2019 Mitsubishi UFJ Information Technology Ltd. All rights reserved. 6
  7. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    目次 ◼ Eclipse MicroProfile概要 ◼ Eclipse MicroProfileの各種機能の紹介 ◼ 注目機能の一つであるLRAについて ◼ 今後の展望について Copyright(C) 2019 Mitsubishi UFJ Information Technology Ltd. All rights reserved. 7
  8. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    Eclipse MicroProfileとは ◼ Java EE(今後はJakarta EE )技術をベースし、マイクロサービス構築のための エンタープライズJavaを最適化するためのコミュニティベースの標準仕様群 ◼ 仕様策定メンバーとしては、アプリケーションサーバーベンダー および各地のJavaユーザーグループで構成されている Copyright(C) 2019 Mitsubishi UFJ Information Technology Ltd. All rights reserved. Payara 富士通 Tomitribe IBM Red Hat Microsoft Hazelcast Oracle SouJava KamuluzEE Hammock Lightbend London Java Community 8
  9. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    Java EE、Jakarta EEとの機能差異 ◼ Eclipse MicroProfileはJava EEのバージョンアップの進化が遅いという課題から 誕生した経緯もあり、以下の状況となっている ⚫ Java EE (次バージョンではJakarta EE) の一部機能をサポート - JAX-RS - CDI - JSON-P 等 ⚫ Eclipse MicroProfile独自の機能をスピード感を持って拡充。以下は代表例 - Config - Fault Tolerance - Health Check - Open Tracing Copyright(C) 2019 Mitsubishi UFJ Information Technology Ltd. All rights reserved. ※https://microprofile.io/ より画像引用 9
  10. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    スタンドアロン仕様 先ほどの図に記載があったもの以外にスタンドアロン仕様として以下も存在する ◼ Reactive Streams Operators ⚫ 非同期ストリーミングを提供する2つの異なるライブラリが、相互にデータをストリーミングできるようにする Reactive Streamsを3rd Party製ライブラリ依存とならないように標準仕様化したもの ◼ Reactive Messaging ⚫ Reactive Streamsに基づく非同期メッセージングに関する標準仕様 ◼ GraphQL ⚫ JavaでのGraphQLの開発において3rd Party製ライブラリ依存とならないように標準仕様化したもの ◼ Context Propagation ⚫ マネージスレッド(コンテナによって管理されるスレッド)によってサポートされるCompletableFutureを取得、 管理管理を容易化する標準仕様 ◼ Long Running Action ⇨ 詳細後述 10
  11. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    これまでのリリース推移 2017 2018 2019 2020 MircoProfile 1.0(Fall 2016) JAX-RS2.0 CDI 1.0 JSON-P 1.0 MircoProfile 1.1 (Aug 2017) Config 1.0 MircoProfile 1.2 (Sep 2017) Config 1.1 Fault Tolerance1.0 Health1.0 Metrics1.0 JWT1.0 MircoProfile 1.3 (Dec 2017) Config 1.2 Metrics1.1 OpenApi1.0 Open Tracing1.0 Rest Client1.0 MircoProfile 1.4 (June 2018) Config 1.3 Fault Tolerance1.1 JWT1.1 Open Tracing1.1 Rest Client1.1 MircoProfile 2.0 (July 2018) JAX-RS2.1 (Java EE8) CDI2.0(Java EE8) JSON-P1.1(Java EE8) JSON-B1.0(Java EE8) MircoProfile 2.1 (Oct 2018) Open Tracing1.2 MircoProfile 2.2 (Feb 2019) Fault Toleraance2.0 OpenAPI1.1 Open Tracing1.3 Rest Client1.2 MircoProfile 3.0 (June 2019) Metrics2.0 Health Check2.0 Rest Client1.3 MircoProfile 3.2 (Nov 2019) Metrics2.2 Health Check2.1 MircoProfile 3.1 (Oct 2019) Metrics2.1 Health Check2.1 MircoProfile 3.3 (Feb 2020) Config1.4 Metrics2.3 Fault Tolerance2.1 Rest Client1.4 Health Check 2.2 MircoProfile 4.0 (Nov 2020予定) Config2.0 Metrics3.0 Fault Tolerance3.0 Rest Client2.0 Health Check 3.0 JWT RBAC1.2 OpenAPI2.0 Open Tracing2.0 高頻度のリリースが継続されている Java EEのバージョンアップ追随 などもされている 11
  12. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    標準仕様を採用するということについて ◼ Eclipse MicroProfileは仕様群であり、実装は持たない (独自進化のSpringBootとは対極) ◼ 仕様に則ってライブラリを実装する製品提供者と、仕様に則ってライブラリを実装する アプリ開発者双方にとってメリットのあるかたちとなっている Eclipse MicroProfileなどの 標準仕様 Eclipse MicroProfileの仕様に 則った製品 アプリケーション実装部分 アプリ開発者 実装する 仕様を 理解する 製品、 ライブラリを 用意する 標準仕様を使うことのメリット アプリ開発者は標準仕様を理解する ことで、どの製品であっても スキルやソースの流用が可能 例1:AプロジェクトではPayaraを 使っているがBではLibertyを使う 開発者のキャッチアップがしやすい 例2:Aプロジェクトは製品EOLの タイミングでLibertyに乗り換える その際の影響が限定的になる 13
  13. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    UberJar ◼ MicroProfile自体の仕様に入っているわけではないが、 MicroProfile実装はUberJar機能を 保有していることが多い ◼ UberJarとは、一つのJarファイルの中に依存ライブラリを含む全てのライブラリを含んで アーカイブする形式を示す ◼ Java EEでのアプリケーションの場合、①アプリケーションサーバの起動、②業務アプリケー ションのデプロイという2段階であったが、UberJar形式の場合はアプリケーションサーバ 関連ライブラリも含めて一つのJarファイルとなるため取り扱いが楽になる アプリケーションWar or Ear Java EEアプリケーションサーバ Java EE サーバのアプリ実行 ②アプリのデプロイ ①アプリケーション サーバの起動 UberJar アプリケーション実装部分 アプリケーションサーバ 関連も含む依存ライブラリ UberJar形式でのアプリ実行 ①アプリの 実行のみ 14
  14. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    簡単に試すには ◼ MicroProfile Starterが便利(MicroProfile 3.3リリース時にGA) ⚫ 見た目どおり、Spring Initializrに提供機能も似ている ⚫ テンプレートソースプロジェクトのダウンロードが可能 MicroProfile のバージョンを 選定 実装サーバーを選定 (TomEE、Payara Micro、Open Liberty など) MicroProfile 各機能の利用 有無を選定 Java SEの バージョンを選定 現状は 8 or 11 Copyright(C) 2019 Mitsubishi UFJ Information Technology Ltd. All rights reserved. プロジェクトの ソース一式の ダウンロード 15
  15. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    目次 ◼ Eclipse MicroProfile概要 ◼ Eclipse MicroProfileの各種機能の紹介 ◼ 注目機能の一つであるLRAについて ◼ 今後の展望について Copyright(C) 2019 Mitsubishi UFJ Information Technology Ltd. All rights reserved. 16
  16. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    JAX-RS(Java EE) ◼ REST形式のサービスを作成する仕様 ◼ 次期Jakarta EEのバージョンでは Jakarta RESTful Web Services に名称変更 サービスA or 各種クライアント サービスB ここ 17
  17. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    CDI(Java EE) ◼ Dependency Injectionに関する仕様 ◼ 次期Jakarta EEのバージョンでは Jakarta Contexts and Dependency Injection に名称変更 サービス ここ 18
  18. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    JSON-B,JSON-P(Java EE) ◼ JSONを扱う仕様 ◼ 次期Jakarta EEのバージョンでは Jakarta JSON Binding Jakarta JSON Processing に名称変更 サービスA or 各種クライアント サービスB ここ 19
  19. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    Rest Client ◼ RESTクライアントに関する仕様 ◼ TypeSafeである サービスB ここ サービスA 20
  20. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    Fault Tolerance ◼ マイクロサービスとしてアプリケーションを作る際に別のサービスとの関連と、 自サービス内のビジネスロジックを分離することを目的とした機能 サービスB ここ サービスA 21
  21. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    Config ◼ 各種環境毎の設定の切り替えを容易にする機能 サービス ここ ソースコード内のデフォルト値 設定が有効となる優先度 設定ファイルで指定した値 環境変数 実行時引数などの システム変数 22
  22. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    Health ◼ サービスのヘルスチェック(生死監視)応答に関する機能 ◼ Kubernatesで使われる、LivenessチェックとReadinessチェックの仕様を保持 サービス ここ 生死確認通信 23
  23. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    JWT ◼ OpenID Connect (OIDC) と JSON Web Tokens (JWT)を使って認証機能 ◼ role based access control (RBAC)で作られるマイクロサービスとして 提供されることを前提としている サービス ここ 24
  24. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    Open Tracing ◼ マイクロサービスでは、どのサービスが遅延しているか、どのサービスがどんな頻度で エラーとなっているかを可視化しておくことが重要 ◼ 本機能にて容易にトレース結果を出力することが可能 サービス ここ 25
  25. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    Metrics ◼ 運用時に必要なメトリクスを提供する機能を示した仕様 ◼ 設定なしに以下出力可能 サービス ここ 26
  26. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    OpenAPI ◼ OpenAPI v3 specificationに沿ったAPI仕様を提供する機能 ◼ 設定なしで出力可能 サービス ここ 27
  27. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    目次 ◼ Eclipse MicroProfile概要 ◼ Eclipse MicroProfileの各種機能の紹介 ◼ 注目機能の一つであるLRAについて ◼ 今後の展望について Copyright(C) 2019 Mitsubishi UFJ Information Technology Ltd. All rights reserved. 28
  28. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    Long Running Action ◼ データをロックすること無く、グローバルに一貫した結果を保証する方法で 長期実行アクティビティを調整するための疎結合サービス用のAPI ◼ OASIS のWeb Services Composite Application Framework Technical CommitteeによってLong Running Action transaction modelと2006年に発表 された仕様に基づいてマイクロサービスアーキテクチャベースに見直し定義 ◼ Microservices Patterns With examples in Javaという書籍でも紹介されている Sagaパターンについても、仕様の中では考慮されている ◼ 同書籍の概要については、以下サイトにまとまっている ⚫ https://microservices.io/patterns/index.html サービスA サービスB サービスC Sagaパターンでサービス毎に戻す例 29
  29. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    LRAのシーケンス ◼ LRAのステータスを管理するLRAコーディネータを中心として、 各サービスが参加者 (Participants)となり、LRAのステータスを管理する ◼ HelidonはLRAを実現するためにNarayana実装を利用している ◼ 各サービスのローカルトランザクション機構のみを利用 https://github.com/eclipse/microprofile-lra/blob/master/spec/src/main/asciidoc/microprofile-lra-spec.adoc 30
  30. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    LRAの各種アノテーション アノテーション名 仕様 @LRA LRAのライフサイクル管理対象であることを示す REQUIRED(LRA対象から呼ばれた際は合流、そうでなければ新規LRAス コープであることを示す), REQUIRES_NEW(常に新規LRAスコープ)などを属性に指定 @Compensate LRAをキャンセルした場合に呼び出されるメソッドを示す @Complete LRAをクローズした場合に呼び出されるメソッドを示す @Forget このLRAに割り当てられた任意のリソースを解放できるメソッド を示す @Leave このクラスがこのLRAに関心がないことを示す @Status この注釈が付いたメソッドを呼び出す場合、ステータスを報告す る必要があることを示す 31
  31. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    LRA実装イメージ LRAの開始 別サービス呼び 出し LRAの開始 されていたら 加入 キャンセルの場合は コーディネーターから 呼ばれる キャンセルの場合 はコーディネーター から呼ばれる 正常終了した際に コーディネータから呼 ばれる https://github.com/paulparkinson/helidon-examples-lra 32
  32. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    目次 ◼ Eclipse MicroProfile概要 ◼ Eclipse MicroProfileの各種機能の紹介 ◼ 注目機能の一つであるLRAについて ◼ 今後の展望について Copyright(C) 2019 Mitsubishi UFJ Information Technology Ltd. All rights reserved. 33
  33. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    今後の展望について ◼ WildFly、JBoss EAPなど、Java EE(JakartaEE)のアプリケーションサーバであっても MircroProfileの仕様をサポートする製品が出てきている ⚫ 例:JBoss EAP XP (Eclipse MicroProfile Expansion Pack) ◼ 既存システムのレベルアップ時には、こういったアプリケーションサーバを利用しつつ MicroProfileの豊富な機能利用をしていきたい ◼ SpringBootを中心とした、最近のライブラリのEOL期間が短期間であることは、 多くのシステムを持つ企業にとっては厳しいものがある状況 ◼ マイクロサービス化して一つ一つが小さくなっても数が多ければバージョンアップは 順次やっていかざるを得なく、EOL期間内に間に合わないので検討が必要 34
  34. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    まとめ ◼ Eclipse MicroProfileは2016年の登場以降、急激な勢いで進化を遂げている ◼ Java EE関連でこれまで機能具備が追いついていなかったCloud Nativeなアプリケーション で必要な機能が中心 ◼ 手軽に楽に開発できるSpringBootも良いが、これまでのJava EE関連の資産、スキル流用とい う観点では、MicroProfile関連も利用の視野に入れてみてはどうか? ◼ MicroProfile Starterもあり、手軽に使いやすい状況になっているので 皆さんも是非触ってみて、要望の意見出しなどコントリビュート活動を一緒に していきましょう 35
  35. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    共に変えていく仲間を募集します 変革の時期に共に進めていく、Java Developer、DevOpsエンジニア、 アーキテクトなど、新しい仲間を迎え、進めていきたく宜しくお願いします。 気軽にお声かけ、メールください。 採用担当 メール: [email protected] 検索ワード: MUIT 36
  36. Copyright(C) 2020 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    ◼ 本プレゼンテーションにより、貴社と三菱UFJインフォメーションテクノロジー株式会社の間 には何ら委任その他の契約関係が発生するものではなく、当社が一切法的な義務・責任を負う ものではありません。 ◼ 本資料は信頼できると考えられる各種データに基づいて作成されていますが、当社はその正確 性、完全性を保証するものではありません。 ◼ ここに示したすべての内容は、当社の現時点での判断を示しているに過ぎません。 ◼ また、本資料に関連して生じた一切の損害については、当社は責任を負いません。 ◼ その他専門的知識に係る問題については、必ず貴社の弁護士、税理士、公認会計士等の専門家 にご相談の上ご確認下さい。 37