SlideShare a Scribd company logo
Introduction to Quarkus:
A Container-First Cloud Native
Framework
Georgios Andrianakis, Red Hat
Quarkus   k8s
Quarkus   k8s
Quarkus   k8s
But Java has been showing its age...
Memory Hog
🐷
Quarkus   k8s
Quarkus   k8s
Slow Startup
🐍
Serverless Adoption
https://serverless.com/blog/2018-serverless-community-survey-huge-growth-usage
So who is this Quarkus—
and what’s all the fuss?
Up to 10x smaller, 100x faster
Seriously.
Imperative and
reactive
Serverless
Live reload
Microservices
Fat jars
and native
executables
Optimized for
JAX-RS & JPA
(Hibernate) …
Kubernetes Native
Image:
quay.io/images/custservice:1.1.0
Replicas:
20
Labels:
customerservice=prod,ci_build=1213
ConfigMap:
cust_config
But how is this achieved?
Traditional Java apps (both app server and fat-jar stacks)
● Tons of classes loaded during boot time
○ Unused later on
○ Occupy a lot of memory
● Reflection used extensively
XML Parsers, Annotation models….
Quarkus
Do as much as possible at build time
● Annotation processing
● Configuration parsing
● Throw away all classes that are not needed at runtime
● Avoid runtime reflection as much as possible
Output: generated classes
Quarkus   k8s
GraalVM
AoT with GraalVM
AoT with GraalVM
● Static Analysis
● Closed world assumptions
● Dead code elimination
GraalVM Limitations
● Dynamic classloading
○ Creating, reloading classes at runtime is not possible
● JVMTI, JMX
○ No agents
● InvokeDynamic, MethodHandles
○ But lambdas are supported
GraalVM Limitations
● Reflection
○ All targets of reflection need to be known
● Dynamic Proxies
○ All classes that will get proxied at runtime need to be
declared
● Classpath resources
○ All resources to be included must be declared
GraalVM Limitations
Example of manual invocation:
native-image -jar target/app.jar -H:ReflectionConfigurationResources=reflection_config.json
-H:Name=name
--delay-class-initialization-to-runtime=io.netty.handler.codec.http.HttpObjectEncoder
Quarkus shields you from all GraalVM peculiarities!
Quarkus   k8s
Demo time!
Thank you!
Twitter: @geoand86
Further reading
• http://quarkus.io
• https://developers.redhat.com/blog/2019/03/07/quarkus-
next-generation-kubernetes-native-java-framework/
• http://in.relation.to/2019/03/08/why-quarkus/
Quarkus   k8s

More Related Content

Quarkus k8s