SlideShare a Scribd company logo
GraalVM Native Imageが
見せた未来
自己紹介
松本 宏紀 ( まつもと ひろき )
● 株式会社ブロードリーフ 基盤開発部 チーフ・アーキテクト
● Kubernetes Sapporo for Beginners主催者。
● オフショアラボ・チームリーダー
● デブサミ2019「Spring Bootでマイクロサービス作って苦労したお話」登壇
● Google Cloud Next ‘19 in Tokyo 「大規模エンタープライズ システムをマイクロ サービスで刷新。そ
の開発プロセス再定義まで道のり」登壇
Twitter :@hirokimatsumo13
GraalVM Native Imageで、
CPU、Memoryリソースの割当てを削減できる
Javaでも小さな・疎結合なサービスを
開発しやすくなる。
Cassandra
Elasticsearch
Kafka + Zookeeper
( broker )
Kafka Publisher
( Cassandra Trigger)
Kafka Consumer
データの蓄積
データの変更イベント配信
データの変更イベント管理
データの変更イベント受信
データの柔軟検索
背景
Cassandra
Elasticsearch
Kafka + Zookeeper
( broker )
Kafka Publisher
( Cassandra Trigger)
Kafka Consumer
背景
CPU: 500m、 Mem:1Gi
CPU: 500m、 Mem:1.2Gi
CPU: 300m、 Mem:300Mi
CPU: 500m、 Mem:900Mi
データの蓄積
データの変更イベント配信
データの変更イベント管理
データの変更イベント受信
データの柔軟検索
合計 = CPU: 1,800m、Mem: 3.4Gi
Cassandra
Elasticsearch
Kafka + Zookeeper
( broker )
Kafka Publisher
( Cassandra Trigger)
Kafka Consumer
背景
Kafka Consumer
Elasticsearch
Kafka Consumer
Google Cloud
Storage
Kafka Consumer
Web API
データの利用用途が増えて5つconsumerが増える。
Kafka Consumer
Web API
ローカルPCで動かすの辛くなる。
バックグラウンドの仕組みだけで、
CPU: 3,000m、Mem: 4.3Gi必要になる。
(一番メモリ使っているのはChromeだけど…)
Javaで頑張りたい
GraalVM
LLVMベースの言語(Java、JavaScript、Ruby、Python…)の多言語をサポー
トする仮想マシン。
GraalVM Native Imageは、JVMベースの言語(Java、Scala、Kotlin)を、ス
タンドアロンの実行可能ファイルにコンパイルするもの。
JavaVMの実行環境が不要。
Quarkus
KubernetesネイティブなGraalVM & OpenJDKで動作するJava Framework。
Quarkus + GraalVM Quarkus + OpenJDK
Traditional Cloud
Native Stack
Memory(RSS) Usage 13MB 74MB 140MB
Boot Time 0.014sec 0.75sec 2.5Sec
参考:https://quarkus.io/
GraalVM+Quarkusで
快適Javaライフを試してみる。
開発
Quarkusのmavenプロジェクト雛形生成。
$ mvn io.quarkus:quarkus-maven-plugin:0.21.2:create 
-DprojectGroupId=${groupId} 
-DprojectArtifactId=${artifactId}
$
開発
Elasticsearch、kafka周りの拡張のライブラリを追加。
…Elasticsearch周りが無い。
とりあえず、Elasticsearchの公式Java ライブラリをdependencyに追加する。
# Quarkus拡張ライブラリ一覧確認
$ mvn quarkus:list-extensions
# Kafkaのライブラリ追加。
$ mvn quarkus:add-extension -Dextensions="quarkus-kafka-client"
# pom.xmlに直接 elasticsearch-rest-high-level-clientを追加。
Reactive(MicroProfile) な方のKafkaは、
複数件の一括処理ができないので、通常の
kafkaを利用。
開発
VSCodeでごにょごにょ開発する・・・。
開発
JavaVM上で動作確認をする。
$ mvn compile quarkus:dev
開発
Native Imageを作って動作確認する。
…動かない。
$ ./mvnw clean package -U -Pnative -Dnative-image.docker-build=false
$ docker build -f src/main/docker/Dockerfile.native -t $DOCKER_IMAGE .
$ docker run -i --rm $DOCKER_IMAGE
Native Imageへの壁
参考:https://quarkus.io/guides/writing-native-applications-tips#native-in-extension
○ データクラスに、@RegisterForReflectionをつける。
ObjectMapper#readValue(in,XXX.class)でエラーになる。
○ 3rd Partyライブラリが結構動かない。必要に応じてSubstituteで書き換えが必要。
Elasticsearchもquarkus-elasticsearch-rest-client利用した。
○ native imageビルドする際、staticオプションをつけてもlibc周りは必要。
scratchでは動かず。100MB程度のdocker image sizeになる。
○ Windows環境だとnative-image build on dockerが終わらない。
Linux環境化でもnative-imageのビルド時間:4分程度。
○ ObjectOutputStream/ObjectInputStreamは未サポートだったりトライ&エラーがまだ
必要な段階。
壁の向こう側
Quarkus + GraalVM Spring Boot + OpenJDK
Deployments Memory Limit 70MB 300MB
Boot Time + Warm up 15秒 5分
Throughput 25.4 message/sec 27.0 message/sec
Kubernetes DeploymentsでCPU:limit = 100msの場合。
※Warm up…Elasticsearch index定義のjsonファイル400個の読み込み + kafkaへの接続。
※kafkaの1messageのサイズは平均5KB。pollするmax sizeが10なので調整すればスループットは上がる。
ローカルPCで動かすの辛くなる。
バックグラウンドの仕組みだけで、
CPU: 3,000m、Mem: 4.3Gi
CPU: 1,900m、Mem: 3.5Gi
必要になる。
( ちょっと軽減された ☺ )
多くの分散サービスをJavaで開発している場
合、インフラコストを大幅に削減できる未来
を垣間見る事ができた。
ご静聴ありがとうございました。

