SlideShare ist ein Scribd-Unternehmen logo
1 von 25
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

Der Status Quo des Chaos Engineerings
Der Status Quo des Chaos EngineeringsDer Status Quo des Chaos Engineerings
Der Status Quo des Chaos EngineeringsQAware 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 entwickelnQAware 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. #ContainerConfMario-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 InfrastrukturQAware 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 SparkQAware 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 NormalQAware GmbH
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsJosef 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 DockerNicholas 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 EntwicklungsperformanceOPEN KNOWLEDGE 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 GatewaysQAware GmbH
 
Ceph Introduction @GPN15
Ceph Introduction @GPN15Ceph Introduction @GPN15
Ceph Introduction @GPN15m1no
 
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 seinStephan 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 GmbHagilemethoden
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsQAware GmbH
 
openstack Übersicht @GPN15
openstack Übersicht @GPN15openstack Übersicht @GPN15
openstack Übersicht @GPN15m1no
 
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: QuarkusOPEN 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) #oop2017Mario-Leander Reimer
 

Was ist angesagt? (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
 

Ähnlich wie Quarkus Quickstart

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: SecurityMayflower GmbH
 
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 DataDai 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 CUDAJö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-ReplikationFromDual GmbH
 
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.pdfQAware GmbH
 
Funktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumFunktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumTorsten 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. @data2dayMario-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 KubernetesQAware 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
 
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 StackQAware 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-PlattformRising Media Ltd.
 
Lehmanns Rails Erweitern
Lehmanns Rails ErweiternLehmanns Rails Erweitern
Lehmanns Rails Erweiternjan_mindmatters
 

Ähnlich wie 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
 

Mehr von 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 MainzQAware 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 ArchitectureQAware 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 EngineeringQAware 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 PlaywrightQAware GmbH
 
Was kommt nach den SPAs
Was kommt nach den SPAsWas kommt nach den SPAs
Was kommt nach den SPAsQAware 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 AutoscalingQAware 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 ZAPQAware 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 AutoscalingQAware 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 GatewaysQAware 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
 
How to speed up Spring Integration Tests
How to speed up Spring Integration TestsHow to speed up Spring Integration Tests
How to speed up Spring Integration TestsQAware GmbH
 

Mehr von QAware GmbH (20)

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
 
How to speed up Spring Integration Tests
How to speed up Spring Integration TestsHow to speed up Spring Integration Tests
How to speed up Spring Integration Tests
 

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