2. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 1
自己紹介
OpenStandiaの中の人
最近のコミュニティ活動
Keycloak FAPI対応のお手伝い
Keycloak の OAuth 2.0 Device Authorization Grant 対応の提案
WebAuthn4j JUnit5 Migration対応
Keycloak ガイドの日本語翻訳
▪ 最新の6.0.1も翻訳済み!
3. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 2
Keycloak Roadmap
出所: https://docs.google.com/presentation/d/1bijEpuwaaa6jR1D5PAjyW731-j6Xc1TFHJuUh_FwwK8/edit?ts=5ca774e9#slide=id.g5628e016b1_15_54
4. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 3
Quarkus
Supersonic Subatomic Java
A Kubernetes Native Java stack
低メモリフットプリント
爆速起動 (1秒以下)
静的解析によりAOT(Ahead-Of-Time) コンパイルを実行することで実現
+OracleのGraalVMでネイティブイメージ化で更に低メモリ・起動高速化
5. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 4
Quarkus
すべてのJava資産が動くわけではない
制約がいくつかある
▪Dynamic classloading使っているとNG
▪既存ライブラリを対応させるには別途Extensionで対応が必要
JBossミドルウェア系は実は対応しつつある
▪JAX-RS、JPA、JTA・・・
7. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 6
今日話すこと
Quarkus対応してみる? (Keycloak X prototypeに期待)
違うアプローチでお手軽に軽量化にチャレンジ
8. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 7
比較元
KeycloakオフィシャルDockerコンテナイメージ
https://hub.docker.com/r/jboss/keycloak/
出所: https://docs.google.com/presentation/d/1bijEpuwaaa6jR1D5PAjyW731-j6Xc1TFHJuUh_FwwK8/edit?ts=5ca774e9#slide=id.g5628e016b1_15_101
10. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 9
オフィシャルイメージはかなりメタボ
全体: 約1.2G
Keycloakが半分占めているがOS/JDK部分もそこそこ
11. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 10
Java系コンテナダイエット方法
JDK9から使えるJLinkを使いカスタムJREを利用
Alpine Linuxなどの軽量OSを利用
その他、一般的なコンテナビルドテクニックを利用
12. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 11
JLink
JDK9でモジュールシステム「Jigsaw」が導入
JLinkにより、配布用のカスタムJREの作成が可能に
アプリが必要とするモジュールだけを含めることが
可能
13. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 12
JLink
Keycloakの場合はこれでいける
https://gist.github.com/thomasdarimont/94ab3eb748742d2
e793f4f5d32e05932
jlink ¥
--no-header-files ¥
--no-man-pages ¥
--compress=2 ¥
--strip-debug ¥
--vm=server ¥
--exclude-files="**/bin/rmiregistry,**/bin/jrunscript,**/bin/rmid" ¥
--add-modules
java.base,java.instrument,java.logging,java.management,java.naming,java.scripting,java.se,java.sec
urity.jgss,java.security.sasl,java.sql,java.transaction.xa,java.xml,java.xml.crypto,jdk.security.auth,jdk.x
ml.dom,jdk.unsupported ¥
--output /opt/java-runtime
14. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 13
Alpine Linux
glibc問題のためにalpine-pkg-glibcを利用
https://github.com/sgerrand/alpine-pkg-glibc
15. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 14
Alpine + 色んなJDKでJLink
※ OpenJDK 13 EA はオフィシャルでAlpine版ありのためそちらを利用
87%削減!
16. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 15
これにKeycloakを足す
# Copy from https://github.com/jboss-dockerfiles/keycloak/blob/6.0.1/server/Dockerfile
ENV KEYCLOAK_VERSION 6.0.1
ARG KEYCLOAK_DIST=https://downloads.jboss.org/keycloak/$KEYCLOAK_VERSION/keycloak-
$KEYCLOAK_VERSION.tar.gz
RUN apk add --no-cache --virtual .build-deps curl ¥
&& mkdir -p /opt/jboss ¥
&& cd /opt/jboss/ ¥
&& curl -L $KEYCLOAK_DIST | tar zx ¥
&& mv /opt/jboss/keycloak-?.?.?* /opt/jboss/keycloak ¥
&& apk del --purge .build-deps
23. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 22
CDSを試す
CDS = Class Data Sharing
商用版 Oracle JDK の機能がOpenJDK 10から使えるように
OpenJ9にも同様の機能あり
出所: http://blog.gilliard.lol/presentations/VirtualJUG-March-2018-Java-in-a-World-of-Containers.html
24. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 23
ただし・・・
WildFlyやSpring Boot (Fat JAR) と相性が悪い
独自のモジュールシステムによりJARがロードされる
通常のCDSの設定だとモジュールシステムのクラスにしか適用され
ない!
※一方、OpenJ9のClass SharingはFat JARに対応している
▪https://blog.openj9.org/2018/10/30/shared-classes-cache-
now-supports-fat-jar/