Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
【JJUG CCC 2019 Fall】JavaオンプレシステムをAKS + Quarkusに...
Search
Takaichi00
November 23, 2019
Technology
2
1.2k
【JJUG CCC 2019 Fall】JavaオンプレシステムをAKS + Quarkusに移行した話
Takaichi00
November 23, 2019
Tweet
Share
More Decks by Takaichi00
See All by Takaichi00
自分から始めるアジャイルの道 ~内発的動機をきっかけに変わった価値観~
takaichi00
0
140
Java developer introduced to Rust-ADC2022
takaichi00
0
220
野球人・落合博満さんから学ぶ、アジャイルなマインドセット・プラクティス
takaichi00
1
770
【CICD2021】デプロイメントパイプラインの原理原則を再確認する / Confirm Deployment Pipeline Principle
takaichi00
11
4.3k
【JTF2021】SonarQube をより有効活用する / Effective SonarQube
takaichi00
0
2.3k
JJUG CCC 2021 Spring-Resolving OOME with JFR
takaichi00
2
3.1k
【Yahoo! JAPAN Agile 2nd】野球人・落合博満さんから学ぶスクラムマスター / デベロッパー
takaichi00
0
2.6k
【Developers Boost 2020】凡人エンジニアの生存戦略
takaichi00
1
2.6k
【ソフトウェアテスト自動化カンファレンス2020】CI パイプラインでのテスト戦略とその実現方法
takaichi00
3
5.3k
Other Decks in Technology
See All in Technology
Amazon Kendra GenAI Index 登場でどう変わる? 評価から学ぶ最適なRAG構成
naoki_0531
0
110
Wvlet: A New Flow-Style Query Language For Functional Data Modeling and Interactive Data Analysis - Trino Summit 2024
xerial
1
110
ゼロから創る横断SREチーム 挑戦と進化の軌跡
rvirus0817
2
270
ブラックフライデーで購入したPixel9で、Gemini Nanoを動かしてみた
marchin1989
1
520
日本版とグローバル版のモバイルアプリ統合の開発の裏側と今後の展望
miichan
1
130
ずっと昔に Star をつけたはずの思い出せない GitHub リポジトリを見つけたい!
rokuosan
0
150
新機能VPCリソースエンドポイント機能検証から得られた考察
duelist2020jp
0
220
Storage Browser for Amazon S3
miu_crescent
1
140
大幅アップデートされたRagas v0.2をキャッチアップ
os1ma
2
530
MLOps の現場から
asei
6
640
Snykで始めるセキュリティ担当者とSREと開発者が楽になる脆弱性対応 / Getting started with Snyk Vulnerability Response
yamaguchitk333
2
180
podman_update_2024-12
orimanabu
1
270
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
40
2.4k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.3k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
28
4.4k
Optimizing for Happiness
mojombo
376
70k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
17
2.3k
Fireside Chat
paigeccino
34
3.1k
Faster Mobile Websites
deanohume
305
30k
Docker and Python
trallard
42
3.1k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
32
2.7k
Designing for Performance
lara
604
68k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5k
Transcript
Java オンプレシステムを AKS + Quarkus に移行した話 #jjug #jjug_ccc #ccc_m4a
髙市 智章 (Tomoaki Takaichi) Nov, 23, 2019【東京】JJUG CCC 2019 Fall
自己紹介 @Takaichi00 tomoaki.takaichi.5 ・髙市 智章(タカイチ トモアキ) ・ソフトバンク株式会社 入社3年目
・Java でのシステム開発 ・アジャイル開発実践 ・iTunes カード販売システム ・ソフトバンクショップ向けシステム
目次 ❏ Quarkus とは? ❏ Quarkus 採用の背景 ❏ Quarkus と
Thorntail (Wildfly Swarm) ❏ Quarkus のサンプル ❏ 実開発ではまったポイント
目次 ❏ Quarkus とは? ❏ Quarkus 採用の背景 ❏ Quarkus と
Thorntail (Wildfly Swarm) ❏ Quarkus のサンプル ❏ 実開発ではまったポイント
Quarkus とは ❏ GraalVM 内のコンパイラを用いて実行可能なネイティ ブバイナリを生成し、コンテナ化できる webフレーム ワーク ❏ Red
Hat 社がスポンサーの OSS プロジェクト
Quarkus 触ったことありますか? Quarkus で開発していますか? ご質問
❏ JavaEE の API を用いて簡単に Native Image 化でき、かつ高速起 動と低容量が実現できる ❏
Quarkus では CDI 実装として、ビルド時にバイトコードを生成し、 最適化する「arc」を使用している。よって java -jar での起動も高 速。(しかし CDI のすべての機能を実装しているわけではない) ❏ 「arc」の制限についてはこちらを参考 Quarkus の特徴
目次 ❏ Quarkus とは? ❏ Quarkus 採用の背景 ❏ Quarkus と
Thorntail (Wildfly Swarm) ❏ Quarkus のサンプル ❏ 実開発ではまったポイント
❏ 仮説検証型のシステム開発を行うなかで、オンプレの弱点 が気になるようになってきた ❏ もっと早く環境構築したい / 不要になったらすぐ破棄したい ❏ ⇒ クラウドの採用
❏ カンバンツールとして Azure DevOps を採用していた ❏ Azure Pipelines, Azure Repos などのツールチェーンは使 いこなせていなかった コンテナ化の背景 ~ クラウドの採用 ~ クラウドは Azure に決定!
❏ システム特性的に、Kubernetes との相性が良かった ❏ 「Kubernetes の導入時に考えるべきこと」(寺田佳央さんのブ ログ) ❏ 変更が頻繁に行われることが予想される ❏
大量の CPU, メモリのリソースを消費しない ❏ Kubernetes の熱狂性、将来性 ❏ エンジニアのモチベーション UP ❏ MS 社とのハックフェストの開催 ❏ Azure, AKS の十分なサポートが得られる環境 コンテナ化の背景 ~ AKS の採用~ ⇒ コンテナ化の必要性
❏ Spring や従来の JVM フレームワークはリフレクションや実行時 のアノテーション解析などを中心として構築されているため、高速 起動と低メモリ消費の両立は難しい ❏ 例えば Micronaut
はフレームワークレベルでリフレクションの利 用を制限し、アノテーションなどをコンパイル時に解決することで、 高速起動と低メモリ消費を実現 ❏ ⇒ コンテナ化を前提としたフレームワークが必要 ❏ 参考資料: Micronaut 1.0への道 - JVMベースのフルスタックフレームワーク 従来の JVM フレームワーク の課題
❏ Micronaut ❏ クラウドネイティブなサーバレスアプリケーションをJava や Groovy、Kotlin で記述可能な、JVM ベースのフルスタックフ レームワーク ❏
Grails の作者である Graeme Rocher 氏がプロダクトのリー ダー ❏ Helidon ❏ Netty を搭載した、マイクロサービスを作成するための Java ライブラリコレクション ❏ Project Helidon という名前で Oracle が公開しているOSS コンテナ化を前提としたフレームワーク
❏ JavaEE との親和性 ❏ JavaEE でのシステム開発経験があった ❏ 学習コスト、心理的障壁の少なさ ❏ native-image
を前提としたフレームワークである ❏ Micronaut は Spring のような使い勝手の良さが特徴で、ドキュ メントも豊富 ❏ しかし今回は上記理由を優先して見送り ❏ Helidon は Microprofile の仕様をサポートする Helidon SE で は GraalVM の native-image の利用をサポートしていないため 見送り Quarkus 採用の理由
目次 ❏ Quarkus とは? ❏ Quarkus 採用の背景 ❏ Quarkus と
Thorntail (Wildfly Swarm) ❏ Quarkus のサンプル ❏ 実開発ではまったポイント
Thorntail (Wildfly Swarm) で開発されたことあ りますか? ご質問
❏ Wildfly を取り込んで実行可能 jar (Uber-Jar) を生成 できる Java EE 対応のフレームワーク
❏ Red Hat 社が提供し、現在 2.x 系 と 4.x 系のバー ジョンが存在 Thorntail (Wildfly Swarm)
❏ Quarkus の登場に伴い、次期メジャーバージョンの開発 は終了 ❏ 2019/03/11 に発表された Thorntail のブログにて 「Quarkus
の登場にとても興奮している」「Quarkus は Thorntail 4.x 以上のものだ」との記載 Thorntail (Wildfly Swarm) の今後 ⇒ Red Hat 系で Java EE や Microprofile を利用 する場合は Quarkus を使いましょう!
目次 ❏ Quarkus とは? ❏ Quarkus 採用の背景 ❏ Quarkus と
Thorntail (Wildfly Swarm) ❏ Quarkus のサンプル ❏ 実開発ではまったポイント
実際に開発しているコードをもとにしたサンプルを公開予定 (絶賛作成中!) ❏ クリーンアーキテクチャを意識した実装 ❏ @QuarkusTest を使って DI を モックした
Controller のテスト (Spring の mockMvc を意識) ❏ H2 Database を使ったデータアクセスの単体テスト など... https://github.com/Takaichi00/quarkus-sample Quarkus サンプルコード QUARKUS - CREATING YOUR FIRST APPLICATION
Spring との起動時間の比較 ❏ 現在開発している システムの概略図 ❏ 画面は Spring Boot によるサーバーサイドレンダリ
ング、Backend API として Quarkus を採用 外部 API
Spring との起動時間の比較 ❏ 現在開発している Spring のプロジェクトと Quarkus のプロ ジェクトの比較 (ローカル
PC で検証 ) ❏ Spring では画面の実装があるため単純比較は難しいが、 java -jar の起動は 5s ほど Quarkus が早い Quarkus Spring コード行数 5,989 3,692 コンテナサイズ 157 MB 174 MB java -jar の起動時間 1.3 s - 1.5 s 6.0 s - 6.5 s
目次 ❏ Quarkus とは? ❏ Quarkus 採用の背景 ❏ Quarkus と
Thorntail (Wildfly Swarm) ❏ Quarkus のサンプル ❏ 実開発ではまったポイント
Native Image 化の断念 ❏ 導入検証時、GraalVM のネイティブコンパイルのタイミングで SSL 関連のエラーが発生 ❏ SunEC
ライブラリという暗号化を行うライブラリが extention を 追加しないと有効にならない (参考サイト) ❏ その他にも、ネイティブコンパイルにはビルド時に存在しないクラス をリフレクションできないなどの制約がある ❏ これらの制約から jar として起動することに決定 ❏ それでも JavaEE ランタイムのビルド時最適化を実装している ため起動は速い!
Uber-Jar 作成時の注意 ❏ Qurakus では pom.xml に設定を加えることで Uber-Jar の作 成も可能
❏ しかし、jar の中には署名 jar が含まれており、それを除外し ないと起動時にエラーが発生することがある (参考サイト)
❏ システム連携のため、 Apache CXF で SOAP クライアントを実装。 しかし Uber-Jar で起動すると、Web
サービス呼び出し時に NullPointerException が発生してしまう (参考サイト) ❏ Qurakus は独自プラグインで Uber-Jar を生成しているため、 Uber-Jar に設定ファイルが入らないことが原因 ❏ よって Apache CXF が正式対応されるまで Uber-Jar の生成は断 念 Uber-Jar の断念
SQL Database との相性 ❏ Azure を利用するため、DB は SQL Database を採用
❏ しかし Native Query を利用すると Dialect Error が発生し、 JPQL を利用すると問題は解決する ❏ しかし JPQL を利用すると JPA 特有の実装 (主キー前提、 @OneToMany など ) が生じてしまい、DB のスキーマも JPA に依 存した設計となってしまうという課題 ❏ MyBatis などの O/R Mapper などがサポートされると嬉しい
Quarkus での画面サポート ❏ Quarkus では JSP のサポートがされておらず、今 後もサポートされる予定は無いとのこと ❏ Unable
to forward from a JAX-RS service to JSP #1911 ❏ 一方で Micronaut は Thymeleaf に対応している
Quarkus のバージョンアップ対応 ❏ マイナーバージョンアップが約9日に1回行われるため、定期的な バージョンアップを行っている ❏ 現在の最新バージョンは 0.28.1 で、プロジェクトでも同じバー ジョンを使用
❏ xml を処理したいので JAXB を使いたい... バージョンアップしたら JAXB がサポートされた! ということも ❏ 公式アナウンスで 1.0 のリリースが発表された ❏ 現在 1.0.0.CR2 が公開中 ❏ 1.0.0.Final が 2019/11/25(月) にリリース予定!
❏ native-image でなくても java -jar の起動も高速 ❏ JavaEE 経験がある開発者との親和性が高い ❏
Spring API も一部サポートされている ❏ Spring Web, Spring DI, Spring Data がサポート ❏ 既存アプリケーションでも徐々に Quarkus に移行すると いった方法が選択できるのでは まとめ
❏ native-image での商用稼働はこれからのチャレンジ ❏ 開発チームに、頻繁な更新への対応や未知な問題に遭遇 しても対応できる余裕とスキルセットが必要 ❏ 使いこなすには MicroProfile の仕様理解も必要
❏ Spring の MockMvc のような柔軟なテストはできない ❏ 文献が少ない (日本語は特に...) まとめ
みなさんもぜひ Quarkus を使いましょう!! そして情報発信してくれると嬉しいです!! さいごに
ご清聴ありがとうございました