More Related Content

PDF
ぼうけんにでかけよう Kubernetes KEDA
PDF
Spring native について
PDF
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
PDF
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
PDF
DevOpsに求められる様々な技術とその連携の学習方法
PDF
20190604 Containerized MagicOnion on kubernetes with Observability with New R...
PPTX
Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能
PDF
Kubernetes & Google Container Engine; DockerコンテナをGKEでクラスタリングしてみた
ぼうけんにでかけよう Kubernetes KEDA
Spring native について
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
DevOpsに求められる様々な技術とその連携の学習方法
20190604 Containerized MagicOnion on kubernetes with Observability with New R...
Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能
Kubernetes & Google Container Engine; DockerコンテナをGKEでクラスタリングしてみた

What's hot (20)

PDF
Node.jsアプリの開発をモダン化するために取り組んできたこと
PDF
ミッション : メガクラウドを安全にアップデートせよ!
PDF
Open Source x AI
PPTX
AWS IoTを使った双方向通信システムの実装と注意点
PDF
ソフトバンクにおける Java による クラウドネイティブの実現
PDF
Azureをフル活用したサーバーレスの潮流について
PPTX
SpringIO2019報告_Kotlin関連
PDF
1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...
PDF
MagicOnion入門
PDF
TypeScript製フレームワーク「Nest」のご紹介
PPTX
Desktop app dev strategy for .net core 3.0
PDF
5G時代のアプリケーションとは 〜 5G+MECを活用した低遅延アプリの実現へ 〜
PDF
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか
PDF
Bluemix(Node-RED)を使った空間の付加価値提案
PPTX
ニフクラでも できる!Kubernetes。
PPTX
【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介
PDF
5G時代のアプリケーション開発とは - 5G+MECを活用した低遅延アプリの実現へ
PDF
[第50回 Machine Learning 15minutes! Broadcast] Azure Machine Learning - Ignite ...
PPTX
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
PDF
6 月 18 日 Next - あっという間の、Google Cloud Platform 開発ガイド
Node.jsアプリの開発をモダン化するために取り組んできたこと
ミッション : メガクラウドを安全にアップデートせよ!
Open Source x AI
AWS IoTを使った双方向通信システムの実装と注意点
ソフトバンクにおける Java による クラウドネイティブの実現
Azureをフル活用したサーバーレスの潮流について
SpringIO2019報告_Kotlin関連
1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...
MagicOnion入門
TypeScript製フレームワーク「Nest」のご紹介
Desktop app dev strategy for .net core 3.0
5G時代のアプリケーションとは 〜 5G+MECを活用した低遅延アプリの実現へ 〜
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか
Bluemix(Node-RED)を使った空間の付加価値提案
ニフクラでも できる!Kubernetes。
【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介
5G時代のアプリケーション開発とは - 5G+MECを活用した低遅延アプリの実現へ
[第50回 Machine Learning 15minutes! Broadcast] Azure Machine Learning - Ignite ...
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
6 月 18 日 Next - あっという間の、Google Cloud Platform 開発ガイド
Ad

More from Rakuten Group, Inc. (20)

PDF
EPSS (Exploit Prediction Scoring System)モニタリングツールの開発
PPTX
コードレビュー改善のためにJenkinsとIntelliJ IDEAのプラグインを自作してみた話
PDF
楽天における安全な秘匿情報管理への道のり
PDF
What Makes Software Green?
PDF
Simple and Effective Knowledge-Driven Query Expansion for QA-Based Product At...
PDF
DataSkillCultureを浸透させる楽天の取り組み
PDF
大規模なリアルタイム監視の導入と展開
PDF
楽天における大規模データベースの運用
PDF
楽天サービスを支えるネットワークインフラストラクチャー
PDF
楽天の規模とクラウドプラットフォーム統括部の役割
PDF
Rakuten Services and Infrastructure Team.pdf
PDF
The Data Platform Administration Handling the 100 PB.pdf
PDF
Supporting Internal Customers as Technical Account Managers.pdf
PDF
Making Cloud Native CI_CD Services.pdf
PDF
How We Defined Our Own Cloud.pdf
PDF
Travel & Leisure Platform Department's tech info
PDF
Travel & Leisure Platform Department's tech info
PDF
OWASPTop10_Introduction
PDF
Introduction of GORA API Group technology
PDF
100PBを越えるデータプラットフォームの実情
EPSS (Exploit Prediction Scoring System)モニタリングツールの開発
コードレビュー改善のためにJenkinsとIntelliJ IDEAのプラグインを自作してみた話
楽天における安全な秘匿情報管理への道のり
What Makes Software Green?
Simple and Effective Knowledge-Driven Query Expansion for QA-Based Product At...
DataSkillCultureを浸透させる楽天の取り組み
大規模なリアルタイム監視の導入と展開
楽天における大規模データベースの運用
楽天サービスを支えるネットワークインフラストラクチャー
楽天の規模とクラウドプラットフォーム統括部の役割
Rakuten Services and Infrastructure Team.pdf
The Data Platform Administration Handling the 100 PB.pdf
Supporting Internal Customers as Technical Account Managers.pdf
Making Cloud Native CI_CD Services.pdf
How We Defined Our Own Cloud.pdf
Travel & Leisure Platform Department's tech info
Travel & Leisure Platform Department's tech info
OWASPTop10_Introduction
Introduction of GORA API Group technology
100PBを越えるデータプラットフォームの実情
Ad

GraalVM Native Imageが見せた未来