SlideShare a Scribd company logo
qaware.de
Franz Wimmer
Codineers Meetup Rosenheim
10.02.2022
Quarkus - Quickstart
Franz Wimmer
Senior Software Engineer, QAware GmbH
2
Studium Informatik an der TH Rosenheim
Seit 4 Jahren bei QAware
Entwicklung von Cloud Native Applications
Vorlesung “Cloud Computing” @ TH Rosenheim
Vorträge
Einführung
Einführung
■ Quarkus ist ein reaktives Framework für Webanwendungen.
■ 1. Commit am 12.12.2018
■ Maßgeblich entwickelt von RedHat.
■ Enterprise-Support!
■ Tritt an als Konkurrenz zu Java EE, Spring, ...
■ Spielt optimal mit GraalVM zusammen
Architektur
■ Ihr habt die Wahl zwischen “Java EE” oder anderen Web-Technologien (z.B. RESTeasy).
■ Frei kombinierbar!
■ Bestehende Java-EE-Anwendungen können fast 1:1 übernommen werden.
■ Quarkus sitzt auf der reaktiven Plattform “Eclipse Vert.x”
– Vert.x gibt es seit 2011.
– Nebenläufig und asynchron
– Verteilter
Reactive
everything!
Was bedeutet noch mal... “reactive”?
■ Das “Reaktive Manifest” besagt: Reaktive Systeme sind ...
– Antwortbereit
– Widerstandsfähig
– Elastisch
– Nachrichtenorientiert
■ Das kann jetzt bedeuten, dass man...
– ... viele kleine Microservices baut
– ... reaktive Frameworks wie Kafka, Spark oder Akka verwendet
– Das geht aber auch in der Anwendung selbst.
Reactive Programming in Quarkus - 1
Reactive Programming in Quarkus - 2
■ Reaktiver Code in Quarkus spart:
– Kontext-Switches
– Große Threadpools
– Resourcen allgemein
– Reaktiver Code darf nicht blocken!
Smallrye Mutiny – Uni
■ Uni ist eine asynchrone Operation, die ein Ergebnis zurückgeben kann:...
■ die Daten kann man auch weiter verarbeiten:
■ Und am Ende alles zusammensammeln:
Uni<VaccinationsResponse> vaccinationsResponse = vaccionationsClient.getVaccinations();
Uni<CountryStatisticsResponse> germanStatisticsResponse = statisticsClient.getStatisticsForGermany();
Uni<DistrictsStatistcsResponse> districtsStatisticsResponse = statisticsClient.getDistrictStatistics();
Uni<DistrictStatisticsData> = districtsStatisticsResponse
.map(DistrictsStatistcsResponse::getDistrictsStatisticsResponseData)
.map(DistrictsStatisticsResponseData::getDistrictStatisticsMap)
.map(districts -> districts.get(countyCode))
.map(DistrictStatisticsData::of);
return Uni.combine()
.all()
.unis(vaccinationsData, statisticsData, districtStatisticsData)
.combinedWith((vaccinations, statistics, districtStatistics) -> CovidData.builder()
.vaccinationsData(vaccinations)
.statisticsData(statistics)
.districtStatisticsData(districtStatistics)
.build());
Smallrye Mutiny – Multi
■ Multis sind asynchrone Streams – damit behandelt man ganze Mengen an Daten:
■ Mutiny geht auch wunderbar mit JAX-RS:
■ ... oder mit Datenbanken:
public Multi<String> greetings(int count, String name) {
return Multi.createFrom()
.ticks().every(Duration.ofSeconds(1))
.onItem().transform(n -> String.format("Hello %s - %d", name, n))
.transform().byTakingFirstItems(count);
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/greeting/{count}/{name}")
public Multi<String> greetings(int count, String name) {
return service.greetings(count, name);
}
public static Multi<Fruit> findAll(PgPool client) {
return client.query("SELECT id, name FROM fruits ORDER BY name ASC").execute()
// Create a Multi from the set of rows:
.onItem().transformToMulti(set -> Multi.createFrom().items(() -> StreamSupport.stream(set.spliterator(), false))
// For each row create a fruit instance
.onItem().transform(Fruit::from);
}
Smallrye Mutiny - Fehlerbehandlung
■ Automatischer Retry:
■ Oder mit einem Default aufgeben
Uni<String> uni = invokePickyService(client)
.onFailure()
.retry()
.withBackOff(Duration.ofSeconds(1))
.withJitter(0.2)
.atMost(10);
Uni<String> result = uni
.onFailure()
.recoverWithItem("Default");
Native Images
Native Images mit GraalVM
■ Quarkus ist ja ganz nett... aber der Overhead?
■ ... immerhin braucht die JVM mit dem Appserver viel Speicher und Zeit zum Hochfahren.
■ Mit GraalVM kann man ganz einfach ein natives Binary erzeugen (siehe Demo).
■ Dieses Binary braucht keine JVM mehr. Ein Unix-System reicht.
■ Aber Vorsicht: GraalVM linkt dynamisch gegen die glibc auf eurem Rechner!
■ Deswegen: Lieber in einem Container bauen.
■ Für Debugging müssen Debug-Symbole mitkompiliert werden!
■ Und: Ihr debuggt dann mit gdb. Viel Vergnügen
Demo
Performance
Performance
■ Quarkus muss sich natürlich mit etablierten Technologien in der Nachbarschaft messen lassen.
■ Der folgende Benchmark stammt von GitHub.
■ Anwendung: JAX-RS, JSON-B, CDI, JPA & PostgresDB
– Keine reactive-Komponenten
■ Technologien:
– Quarkus (JVM)
– Quarkus (native)
– Payara Micro
– Spring Boot (JVM)
–
Quarkus (JVM vs. native)
Spring Boot (JVM vs. native)
Quarkus vs. Spring Boot
Quarkus vs. Payara
Fazit
Fazit
■ Quarkus macht vor allem Spaß!
■ Wer Java EE oder Spring kennt, wird keine Probleme bei der Einarbeitung haben.
■ Bonus: JEE-Anwendungen lassen sich 1:1 übernehmen.
■ Die Dokumentation ist echt gut.
■ Quarkus hat aber auch noch ein paar Kinderkrankheiten.
– z.B. Bugs, in die man auch mit kleinen Showcases läuft.
– Vorsicht bei der Kombination von normalen mit reactive Bibliotheken!
Zum Nachschlagen...
■ Website & Dokumentation: https://quarkus.io/
■ Skeleton-Generator: https://code.quarkus.io/
■ Das Reaktive Manifest: https://www.reactivemanifesto.org/de
■ Umfangreiche Benchmarks Quarkus vs. Spring Boot vs. Payara:
https://github.com/rmh78/quarkus-performance
■ NEINhorn: https://neinhorn.codefoundry.de
■ NEINhorn @ GitHub (AGPL 3.0): https://github.com/zalintyre/neinhorn
qaware.de
QAware GmbH
Aschauer Straße 32
81549 München
Tel. +49 89 232315-0
info@qaware.de
twitter.com/qaware
linkedin.com/company/qaware-gmbh
xing.com/companies/qawaregmbh
slideshare.net/qaware
github.com/qaware
Q & A

More Related Content

What's hot

Der Status Quo des Chaos Engineerings
Der Status Quo des Chaos EngineeringsDer Status Quo des Chaos Engineerings
Der Status Quo des Chaos Engineerings
QAware GmbH
 
Die Leichtigkeit des Seins: Bindings für Eclipse SmartHome entwickeln
Die Leichtigkeit des Seins: Bindings für Eclipse SmartHome entwickelnDie Leichtigkeit des Seins: Bindings für Eclipse SmartHome entwickeln
Die Leichtigkeit des Seins: Bindings für Eclipse SmartHome entwickeln
QAware GmbH
 
A Hitchhiker’s Guide to the Cloud Native Stack. #ContainerConf
A Hitchhiker’s Guide to the Cloud Native Stack. #ContainerConfA Hitchhiker’s Guide to the Cloud Native Stack. #ContainerConf
A Hitchhiker’s Guide to the Cloud Native Stack. #ContainerConf
Mario-Leander Reimer
 
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer InfrastrukturContinuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
QAware GmbH
 
Leveraging the Power of Solr with Spark
Leveraging the Power of Solr with SparkLeveraging the Power of Solr with Spark
Leveraging the Power of Solr with Spark
QAware GmbH
 
Enterprise Cloud Native ist das neue Normal
Enterprise Cloud Native ist das neue NormalEnterprise Cloud Native ist das neue Normal
Enterprise Cloud Native ist das neue Normal
QAware GmbH
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
Josef Adersberger
 
Tipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit DockerTipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit Docker
Nicholas Dille
 
Technische Gründe für schlechte Entwicklungsperformance
Technische Gründe für schlechte EntwicklungsperformanceTechnische Gründe für schlechte Entwicklungsperformance
Technische Gründe für schlechte Entwicklungsperformance
OPEN KNOWLEDGE GmbH
 
Dockerize It - Mit apex in die amazon cloud
Dockerize It - Mit apex in die amazon cloudDockerize It - Mit apex in die amazon cloud
Dockerize It - Mit apex in die amazon cloud
OPITZ CONSULTING Deutschland
 
Per Anhalter zu Cloud-nativen API Gateways
Per Anhalter zu Cloud-nativen API GatewaysPer Anhalter zu Cloud-nativen API Gateways
Per Anhalter zu Cloud-nativen API Gateways
QAware GmbH
 
Ceph Introduction @GPN15
Ceph Introduction @GPN15Ceph Introduction @GPN15
Ceph Introduction @GPN15
m1no
 
Kaps - Es muss nicht immer Kubernetes sein
Kaps - Es muss nicht immer Kubernetes seinKaps - Es muss nicht immer Kubernetes sein
Kaps - Es muss nicht immer Kubernetes sein
Stephan Kaps
 
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbHDocker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
agilemethoden
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
QAware GmbH
 
openstack Übersicht @GPN15
openstack Übersicht @GPN15openstack Übersicht @GPN15
openstack Übersicht @GPN15
m1no
 
Mit OpenStack zur eigenen Cloud (OSDC 2012)
Mit OpenStack zur eigenen Cloud (OSDC 2012)Mit OpenStack zur eigenen Cloud (OSDC 2012)
Mit OpenStack zur eigenen Cloud (OSDC 2012)
hastexo
 
Supersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: QuarkusSupersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: Quarkus
OPEN KNOWLEDGE GmbH
 
Per Anhalter durch den Cloud Native Stack (Extended Edition) #oop2017
Per Anhalter durch den Cloud Native Stack (Extended Edition) #oop2017Per Anhalter durch den Cloud Native Stack (Extended Edition) #oop2017
Per Anhalter durch den Cloud Native Stack (Extended Edition) #oop2017
Mario-Leander Reimer
 

What's hot (20)

Der Status Quo des Chaos Engineerings
Der Status Quo des Chaos EngineeringsDer Status Quo des Chaos Engineerings
Der Status Quo des Chaos Engineerings
 
Die Leichtigkeit des Seins: Bindings für Eclipse SmartHome entwickeln
Die Leichtigkeit des Seins: Bindings für Eclipse SmartHome entwickelnDie Leichtigkeit des Seins: Bindings für Eclipse SmartHome entwickeln
Die Leichtigkeit des Seins: Bindings für Eclipse SmartHome entwickeln
 
A Hitchhiker’s Guide to the Cloud Native Stack. #ContainerConf
A Hitchhiker’s Guide to the Cloud Native Stack. #ContainerConfA Hitchhiker’s Guide to the Cloud Native Stack. #ContainerConf
A Hitchhiker’s Guide to the Cloud Native Stack. #ContainerConf
 
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer InfrastrukturContinuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
 
Leveraging the Power of Solr with Spark
Leveraging the Power of Solr with SparkLeveraging the Power of Solr with Spark
Leveraging the Power of Solr with Spark
 
Enterprise Cloud Native ist das neue Normal
Enterprise Cloud Native ist das neue NormalEnterprise Cloud Native ist das neue Normal
Enterprise Cloud Native ist das neue Normal
 
Nginx
NginxNginx
Nginx
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Tipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit DockerTipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit Docker
 
Technische Gründe für schlechte Entwicklungsperformance
Technische Gründe für schlechte EntwicklungsperformanceTechnische Gründe für schlechte Entwicklungsperformance
Technische Gründe für schlechte Entwicklungsperformance
 
Dockerize It - Mit apex in die amazon cloud
Dockerize It - Mit apex in die amazon cloudDockerize It - Mit apex in die amazon cloud
Dockerize It - Mit apex in die amazon cloud
 
Per Anhalter zu Cloud-nativen API Gateways
Per Anhalter zu Cloud-nativen API GatewaysPer Anhalter zu Cloud-nativen API Gateways
Per Anhalter zu Cloud-nativen API Gateways
 
Ceph Introduction @GPN15
Ceph Introduction @GPN15Ceph Introduction @GPN15
Ceph Introduction @GPN15
 
Kaps - Es muss nicht immer Kubernetes sein
Kaps - Es muss nicht immer Kubernetes seinKaps - Es muss nicht immer Kubernetes sein
Kaps - Es muss nicht immer Kubernetes sein
 
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbHDocker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
openstack Übersicht @GPN15
openstack Übersicht @GPN15openstack Übersicht @GPN15
openstack Übersicht @GPN15
 
Mit OpenStack zur eigenen Cloud (OSDC 2012)
Mit OpenStack zur eigenen Cloud (OSDC 2012)Mit OpenStack zur eigenen Cloud (OSDC 2012)
Mit OpenStack zur eigenen Cloud (OSDC 2012)
 
Supersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: QuarkusSupersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: Quarkus
 
Per Anhalter durch den Cloud Native Stack (Extended Edition) #oop2017
Per Anhalter durch den Cloud Native Stack (Extended Edition) #oop2017Per Anhalter durch den Cloud Native Stack (Extended Edition) #oop2017
Per Anhalter durch den Cloud Native Stack (Extended Edition) #oop2017
 

Similar to Quarkus Quickstart

Reactive Programming
Reactive ProgrammingReactive Programming
Reactive Programming
Sebastian Springer
 
SplunkLive! Frankfurt 2019: Splunk at Generali Insurance
SplunkLive! Frankfurt 2019: Splunk at Generali Insurance SplunkLive! Frankfurt 2019: Splunk at Generali Insurance
SplunkLive! Frankfurt 2019: Splunk at Generali Insurance
Splunk
 
JavaScript Days 2015: Security
JavaScript Days 2015: SecurityJavaScript Days 2015: Security
JavaScript Days 2015: Security
Mayflower GmbH
 
Best Practices 
Java und JVM in Containern
Best Practices 
Java und JVM in ContainernBest Practices 
Java und JVM in Containern
Best Practices 
Java und JVM in Containern
OPITZ CONSULTING Deutschland
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrants0enke
 
LAIK: A Library for Fault Tolerant Distribution of Global Data
LAIK: A Library for Fault Tolerant Distribution of Global DataLAIK: A Library for Fault Tolerant Distribution of Global Data
LAIK: A Library for Fault Tolerant Distribution of Global Data
Dai Yang
 
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDA
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDASchulung: Einführung in das GPU-Computing mit NVIDIA CUDA
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDA
Jörn Dinkla
 
Hochleistungsspeichersysteme für Datenanalyse an der TU Dresden (Michael Kluge)
Hochleistungsspeichersysteme für Datenanalyse an der TU Dresden (Michael Kluge)Hochleistungsspeichersysteme für Datenanalyse an der TU Dresden (Michael Kluge)
Hochleistungsspeichersysteme für Datenanalyse an der TU Dresden (Michael Kluge)
data://disrupted®
 
Weltweite Produktionsdatenverwaltung mit MySQL-Replikation
Weltweite Produktionsdatenverwaltung mit MySQL-ReplikationWeltweite Produktionsdatenverwaltung mit MySQL-Replikation
Weltweite Produktionsdatenverwaltung mit MySQL-Replikation
FromDual GmbH
 
Node.js
Node.jsNode.js
50 Shades of K8s Autoscaling #JavaLand24.pdf
50 Shades of K8s Autoscaling #JavaLand24.pdf50 Shades of K8s Autoscaling #JavaLand24.pdf
50 Shades of K8s Autoscaling #JavaLand24.pdf
QAware GmbH
 
Funktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumFunktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit Sodium
Torsten Fink
 
Elegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2day
Elegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2dayElegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2day
Elegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2day
Mario-Leander Reimer
 
In-Memory Computing mit Apache Ignite und Kubernetes
In-Memory Computing mit Apache Ignite und KubernetesIn-Memory Computing mit Apache Ignite und Kubernetes
In-Memory Computing mit Apache Ignite und Kubernetes
QAware GmbH
 
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...inovex GmbH
 
Testing tools
Testing toolsTesting tools
Testing tools
Sebastian Springer
 
A Hitchhiker's Guide to the Cloud Native Stack
A Hitchhiker's Guide to the Cloud Native StackA Hitchhiker's Guide to the Cloud Native Stack
A Hitchhiker's Guide to the Cloud Native Stack
QAware GmbH
 
OSMC 2016: Open Monitoring Distribution 2016+ by Gerhard Laußer
OSMC 2016: Open Monitoring Distribution 2016+ by Gerhard Laußer   OSMC 2016: Open Monitoring Distribution 2016+ by Gerhard Laußer
OSMC 2016: Open Monitoring Distribution 2016+ by Gerhard Laußer
NETWAYS
 
Analytics meets Big Data – R/Python auf der Hadoop/Spark-Plattform
Analytics meets Big Data – R/Python auf der Hadoop/Spark-PlattformAnalytics meets Big Data – R/Python auf der Hadoop/Spark-Plattform
Analytics meets Big Data – R/Python auf der Hadoop/Spark-Plattform
Rising Media Ltd.
 
Lehmanns Rails Erweitern
Lehmanns Rails ErweiternLehmanns Rails Erweitern
Lehmanns Rails Erweitern
jan_mindmatters
 

Similar to Quarkus Quickstart (20)

Reactive Programming
Reactive ProgrammingReactive Programming
Reactive Programming
 
SplunkLive! Frankfurt 2019: Splunk at Generali Insurance
SplunkLive! Frankfurt 2019: Splunk at Generali Insurance SplunkLive! Frankfurt 2019: Splunk at Generali Insurance
SplunkLive! Frankfurt 2019: Splunk at Generali Insurance
 
JavaScript Days 2015: Security
JavaScript Days 2015: SecurityJavaScript Days 2015: Security
JavaScript Days 2015: Security
 
Best Practices 
Java und JVM in Containern
Best Practices 
Java und JVM in ContainernBest Practices 
Java und JVM in Containern
Best Practices 
Java und JVM in Containern
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 
LAIK: A Library for Fault Tolerant Distribution of Global Data
LAIK: A Library for Fault Tolerant Distribution of Global DataLAIK: A Library for Fault Tolerant Distribution of Global Data
LAIK: A Library for Fault Tolerant Distribution of Global Data
 
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDA
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDASchulung: Einführung in das GPU-Computing mit NVIDIA CUDA
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDA
 
Hochleistungsspeichersysteme für Datenanalyse an der TU Dresden (Michael Kluge)
Hochleistungsspeichersysteme für Datenanalyse an der TU Dresden (Michael Kluge)Hochleistungsspeichersysteme für Datenanalyse an der TU Dresden (Michael Kluge)
Hochleistungsspeichersysteme für Datenanalyse an der TU Dresden (Michael Kluge)
 
Weltweite Produktionsdatenverwaltung mit MySQL-Replikation
Weltweite Produktionsdatenverwaltung mit MySQL-ReplikationWeltweite Produktionsdatenverwaltung mit MySQL-Replikation
Weltweite Produktionsdatenverwaltung mit MySQL-Replikation
 
Node.js
Node.jsNode.js
Node.js
 
50 Shades of K8s Autoscaling #JavaLand24.pdf
50 Shades of K8s Autoscaling #JavaLand24.pdf50 Shades of K8s Autoscaling #JavaLand24.pdf
50 Shades of K8s Autoscaling #JavaLand24.pdf
 
Funktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumFunktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit Sodium
 
Elegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2day
Elegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2dayElegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2day
Elegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2day
 
In-Memory Computing mit Apache Ignite und Kubernetes
In-Memory Computing mit Apache Ignite und KubernetesIn-Memory Computing mit Apache Ignite und Kubernetes
In-Memory Computing mit Apache Ignite und Kubernetes
 
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
 
Testing tools
Testing toolsTesting tools
Testing tools
 
A Hitchhiker's Guide to the Cloud Native Stack
A Hitchhiker's Guide to the Cloud Native StackA Hitchhiker's Guide to the Cloud Native Stack
A Hitchhiker's Guide to the Cloud Native Stack
 
OSMC 2016: Open Monitoring Distribution 2016+ by Gerhard Laußer
OSMC 2016: Open Monitoring Distribution 2016+ by Gerhard Laußer   OSMC 2016: Open Monitoring Distribution 2016+ by Gerhard Laußer
OSMC 2016: Open Monitoring Distribution 2016+ by Gerhard Laußer
 
Analytics meets Big Data – R/Python auf der Hadoop/Spark-Plattform
Analytics meets Big Data – R/Python auf der Hadoop/Spark-PlattformAnalytics meets Big Data – R/Python auf der Hadoop/Spark-Plattform
Analytics meets Big Data – R/Python auf der Hadoop/Spark-Plattform
 
Lehmanns Rails Erweitern
Lehmanns Rails ErweiternLehmanns Rails Erweitern
Lehmanns Rails Erweitern
 

More from QAware GmbH

Mit ChatGPT Dinosaurier besiegen - Möglichkeiten und Grenzen von LLM für die ...
Mit ChatGPT Dinosaurier besiegen - Möglichkeiten und Grenzen von LLM für die ...Mit ChatGPT Dinosaurier besiegen - Möglichkeiten und Grenzen von LLM für die ...
Mit ChatGPT Dinosaurier besiegen - Möglichkeiten und Grenzen von LLM für die ...
QAware GmbH
 
Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...
Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...
Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...
QAware GmbH
 
Fully-managed Cloud-native Databases: The path to indefinite scale @ CNN Mainz
Fully-managed Cloud-native Databases: The path to indefinite scale @ CNN MainzFully-managed Cloud-native Databases: The path to indefinite scale @ CNN Mainz
Fully-managed Cloud-native Databases: The path to indefinite scale @ CNN Mainz
QAware GmbH
 
Down the Ivory Tower towards Agile Architecture
Down the Ivory Tower towards Agile ArchitectureDown the Ivory Tower towards Agile Architecture
Down the Ivory Tower towards Agile Architecture
QAware GmbH
 
"Mixed" Scrum-Teams – Die richtige Mischung macht's!
"Mixed" Scrum-Teams – Die richtige Mischung macht's!"Mixed" Scrum-Teams – Die richtige Mischung macht's!
"Mixed" Scrum-Teams – Die richtige Mischung macht's!
QAware GmbH
 
Make Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform EngineeringMake Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform Engineering
QAware GmbH
 
Der Tod der Testpyramide? – Frontend-Testing mit Playwright
Der Tod der Testpyramide? – Frontend-Testing mit PlaywrightDer Tod der Testpyramide? – Frontend-Testing mit Playwright
Der Tod der Testpyramide? – Frontend-Testing mit Playwright
QAware GmbH
 
Was kommt nach den SPAs
Was kommt nach den SPAsWas kommt nach den SPAs
Was kommt nach den SPAs
QAware GmbH
 
Cloud Migration mit KI: der Turbo
Cloud Migration mit KI: der Turbo Cloud Migration mit KI: der Turbo
Cloud Migration mit KI: der Turbo
QAware GmbH
 
Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See...
 Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See... Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See...
Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See...
QAware GmbH
 
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
QAware GmbH
 
Endlich gute API Tests. Boldly Testing APIs Where No One Has Tested Before.
Endlich gute API Tests. Boldly Testing APIs Where No One Has Tested Before.Endlich gute API Tests. Boldly Testing APIs Where No One Has Tested Before.
Endlich gute API Tests. Boldly Testing APIs Where No One Has Tested Before.
QAware GmbH
 
Kubernetes with Cilium in AWS - Experience Report!
Kubernetes with Cilium in AWS - Experience Report!Kubernetes with Cilium in AWS - Experience Report!
Kubernetes with Cilium in AWS - Experience Report!
QAware GmbH
 
50 Shades of K8s Autoscaling
50 Shades of K8s Autoscaling50 Shades of K8s Autoscaling
50 Shades of K8s Autoscaling
QAware GmbH
 
Kontinuierliche Sicherheitstests für APIs mit Testkube und OWASP ZAP
Kontinuierliche Sicherheitstests für APIs mit Testkube und OWASP ZAPKontinuierliche Sicherheitstests für APIs mit Testkube und OWASP ZAP
Kontinuierliche Sicherheitstests für APIs mit Testkube und OWASP ZAP
QAware GmbH
 
Service Mesh Pain & Gain. Experiences from a client project.
Service Mesh Pain & Gain. Experiences from a client project.Service Mesh Pain & Gain. Experiences from a client project.
Service Mesh Pain & Gain. Experiences from a client project.
QAware GmbH
 
50 Shades of K8s Autoscaling
50 Shades of K8s Autoscaling50 Shades of K8s Autoscaling
50 Shades of K8s Autoscaling
QAware GmbH
 
Blue turns green! Approaches and technologies for sustainable K8s clusters.
Blue turns green! Approaches and technologies for sustainable K8s clusters.Blue turns green! Approaches and technologies for sustainable K8s clusters.
Blue turns green! Approaches and technologies for sustainable K8s clusters.
QAware GmbH
 
Per Anhalter zu Cloud Nativen API Gateways
Per Anhalter zu Cloud Nativen API GatewaysPer Anhalter zu Cloud Nativen API Gateways
Per Anhalter zu Cloud Nativen API Gateways
QAware GmbH
 
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
QAware GmbH
 

More from QAware GmbH (20)

Mit ChatGPT Dinosaurier besiegen - Möglichkeiten und Grenzen von LLM für die ...
Mit ChatGPT Dinosaurier besiegen - Möglichkeiten und Grenzen von LLM für die ...Mit ChatGPT Dinosaurier besiegen - Möglichkeiten und Grenzen von LLM für die ...
Mit ChatGPT Dinosaurier besiegen - Möglichkeiten und Grenzen von LLM für die ...
 
Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...
Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...
Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...
 
Fully-managed Cloud-native Databases: The path to indefinite scale @ CNN Mainz
Fully-managed Cloud-native Databases: The path to indefinite scale @ CNN MainzFully-managed Cloud-native Databases: The path to indefinite scale @ CNN Mainz
Fully-managed Cloud-native Databases: The path to indefinite scale @ CNN Mainz
 
Down the Ivory Tower towards Agile Architecture
Down the Ivory Tower towards Agile ArchitectureDown the Ivory Tower towards Agile Architecture
Down the Ivory Tower towards Agile Architecture
 
"Mixed" Scrum-Teams – Die richtige Mischung macht's!
"Mixed" Scrum-Teams – Die richtige Mischung macht's!"Mixed" Scrum-Teams – Die richtige Mischung macht's!
"Mixed" Scrum-Teams – Die richtige Mischung macht's!
 
Make Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform EngineeringMake Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform Engineering
 
Der Tod der Testpyramide? – Frontend-Testing mit Playwright
Der Tod der Testpyramide? – Frontend-Testing mit PlaywrightDer Tod der Testpyramide? – Frontend-Testing mit Playwright
Der Tod der Testpyramide? – Frontend-Testing mit Playwright
 
Was kommt nach den SPAs
Was kommt nach den SPAsWas kommt nach den SPAs
Was kommt nach den SPAs
 
Cloud Migration mit KI: der Turbo
Cloud Migration mit KI: der Turbo Cloud Migration mit KI: der Turbo
Cloud Migration mit KI: der Turbo
 
Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See...
 Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See... Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See...
Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See...
 
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
 
Endlich gute API Tests. Boldly Testing APIs Where No One Has Tested Before.
Endlich gute API Tests. Boldly Testing APIs Where No One Has Tested Before.Endlich gute API Tests. Boldly Testing APIs Where No One Has Tested Before.
Endlich gute API Tests. Boldly Testing APIs Where No One Has Tested Before.
 
Kubernetes with Cilium in AWS - Experience Report!
Kubernetes with Cilium in AWS - Experience Report!Kubernetes with Cilium in AWS - Experience Report!
Kubernetes with Cilium in AWS - Experience Report!
 
50 Shades of K8s Autoscaling
50 Shades of K8s Autoscaling50 Shades of K8s Autoscaling
50 Shades of K8s Autoscaling
 
Kontinuierliche Sicherheitstests für APIs mit Testkube und OWASP ZAP
Kontinuierliche Sicherheitstests für APIs mit Testkube und OWASP ZAPKontinuierliche Sicherheitstests für APIs mit Testkube und OWASP ZAP
Kontinuierliche Sicherheitstests für APIs mit Testkube und OWASP ZAP
 
Service Mesh Pain & Gain. Experiences from a client project.
Service Mesh Pain & Gain. Experiences from a client project.Service Mesh Pain & Gain. Experiences from a client project.
Service Mesh Pain & Gain. Experiences from a client project.
 
50 Shades of K8s Autoscaling
50 Shades of K8s Autoscaling50 Shades of K8s Autoscaling
50 Shades of K8s Autoscaling
 
Blue turns green! Approaches and technologies for sustainable K8s clusters.
Blue turns green! Approaches and technologies for sustainable K8s clusters.Blue turns green! Approaches and technologies for sustainable K8s clusters.
Blue turns green! Approaches and technologies for sustainable K8s clusters.
 
Per Anhalter zu Cloud Nativen API Gateways
Per Anhalter zu Cloud Nativen API GatewaysPer Anhalter zu Cloud Nativen API Gateways
Per Anhalter zu Cloud Nativen API Gateways
 
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
 

Quarkus Quickstart

  • 1. qaware.de Franz Wimmer Codineers Meetup Rosenheim 10.02.2022 Quarkus - Quickstart
  • 2. Franz Wimmer Senior Software Engineer, QAware GmbH 2 Studium Informatik an der TH Rosenheim Seit 4 Jahren bei QAware Entwicklung von Cloud Native Applications Vorlesung “Cloud Computing” @ TH Rosenheim Vorträge
  • 4. Einführung ■ Quarkus ist ein reaktives Framework für Webanwendungen. ■ 1. Commit am 12.12.2018 ■ Maßgeblich entwickelt von RedHat. ■ Enterprise-Support! ■ Tritt an als Konkurrenz zu Java EE, Spring, ... ■ Spielt optimal mit GraalVM zusammen
  • 5. Architektur ■ Ihr habt die Wahl zwischen “Java EE” oder anderen Web-Technologien (z.B. RESTeasy). ■ Frei kombinierbar! ■ Bestehende Java-EE-Anwendungen können fast 1:1 übernommen werden. ■ Quarkus sitzt auf der reaktiven Plattform “Eclipse Vert.x” – Vert.x gibt es seit 2011. – Nebenläufig und asynchron – Verteilter
  • 7. Was bedeutet noch mal... “reactive”? ■ Das “Reaktive Manifest” besagt: Reaktive Systeme sind ... – Antwortbereit – Widerstandsfähig – Elastisch – Nachrichtenorientiert ■ Das kann jetzt bedeuten, dass man... – ... viele kleine Microservices baut – ... reaktive Frameworks wie Kafka, Spark oder Akka verwendet – Das geht aber auch in der Anwendung selbst.
  • 9. Reactive Programming in Quarkus - 2 ■ Reaktiver Code in Quarkus spart: – Kontext-Switches – Große Threadpools – Resourcen allgemein – Reaktiver Code darf nicht blocken!
  • 10. Smallrye Mutiny – Uni ■ Uni ist eine asynchrone Operation, die ein Ergebnis zurückgeben kann:... ■ die Daten kann man auch weiter verarbeiten: ■ Und am Ende alles zusammensammeln: Uni<VaccinationsResponse> vaccinationsResponse = vaccionationsClient.getVaccinations(); Uni<CountryStatisticsResponse> germanStatisticsResponse = statisticsClient.getStatisticsForGermany(); Uni<DistrictsStatistcsResponse> districtsStatisticsResponse = statisticsClient.getDistrictStatistics(); Uni<DistrictStatisticsData> = districtsStatisticsResponse .map(DistrictsStatistcsResponse::getDistrictsStatisticsResponseData) .map(DistrictsStatisticsResponseData::getDistrictStatisticsMap) .map(districts -> districts.get(countyCode)) .map(DistrictStatisticsData::of); return Uni.combine() .all() .unis(vaccinationsData, statisticsData, districtStatisticsData) .combinedWith((vaccinations, statistics, districtStatistics) -> CovidData.builder() .vaccinationsData(vaccinations) .statisticsData(statistics) .districtStatisticsData(districtStatistics) .build());
  • 11. Smallrye Mutiny – Multi ■ Multis sind asynchrone Streams – damit behandelt man ganze Mengen an Daten: ■ Mutiny geht auch wunderbar mit JAX-RS: ■ ... oder mit Datenbanken: public Multi<String> greetings(int count, String name) { return Multi.createFrom() .ticks().every(Duration.ofSeconds(1)) .onItem().transform(n -> String.format("Hello %s - %d", name, n)) .transform().byTakingFirstItems(count); } @GET @Produces(MediaType.APPLICATION_JSON) @Path("/greeting/{count}/{name}") public Multi<String> greetings(int count, String name) { return service.greetings(count, name); } public static Multi<Fruit> findAll(PgPool client) { return client.query("SELECT id, name FROM fruits ORDER BY name ASC").execute() // Create a Multi from the set of rows: .onItem().transformToMulti(set -> Multi.createFrom().items(() -> StreamSupport.stream(set.spliterator(), false)) // For each row create a fruit instance .onItem().transform(Fruit::from); }
  • 12. Smallrye Mutiny - Fehlerbehandlung ■ Automatischer Retry: ■ Oder mit einem Default aufgeben Uni<String> uni = invokePickyService(client) .onFailure() .retry() .withBackOff(Duration.ofSeconds(1)) .withJitter(0.2) .atMost(10); Uni<String> result = uni .onFailure() .recoverWithItem("Default");
  • 14. Native Images mit GraalVM ■ Quarkus ist ja ganz nett... aber der Overhead? ■ ... immerhin braucht die JVM mit dem Appserver viel Speicher und Zeit zum Hochfahren. ■ Mit GraalVM kann man ganz einfach ein natives Binary erzeugen (siehe Demo). ■ Dieses Binary braucht keine JVM mehr. Ein Unix-System reicht. ■ Aber Vorsicht: GraalVM linkt dynamisch gegen die glibc auf eurem Rechner! ■ Deswegen: Lieber in einem Container bauen. ■ Für Debugging müssen Debug-Symbole mitkompiliert werden! ■ Und: Ihr debuggt dann mit gdb. Viel Vergnügen
  • 15. Demo
  • 17. Performance ■ Quarkus muss sich natürlich mit etablierten Technologien in der Nachbarschaft messen lassen. ■ Der folgende Benchmark stammt von GitHub. ■ Anwendung: JAX-RS, JSON-B, CDI, JPA & PostgresDB – Keine reactive-Komponenten ■ Technologien: – Quarkus (JVM) – Quarkus (native) – Payara Micro – Spring Boot (JVM) –
  • 18. Quarkus (JVM vs. native)
  • 19. Spring Boot (JVM vs. native)
  • 22. Fazit
  • 23. Fazit ■ Quarkus macht vor allem Spaß! ■ Wer Java EE oder Spring kennt, wird keine Probleme bei der Einarbeitung haben. ■ Bonus: JEE-Anwendungen lassen sich 1:1 übernehmen. ■ Die Dokumentation ist echt gut. ■ Quarkus hat aber auch noch ein paar Kinderkrankheiten. – z.B. Bugs, in die man auch mit kleinen Showcases läuft. – Vorsicht bei der Kombination von normalen mit reactive Bibliotheken!
  • 24. Zum Nachschlagen... ■ Website & Dokumentation: https://quarkus.io/ ■ Skeleton-Generator: https://code.quarkus.io/ ■ Das Reaktive Manifest: https://www.reactivemanifesto.org/de ■ Umfangreiche Benchmarks Quarkus vs. Spring Boot vs. Payara: https://github.com/rmh78/quarkus-performance ■ NEINhorn: https://neinhorn.codefoundry.de ■ NEINhorn @ GitHub (AGPL 3.0): https://github.com/zalintyre/neinhorn
  • 25. qaware.de QAware GmbH Aschauer Straße 32 81549 München Tel. +49 89 232315-0 info@qaware.de twitter.com/qaware linkedin.com/company/qaware-gmbh xing.com/companies/qawaregmbh slideshare.net/qaware github.com/qaware Q & A