2019/11/23 JJUG CCC 2019 Fall
「多言語対応の仮想マシンGraalVMが照らす未来」のセッションスライドです。
---
オラクル社からGraalVMというOSSプロダクトが発表され、話題を呼んでいます。GraalVMは、Javaで書かれたJITコンパイラ、Graalを搭載しています。さらに、言語実装用のフレームワークTruffleを提供しており、そのフレームワークを使って実装したJavaScriptやRuby、Pythonなど他の言語を、GraalVMは高いパフォーマンス実行できます。GraalVMを多言語対応の仮想マシンと呼ぶ理由です。加えて、それらすべての言語間で、相互に呼び出しができます。また、ネイティブイメージを作成し、JVMを利用せずにアプリケーションを実行できます。MicronautやQuarkus、Helidonといった最新のフレームワークが、この機能を利用して起動時間の短縮を図っています。ともすれば、GraalVMとは、ネイティブイメージを作成するためのものである、というイメージを持たれている方もいるかもしれません。しかし、GraalVMが持つパワーは、それだけではありません。このセッションでは、上述のGraalVMの概要の説明やデモに加え、単にGraalVMの使い方に留まらず、GraalVMによって今後何が実現されるのか、世界でのGraalVMの活用事例、Java on iOSとの関連、といったことお話しします。
2019/11/23 JJUG CCC 2019 Fall
「多言語対応の仮想マシンGraalVMが照らす未来」のセッションスライドです。
---
オラクル社からGraalVMというOSSプロダクトが発表され、話題を呼んでいます。GraalVMは、Javaで書かれたJITコンパイラ、Graalを搭載しています。さらに、言語実装用のフレームワークTruffleを提供しており、そのフレームワークを使って実装したJavaScriptやRuby、Pythonなど他の言語を、GraalVMは高いパフォーマンス実行できます。GraalVMを多言語対応の仮想マシンと呼ぶ理由です。加えて、それらすべての言語間で、相互に呼び出しができます。また、ネイティブイメージを作成し、JVMを利用せずにアプリケーションを実行できます。MicronautやQuarkus、Helidonといった最新のフレームワークが、この機能を利用して起動時間の短縮を図っています。ともすれば、GraalVMとは、ネイティブイメージを作成するためのものである、というイメージを持たれている方もいるかもしれません。しかし、GraalVMが持つパワーは、それだけではありません。このセッションでは、上述のGraalVMの概要の説明やデモに加え、単にGraalVMの使い方に留まらず、GraalVMによって今後何が実現されるのか、世界でのGraalVMの活用事例、Java on iOSとの関連、といったことお話しします。
Introduction to GraalVM and Native ImageKoichi Sakata
2019/08/23 JVM Language Summit Report Event at KanJava JUG
https://kanjava.connpass.com/event/139770/
This slide is about GraalVM, especially SubstrateVM that is able to generate native images.
This is the presentation which was showed at Microsoft Tier1 event de:code 2019. In this presentation, I showed that there is a lot of option for Java Developer to use the Microsoft Azure.
28. Kubernetes における Java
Kubernetes でアプリケーションをコンテナとして管理するようになると、1
コンテナのコア数、メモリは小さい傾向となるため、これまでのメニーコ
ア、大規模ヒープが利用できる JVM の優位性は必ずしもアドバンテー
ジとは言えない。
Kubernetes
VM VM VM VM VM VM VM VM
29. The Twelve-Factor App
I. コードベース
バージョン管理されている1つのコードベースと複数のデプロイ
VII. ポートバインディング
ポートバインディングを通してサービスを公開する
II. 依存関係
依存関係を明示的に宣言し分離する
VIII. 並行性
プロセスモデルによってスケールアウトする
III. 設定
設定を環境変数に格納する
IX. 廃棄容易性
高速な起動とグレースフルシャットダウンで堅牢性を最大化する
IV. バックエンドサービス
バックエンドサービスをアタッチされたリソースとして扱う
X. 開発/本番一致
開発、ステージング、本番環境をできるだけ一致させた状態を保つ
V. ビルド、リリース、実行
ビルド、リリース、実行の3つのステージを厳密に分離する
XI. ログ
ログをイベントストリームとして扱う
VI. プロセス
アプリケーションを1つもしくは複数のステートレスなプロセスとして実行する
XII. 管理プロセス
管理タスクを1回限りのプロセスとして実行する
クラウドネイティブの指針として、12-factor App があるが、アプリケー
ションサーバ時代の実装を大きく変える必要がある。
30. JDK のコンテナイメージ
12-factor App の観点からコンテナのサイズは小さければ小さいほどよ
いが、オフィシャルの JDK の docker イメージのサイズは大きい。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
openjdk 11 f75c7d826c08 3 weeks ago 605MB
31. alpine とカスタム JRE
alpine と、Java9 からの jlink によるカスタム JRE でまずはコンテナイ
メージを可能な限り小さくする。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zulu.custom 11 2ca39f1ed611 17 seconds ago 69.3MB
--add-modules jdk.localedata --include-locales=en,ja,*-IN
Spring Boot は厳密には fatJar ではないので jdeps で出力される依存
性はアテにならない。また、日本語ロケール等を利用する場合は、以下
のモジュールも必要。