SlideShare une entreprise Scribd logo
1  sur  82
Télécharger pour lire hors ligne
Microservices with Micronaut
2021-09-01 - Moritz Kammerer
WeAreDevelopers
About me
● 2013 M.Sc. Computer Science @ Munich
University of Applied Sciences
● 2013 Software Engineer @ QAware
● …
● 2021 Expert Software Engineer @ QAware
Working on backend stuff, mostly Java.
LinkedIn | GitHub
Why Cloud?
What’s the problem?
Why does it take so long?
● Start time of Spring (Boot)
○ Depends on the number of beans in the context
○ Reading of bytecode [3]
○ Creating proxies at runtime
○ Runtime AOP
○ Reflection
○ Annotation Synthesizing [1] [2]
● Memory usage
○ Reflective Metadata Cache
● Debugging
○ Very very long stacktraces
○ … with code in dynamically generated proxy classes
[1] https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/annotation/AnnotationUtils.html
[2] https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/annotation/AliasFor.html
[3] https://github.com/spring-projects/spring-framework/blob/master/spring-core/src/main/java/org/springframework/core/type/classreading/AbstractRecursiveAnnotationVisitor.java
Micronaut to the rescue!
What’s the (promised) solution?
● Create stuff at compile time
○ Proxies
○ Dependency Injection
○ AOP
● Why?
○ Compiled once, run often
○ Tradeoff: Compile time vs. Runtime
● Goal:
○ No reflection - or as little as possible
○ No proxies
○ Minimize startup time
○ Minimize memory usage
○ Readable stacktraces
And how does that work?
● Annotation Processor
○ Reads bytecode & annotations of the classes
○ Creates new classes
○ Doesn’t touch your code, just extends it
● Gradle
○ annotationProcessor "io.micronaut:micronaut-inject-java"
○ annotationProcessor "io.micronaut:micronaut-validation"
● Also runs with Maven
○ < Insert 500 KB of XML here >
And this is really working?
● Spring Boot 2.1.2 (starter-web), Java 11, @Component on empty class
○ 0 Beans: 1.236 seconds
○ 1000 Beans: 1.808 seconds
○ 2000 Beans: 2.356 seconds
○ 4000 Beans: 3.259 seconds
○ 8000 Beans: 6.498 seconds
○ 16000 Beans: 9.231 seconds
● Micronaut 1.0.4, Java 11, @Singleton on empty class
○ 0 Beans: 1085ms
○ 1000 Beans: 1870ms
○ 2000 Beans: 2757ms
○ 4000 Beans: 4529ms
○ 8000 Beans: 8038ms
○ 16000 Beans: 15861ms
Hmmmm...
Debunked: It’s not the classpath scanning
● Not so expensive:
○ Classpath scanning (Spring)
○ Injection with reflection (Spring)
● Expensive
○ Class Loading (Micronaut + Spring)
○ Runtime AOP Proxies (Spring)
○ Annotation Synthesizing (Spring)
○ Read bytecode on big classes (Spring)
○ Auto-Configuration Magic (Spring)
● Most of the expensive stuff is done at Micronaut compile time
Looks great, so not disadvantages?
The price you pay: Compile time (16k Beans)
Spring:
[INFO] Total time: 7.958 s
Micronaut:
BUILD SUCCESSFUL in 5m 3s
Benchmarking is hard!
● This was NOT a real benchmark
● Most time spent in the applications shown on the first slides: Spring
autoconfiguration magic
● It really depends on the needed feature of your application
○ Actuator
○ JPA / Hibernate
○ Tracing
○ Metrics
○ @FeignClient
○ @Transactional
○ @Cacheable
○ …
● Real benchmarks later in the slides :)
Okay... what else does Micronaut bring to the table?
● Dependency Injection
○ @Inject, @Named, @Singleton, @Prototype, ...
● REST Controller
○ @Controller, @GET, @POST, …
● Events
○ @PostConstruct
○ @EventListener
● AOP
○ Around Advice, Introduction Advice, …
● Validation
○ @Validated, @NotNull, ...
...
● Caching
○ @Cachable, @CacheInvalidate, …
● Retry
○ @Retryable
● Circuit Breaking
○ @CircuitBreaker
● Fallback / Recovery
○ @Recoverable / @Fallback
● Scheduling
○ @Scheduled
...
● Reactive & Blocking HTTP with Netty
○ Compile Time Route Validation
○ @Error Exception Handling ala Spring
● Websocket Server & Clients
● Server side views
○ Thymeleaf, Handlebars, Velocity
● OpenAPI / Swagger
○ Open API spec is created on compile time!
● HTTP Clients
○ @Client
○ Client-side load balancing
○ Service discovery (Consul, Eureka, K8S, Route 53, DNS based)
○ OpenTracing (Zipkin, Jaeger)
...
● Application Configuration
○ application.yml / .json / .groovy
○ Different Environments
○ Property Sources (ENV, System Properties, …)
○ @ConfigurationProperties, @Value
○ Distributed config with Consul, AWS Parameter Store
● Database support
○ JPA, Mongo, Neo4J, Postgres-Reactive, Redis, Cassandra
● Monitoring
○ @Endpoint (/beans, /info, /health, …)
○ Metrics with Micrometer
○ Change log level at runtime
...
● Security
○ Like Spring Security with users and roles (RBAC)
○ Basic Auth / Session based
○ JWT (JWS and JWE) incl. automatic token propagation
○ Auth with LDAP
● Function-as-a-Service (AWS Lambda, OpenFaaS)
● Message driven services (RabbitMQ / Kafka)
● CLI applications
● Good documentation!
○ e.g. with tutorials for Let’s Encrypt, starting Consul, etc.
Enough bla bla, show code!
Service to be
written github.com
My browser
HTTP Server
HTTP Client
The Internet
Bootstrapping a project
mn create-app --build=maven demo
Creating a HTTP endpoint
Dependency Injection
Message: No bean of type [demo.service.ProjectService] exists.
Path Taken: new ProjectsController(ProjectService projectService) --> new ProjectsController([ProjectService
projectService])
Failed to inject value for parameter [projectService] of class: demo.ProjectsController
Service to be
written github.com
My browser
HTTP Server
HTTP Client
The Internet
Creating a HTTP client
https://api.github.com/search/repositories?q=stars:%3E1&sort=stars
Caching
application.yml
1st request 2nd request
Failure Recovery
Scheduled beans
Reading configuration values
application.yml
Benchmarks
Spring vs. Micronaut - GitHub Scraper
Micronaut 2.2.1
BUILD SUCCESSFUL in 3s
0,89s user 0,07s system 22% cpu 4,199 total
Startup completed in 625ms
Spring vs. Micronaut - GitHub Scraper
Spring 2.4.1
BUILD SUCCESSFUL in 1s
0,86s user 0,09s system 67% cpu 1,414 total
Started DemoApplication in 1.21 seconds (JVM running for 1.556)
Micronaut (JAR: 14.8 MB)
java -Xms16M -Xmx512M -jar github-scraper-0.1-all.jar / OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.9+11)
Micronaut
wrk -t 8 -c 80 -d 30s --latency http://localhost:8080/github/stars
Running 30s test @ http://localhost:8080/github/stars
8 threads and 80 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 2.21ms 5.33ms 139.33ms 91.82%
Req/Sec 15.22k 5.34k 27.39k 72.74%
Latency Distribution
50% 286.00us
75% 1.98ms
90% 6.44ms
99% 22.34ms
2765210 requests in 30.07s, 1.38GB read
Requests/sec: 91956.68
Transfer/sec: 47.01MB
Spring Boot (JAR: 30.6 MB)
java -Xms16M -Xmx512M -jar github-scraper-spring-0.0.1-SNAPSHOT.jar / OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.9+11)
Spring Boot
wrk -t 8 -c 80 -d 30s --latency http://localhost:8080/github/stars
Running 30s test @ http://localhost:8080/github/stars
8 threads and 80 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 10.23ms 65.15ms 778.07ms 97.82%
Req/Sec 9.29k 2.69k 14.24k 78.93%
Latency Distribution
50% 0.87ms
75% 1.55ms
90% 3.36ms
99% 414.50ms
2169903 requests in 30.10s, 1.07GB read
Requests/sec: 72091.42
Transfer/sec: 36.38MB
How much RAM do I have to use?
Minimal Heap Size - Micronaut (-Xmx32M)
Minimal Heap Size - Micronaut (-Xmx32M)
wrk -t 8 -c 80 -d 30s --latency http://localhost:8080/github/stars
Running 30s test @ http://localhost:8080/github/stars
8 threads and 80 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 2.68ms 6.40ms 135.54ms 91.54%
Req/Sec 11.34k 4.58k 23.37k 68.22%
Latency Distribution
50% 270.00us
75% 2.58ms
90% 8.02ms
99% 27.00ms
1717518 requests in 30.06s, 631.95MB read
Socket errors: connect 0, read 0, write 0, timeout 80
Requests/sec: 57134.45
Transfer/sec: 21.02MB
Minimal Heap Size - Spring (-Xmx32M)
Minimal Heap Size - Spring (-Xmx32M)
wrk -t 8 -c 80 -d 30s --latency http://localhost:8080/github/stars
Running 30s test @ http://localhost:8080/github/stars
8 threads and 80 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 16.38ms 87.16ms 955.97ms 97.33%
Req/Sec 3.92k 1.19k 6.21k 75.93%
Latency Distribution
50% 2.11ms
75% 4.21ms
90% 8.59ms
99% 578.98ms
905844 requests in 30.05s, 457.16MB read
Requests/sec: 30148.82
Transfer/sec: 15.22MB
Minimal Heap Size - Spring (-Xmx64M)
Minimal Heap Size - Spring (-Xmx64M)
wrk -t 8 -c 80 -d 30s --latency http://localhost:8080/github/stars
Running 30s test @ http://localhost:8080/github/stars
8 threads and 80 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 10.50ms 66.17ms 786.18ms 97.73%
Req/Sec 8.60k 2.27k 13.25k 79.23%
Latency Distribution
50% 0.95ms
75% 1.68ms
90% 3.30ms
99% 423.31ms
2006502 requests in 30.09s, 0.99GB read
Requests/sec: 66689.38
Transfer/sec: 33.66MB
Minimal Heap Size - Micronaut (-Xmx64M)
Minimal Heap Size - Micronaut (-Xmx64M)
wrk -t 8 -c 80 -d 30s --latency http://localhost:8080/github/stars
Running 30s test @ http://localhost:8080/github/stars
8 threads and 80 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 2.28ms 5.05ms 95.77ms 90.92%
Req/Sec 14.11k 5.15k 25.09k 73.51%
Latency Distribution
50% 283.00us
75% 2.12ms
90% 6.78ms
99% 23.54ms
2451595 requests in 30.06s, 1.22GB read
Requests/sec: 81556.51
Transfer/sec: 41.69MB
Graal VM
“High-performance polyglot VM”
(and AOT compiler)
Graal Substrate VM
$ ./gradlew nativeImage (or ./mvnw package -Dpackaging=native-image)
… 2 minutes later …
$ file application
application: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked,
interpreter /lib64/ld-linux-x86-64.so.2 for GNU/Linux 3.2.0, with debug_info, not stripped
$ ll application
-rwxr-xr-x. 1 moe moe 62M 18. Dez 11:29 application
$ ldd application
linux-vdso.so.1 (0x00007ffd7cbbe000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fc717414000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fc71740d000)
libz.so.1 => /lib64/libz.so.1 (0x00007fc7173f3000)
librt.so.1 => /lib64/librt.so.1 (0x00007fc7173e8000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fc7173cd000)
libc.so.6 => /lib64/libc.so.6 (0x00007fc717202000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc717456000)
Graal (no -Xmx set)
KB = 92 MB
Idle:
Under load:
Startup completed in 67ms.
Graal - Benchmark
wrk -t 8 -c 80 -d 30s --latency http://localhost:8080/github/stars
Running 30s test @ http://localhost:8080/github/stars
8 threads and 80 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.60ms 2.28ms 41.76ms 86.51%
Req/Sec 8.88k 1.21k 12.09k 79.71%
Latency Distribution
50% 416.00us
75% 2.34ms
90% 4.61ms
99% 10.16ms
1355757 requests in 30.04s, 305.29MB read
Socket errors: connect 0, read 0, write 0, timeout 80
Requests/sec: 45130.28
Transfer/sec: 10.16MB
Conclusion
Experience from the trenches
Pro:
● Services start faster than Spring Boot
● Smaller JARs
● Tests are faster, as the embedded server starts fast
○ Spring mitigates this with application context caching!
Contra:
● No separation of management and API port
● Spring Boot is more common (more documentation, blog posts, Stack
Overflow answers)
● Extension story from Spring is better (e.g. OAuth2)
Conclusion
● Good documentation
● Recommendation for writing small services
○ I have no experience with bigger services in Micronaut. If you have, please contact me :)
● Development is fun
● If the features are sufficient: Try it!
● GraalVM Substrate VM, if you get it to run, is really cool
○ This is NOT a JVM, so profilers / metrics / thread dumps etc. won’t work
○ Build times like it’s C++ (> 30s)
○ Not all libraries are compatible and workarounds must be used
■ I ran into trouble with Caffeine Cache (GitHub Issue)
Literature
● GitHub Repo: https://github.com/qaware/microservices-with-micronaut
● Micronaut documentation: https://docs.micronaut.io/latest/guide/index.html
● GraalVM: https://www.graalvm.org/
Questions?
Contact: moritz.kammerer@qaware.de

Contenu connexe

Tendances

Brian Ketelsen - Microservices in Go using Micro - Codemotion Milan 2017
Brian Ketelsen - Microservices in Go using Micro - Codemotion Milan 2017Brian Ketelsen - Microservices in Go using Micro - Codemotion Milan 2017
Brian Ketelsen - Microservices in Go using Micro - Codemotion Milan 2017Codemotion
 
NetflixOSS season 2 episode 2 - Reactive / Async
NetflixOSS   season 2 episode 2 - Reactive / AsyncNetflixOSS   season 2 episode 2 - Reactive / Async
NetflixOSS season 2 episode 2 - Reactive / AsyncRuslan Meshenberg
 
Real World Enterprise Reactive Programming using Vert.x
Real World Enterprise Reactive Programming using Vert.xReal World Enterprise Reactive Programming using Vert.x
Real World Enterprise Reactive Programming using Vert.xSascha Möllering
 
QCon NYC: Distributed systems in practice, in theory
QCon NYC: Distributed systems in practice, in theoryQCon NYC: Distributed systems in practice, in theory
QCon NYC: Distributed systems in practice, in theoryAysylu Greenberg
 
Building your own NSQL store
Building your own NSQL storeBuilding your own NSQL store
Building your own NSQL storeEdward Capriolo
 
GIDS_what does_cloud-native_mean_anyway?
GIDS_what does_cloud-native_mean_anyway?GIDS_what does_cloud-native_mean_anyway?
GIDS_what does_cloud-native_mean_anyway?Grace Jansen
 
Kubernetes Summit 2019 - Harden Your Kubernetes Cluster
Kubernetes Summit 2019 - Harden Your Kubernetes ClusterKubernetes Summit 2019 - Harden Your Kubernetes Cluster
Kubernetes Summit 2019 - Harden Your Kubernetes Clustersmalltown
 
Reactive applications and microservices with Vert.x tool-kit
Reactive applications and microservices with Vert.x tool-kitReactive applications and microservices with Vert.x tool-kit
Reactive applications and microservices with Vert.x tool-kitVictor Hugo
 
2 Day Bootcamp for OpenStack--Cloud Training by Mirantis (Preview)
2 Day Bootcamp for OpenStack--Cloud Training by Mirantis (Preview)2 Day Bootcamp for OpenStack--Cloud Training by Mirantis (Preview)
2 Day Bootcamp for OpenStack--Cloud Training by Mirantis (Preview)Mirantis
 
Openstack meetup-pune-aug22-overview
Openstack meetup-pune-aug22-overviewOpenstack meetup-pune-aug22-overview
Openstack meetup-pune-aug22-overviewrajdeep
 
Building a multi-tenant cloud service from legacy code with Docker containers
Building a multi-tenant cloud service from legacy code with Docker containersBuilding a multi-tenant cloud service from legacy code with Docker containers
Building a multi-tenant cloud service from legacy code with Docker containersaslomibm
 
Building a Global-Scale Multi-Tenant Cloud Platform on AWS and Docker: Lesson...
Building a Global-Scale Multi-Tenant Cloud Platform on AWS and Docker: Lesson...Building a Global-Scale Multi-Tenant Cloud Platform on AWS and Docker: Lesson...
Building a Global-Scale Multi-Tenant Cloud Platform on AWS and Docker: Lesson...Felix Gessert
 
VMware Hybrid Cloud Service - Overview
VMware Hybrid Cloud Service - OverviewVMware Hybrid Cloud Service - Overview
VMware Hybrid Cloud Service - Overviewrajdeep
 
Orchestration tool roundup - OpenStack Israel summit - kubernetes vs. docker...
Orchestration tool roundup  - OpenStack Israel summit - kubernetes vs. docker...Orchestration tool roundup  - OpenStack Israel summit - kubernetes vs. docker...
Orchestration tool roundup - OpenStack Israel summit - kubernetes vs. docker...Uri Cohen
 
Locking down your Kubernetes cluster with Linkerd
Locking down your Kubernetes cluster with LinkerdLocking down your Kubernetes cluster with Linkerd
Locking down your Kubernetes cluster with LinkerdBuoyant
 
Monitoring and Tuning GlassFish
Monitoring and Tuning GlassFishMonitoring and Tuning GlassFish
Monitoring and Tuning GlassFishC2B2 Consulting
 
Powering Microservices with Docker, Kubernetes, Kafka, & MongoDB
Powering Microservices with Docker, Kubernetes, Kafka, & MongoDBPowering Microservices with Docker, Kubernetes, Kafka, & MongoDB
Powering Microservices with Docker, Kubernetes, Kafka, & MongoDBMongoDB
 
Service Discovery In Kubernetes
Service Discovery In KubernetesService Discovery In Kubernetes
Service Discovery In KubernetesKnoldus Inc.
 

Tendances (20)

Brian Ketelsen - Microservices in Go using Micro - Codemotion Milan 2017
Brian Ketelsen - Microservices in Go using Micro - Codemotion Milan 2017Brian Ketelsen - Microservices in Go using Micro - Codemotion Milan 2017
Brian Ketelsen - Microservices in Go using Micro - Codemotion Milan 2017
 
NetflixOSS season 2 episode 2 - Reactive / Async
NetflixOSS   season 2 episode 2 - Reactive / AsyncNetflixOSS   season 2 episode 2 - Reactive / Async
NetflixOSS season 2 episode 2 - Reactive / Async
 
Multi tenancy for docker
Multi tenancy for dockerMulti tenancy for docker
Multi tenancy for docker
 
Real World Enterprise Reactive Programming using Vert.x
Real World Enterprise Reactive Programming using Vert.xReal World Enterprise Reactive Programming using Vert.x
Real World Enterprise Reactive Programming using Vert.x
 
QCon NYC: Distributed systems in practice, in theory
QCon NYC: Distributed systems in practice, in theoryQCon NYC: Distributed systems in practice, in theory
QCon NYC: Distributed systems in practice, in theory
 
Building your own NSQL store
Building your own NSQL storeBuilding your own NSQL store
Building your own NSQL store
 
GIDS_what does_cloud-native_mean_anyway?
GIDS_what does_cloud-native_mean_anyway?GIDS_what does_cloud-native_mean_anyway?
GIDS_what does_cloud-native_mean_anyway?
 
Kubernetes Summit 2019 - Harden Your Kubernetes Cluster
Kubernetes Summit 2019 - Harden Your Kubernetes ClusterKubernetes Summit 2019 - Harden Your Kubernetes Cluster
Kubernetes Summit 2019 - Harden Your Kubernetes Cluster
 
Node js internal
Node js internalNode js internal
Node js internal
 
Reactive applications and microservices with Vert.x tool-kit
Reactive applications and microservices with Vert.x tool-kitReactive applications and microservices with Vert.x tool-kit
Reactive applications and microservices with Vert.x tool-kit
 
2 Day Bootcamp for OpenStack--Cloud Training by Mirantis (Preview)
2 Day Bootcamp for OpenStack--Cloud Training by Mirantis (Preview)2 Day Bootcamp for OpenStack--Cloud Training by Mirantis (Preview)
2 Day Bootcamp for OpenStack--Cloud Training by Mirantis (Preview)
 
Openstack meetup-pune-aug22-overview
Openstack meetup-pune-aug22-overviewOpenstack meetup-pune-aug22-overview
Openstack meetup-pune-aug22-overview
 
Building a multi-tenant cloud service from legacy code with Docker containers
Building a multi-tenant cloud service from legacy code with Docker containersBuilding a multi-tenant cloud service from legacy code with Docker containers
Building a multi-tenant cloud service from legacy code with Docker containers
 
Building a Global-Scale Multi-Tenant Cloud Platform on AWS and Docker: Lesson...
Building a Global-Scale Multi-Tenant Cloud Platform on AWS and Docker: Lesson...Building a Global-Scale Multi-Tenant Cloud Platform on AWS and Docker: Lesson...
Building a Global-Scale Multi-Tenant Cloud Platform on AWS and Docker: Lesson...
 
VMware Hybrid Cloud Service - Overview
VMware Hybrid Cloud Service - OverviewVMware Hybrid Cloud Service - Overview
VMware Hybrid Cloud Service - Overview
 
Orchestration tool roundup - OpenStack Israel summit - kubernetes vs. docker...
Orchestration tool roundup  - OpenStack Israel summit - kubernetes vs. docker...Orchestration tool roundup  - OpenStack Israel summit - kubernetes vs. docker...
Orchestration tool roundup - OpenStack Israel summit - kubernetes vs. docker...
 
Locking down your Kubernetes cluster with Linkerd
Locking down your Kubernetes cluster with LinkerdLocking down your Kubernetes cluster with Linkerd
Locking down your Kubernetes cluster with Linkerd
 
Monitoring and Tuning GlassFish
Monitoring and Tuning GlassFishMonitoring and Tuning GlassFish
Monitoring and Tuning GlassFish
 
Powering Microservices with Docker, Kubernetes, Kafka, & MongoDB
Powering Microservices with Docker, Kubernetes, Kafka, & MongoDBPowering Microservices with Docker, Kubernetes, Kafka, & MongoDB
Powering Microservices with Docker, Kubernetes, Kafka, & MongoDB
 
Service Discovery In Kubernetes
Service Discovery In KubernetesService Discovery In Kubernetes
Service Discovery In Kubernetes
 

Similaire à Microservices with Micronaut

Microservices with Micronaut
Microservices with MicronautMicroservices with Micronaut
Microservices with MicronautQAware GmbH
 
Best Practices for performance evaluation and diagnosis of Java Applications ...
Best Practices for performance evaluation and diagnosis of Java Applications ...Best Practices for performance evaluation and diagnosis of Java Applications ...
Best Practices for performance evaluation and diagnosis of Java Applications ...IndicThreads
 
End to End Processing of 3.7 Million Telemetry Events per Second using Lambda...
End to End Processing of 3.7 Million Telemetry Events per Second using Lambda...End to End Processing of 3.7 Million Telemetry Events per Second using Lambda...
End to End Processing of 3.7 Million Telemetry Events per Second using Lambda...DataWorks Summit/Hadoop Summit
 
Container Performance Analysis Brendan Gregg, Netflix
Container Performance Analysis Brendan Gregg, NetflixContainer Performance Analysis Brendan Gregg, Netflix
Container Performance Analysis Brendan Gregg, NetflixDocker, Inc.
 
Container Performance Analysis
Container Performance AnalysisContainer Performance Analysis
Container Performance AnalysisBrendan Gregg
 
Writing Serverless Application in Java with comparison of 3 approaches: AWS S...
Writing Serverless Application in Java with comparison of 3 approaches: AWS S...Writing Serverless Application in Java with comparison of 3 approaches: AWS S...
Writing Serverless Application in Java with comparison of 3 approaches: AWS S...Andrew Zakordonets
 
Looming Marvelous - Virtual Threads in Java Javaland.pdf
Looming Marvelous - Virtual Threads in Java Javaland.pdfLooming Marvelous - Virtual Threads in Java Javaland.pdf
Looming Marvelous - Virtual Threads in Java Javaland.pdfjexp
 
Hs java open_party
Hs java open_partyHs java open_party
Hs java open_partyOpen Party
 
Introduction to apache kafka
Introduction to apache kafkaIntroduction to apache kafka
Introduction to apache kafkaSamuel Kerrien
 
YOW2018 Cloud Performance Root Cause Analysis at Netflix
YOW2018 Cloud Performance Root Cause Analysis at NetflixYOW2018 Cloud Performance Root Cause Analysis at Netflix
YOW2018 Cloud Performance Root Cause Analysis at NetflixBrendan Gregg
 
Node.js Web Apps @ ebay scale
Node.js Web Apps @ ebay scaleNode.js Web Apps @ ebay scale
Node.js Web Apps @ ebay scaleDmytro Semenov
 
Netflix Keystone Pipeline at Samza Meetup 10-13-2015
Netflix Keystone Pipeline at Samza Meetup 10-13-2015Netflix Keystone Pipeline at Samza Meetup 10-13-2015
Netflix Keystone Pipeline at Samza Meetup 10-13-2015Monal Daxini
 
Software Profiling: Understanding Java Performance and how to profile in Java
Software Profiling: Understanding Java Performance and how to profile in JavaSoftware Profiling: Understanding Java Performance and how to profile in Java
Software Profiling: Understanding Java Performance and how to profile in JavaIsuru Perera
 
Performance Tuning Oracle Weblogic Server 12c
Performance Tuning Oracle Weblogic Server 12cPerformance Tuning Oracle Weblogic Server 12c
Performance Tuning Oracle Weblogic Server 12cAjith Narayanan
 
Hadoop cluster performance profiler
Hadoop cluster performance profilerHadoop cluster performance profiler
Hadoop cluster performance profilerIhor Bobak
 
Software Profiling: Java Performance, Profiling and Flamegraphs
Software Profiling: Java Performance, Profiling and FlamegraphsSoftware Profiling: Java Performance, Profiling and Flamegraphs
Software Profiling: Java Performance, Profiling and FlamegraphsIsuru Perera
 
Java and Containers - Make it Awesome !
Java and Containers - Make it Awesome !Java and Containers - Make it Awesome !
Java and Containers - Make it Awesome !Dinakar Guniguntala
 
Deep Dive on Amazon EC2 instances
Deep Dive on Amazon EC2 instancesDeep Dive on Amazon EC2 instances
Deep Dive on Amazon EC2 instancesAmazon Web Services
 
Open Source XMPP for Cloud Services
Open Source XMPP for Cloud ServicesOpen Source XMPP for Cloud Services
Open Source XMPP for Cloud Servicesmattjive
 

Similaire à Microservices with Micronaut (20)

Microservices with Micronaut
Microservices with MicronautMicroservices with Micronaut
Microservices with Micronaut
 
Best Practices for performance evaluation and diagnosis of Java Applications ...
Best Practices for performance evaluation and diagnosis of Java Applications ...Best Practices for performance evaluation and diagnosis of Java Applications ...
Best Practices for performance evaluation and diagnosis of Java Applications ...
 
End to End Processing of 3.7 Million Telemetry Events per Second using Lambda...
End to End Processing of 3.7 Million Telemetry Events per Second using Lambda...End to End Processing of 3.7 Million Telemetry Events per Second using Lambda...
End to End Processing of 3.7 Million Telemetry Events per Second using Lambda...
 
Container Performance Analysis Brendan Gregg, Netflix
Container Performance Analysis Brendan Gregg, NetflixContainer Performance Analysis Brendan Gregg, Netflix
Container Performance Analysis Brendan Gregg, Netflix
 
Container Performance Analysis
Container Performance AnalysisContainer Performance Analysis
Container Performance Analysis
 
Writing Serverless Application in Java with comparison of 3 approaches: AWS S...
Writing Serverless Application in Java with comparison of 3 approaches: AWS S...Writing Serverless Application in Java with comparison of 3 approaches: AWS S...
Writing Serverless Application in Java with comparison of 3 approaches: AWS S...
 
Java Memory Model
Java Memory ModelJava Memory Model
Java Memory Model
 
Looming Marvelous - Virtual Threads in Java Javaland.pdf
Looming Marvelous - Virtual Threads in Java Javaland.pdfLooming Marvelous - Virtual Threads in Java Javaland.pdf
Looming Marvelous - Virtual Threads in Java Javaland.pdf
 
Hs java open_party
Hs java open_partyHs java open_party
Hs java open_party
 
Introduction to apache kafka
Introduction to apache kafkaIntroduction to apache kafka
Introduction to apache kafka
 
YOW2018 Cloud Performance Root Cause Analysis at Netflix
YOW2018 Cloud Performance Root Cause Analysis at NetflixYOW2018 Cloud Performance Root Cause Analysis at Netflix
YOW2018 Cloud Performance Root Cause Analysis at Netflix
 
Node.js Web Apps @ ebay scale
Node.js Web Apps @ ebay scaleNode.js Web Apps @ ebay scale
Node.js Web Apps @ ebay scale
 
Netflix Keystone Pipeline at Samza Meetup 10-13-2015
Netflix Keystone Pipeline at Samza Meetup 10-13-2015Netflix Keystone Pipeline at Samza Meetup 10-13-2015
Netflix Keystone Pipeline at Samza Meetup 10-13-2015
 
Software Profiling: Understanding Java Performance and how to profile in Java
Software Profiling: Understanding Java Performance and how to profile in JavaSoftware Profiling: Understanding Java Performance and how to profile in Java
Software Profiling: Understanding Java Performance and how to profile in Java
 
Performance Tuning Oracle Weblogic Server 12c
Performance Tuning Oracle Weblogic Server 12cPerformance Tuning Oracle Weblogic Server 12c
Performance Tuning Oracle Weblogic Server 12c
 
Hadoop cluster performance profiler
Hadoop cluster performance profilerHadoop cluster performance profiler
Hadoop cluster performance profiler
 
Software Profiling: Java Performance, Profiling and Flamegraphs
Software Profiling: Java Performance, Profiling and FlamegraphsSoftware Profiling: Java Performance, Profiling and Flamegraphs
Software Profiling: Java Performance, Profiling and Flamegraphs
 
Java and Containers - Make it Awesome !
Java and Containers - Make it Awesome !Java and Containers - Make it Awesome !
Java and Containers - Make it Awesome !
 
Deep Dive on Amazon EC2 instances
Deep Dive on Amazon EC2 instancesDeep Dive on Amazon EC2 instances
Deep Dive on Amazon EC2 instances
 
Open Source XMPP for Cloud Services
Open Source XMPP for Cloud ServicesOpen Source XMPP for Cloud Services
Open Source XMPP for Cloud Services
 

Plus de QAware 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
 
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
 

Plus de QAware GmbH (20)

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
 
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
 

Dernier

Invezz.com - Grow your wealth with trading signals
Invezz.com - Grow your wealth with trading signalsInvezz.com - Grow your wealth with trading signals
Invezz.com - Grow your wealth with trading signalsInvezz1
 
Determinants of health, dimensions of health, positive health and spectrum of...
Determinants of health, dimensions of health, positive health and spectrum of...Determinants of health, dimensions of health, positive health and spectrum of...
Determinants of health, dimensions of health, positive health and spectrum of...shambhavirathore45
 
CALL ON ➥8923113531 🔝Call Girls Chinhat Lucknow best sexual service Online
CALL ON ➥8923113531 🔝Call Girls Chinhat Lucknow best sexual service OnlineCALL ON ➥8923113531 🔝Call Girls Chinhat Lucknow best sexual service Online
CALL ON ➥8923113531 🔝Call Girls Chinhat Lucknow best sexual service Onlineanilsa9823
 
Halmar dropshipping via API with DroFx
Halmar  dropshipping  via API with DroFxHalmar  dropshipping  via API with DroFx
Halmar dropshipping via API with DroFxolyaivanovalion
 
Al Barsha Escorts $#$ O565212860 $#$ Escort Service In Al Barsha
Al Barsha Escorts $#$ O565212860 $#$ Escort Service In Al BarshaAl Barsha Escorts $#$ O565212860 $#$ Escort Service In Al Barsha
Al Barsha Escorts $#$ O565212860 $#$ Escort Service In Al BarshaAroojKhan71
 
(PARI) Call Girls Wanowrie ( 7001035870 ) HI-Fi Pune Escorts Service
(PARI) Call Girls Wanowrie ( 7001035870 ) HI-Fi Pune Escorts Service(PARI) Call Girls Wanowrie ( 7001035870 ) HI-Fi Pune Escorts Service
(PARI) Call Girls Wanowrie ( 7001035870 ) HI-Fi Pune Escorts Serviceranjana rawat
 
April 2024 - Crypto Market Report's Analysis
April 2024 - Crypto Market Report's AnalysisApril 2024 - Crypto Market Report's Analysis
April 2024 - Crypto Market Report's Analysismanisha194592
 
Chintamani Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore ...
Chintamani Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore ...Chintamani Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore ...
Chintamani Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore ...amitlee9823
 
Market Analysis in the 5 Largest Economic Countries in Southeast Asia.pdf
Market Analysis in the 5 Largest Economic Countries in Southeast Asia.pdfMarket Analysis in the 5 Largest Economic Countries in Southeast Asia.pdf
Market Analysis in the 5 Largest Economic Countries in Southeast Asia.pdfRachmat Ramadhan H
 
ALSO dropshipping via API with DroFx.pptx
ALSO dropshipping via API with DroFx.pptxALSO dropshipping via API with DroFx.pptx
ALSO dropshipping via API with DroFx.pptxolyaivanovalion
 
{Pooja: 9892124323 } Call Girl in Mumbai | Jas Kaur Rate 4500 Free Hotel Del...
{Pooja:  9892124323 } Call Girl in Mumbai | Jas Kaur Rate 4500 Free Hotel Del...{Pooja:  9892124323 } Call Girl in Mumbai | Jas Kaur Rate 4500 Free Hotel Del...
{Pooja: 9892124323 } Call Girl in Mumbai | Jas Kaur Rate 4500 Free Hotel Del...Pooja Nehwal
 
Ravak dropshipping via API with DroFx.pptx
Ravak dropshipping via API with DroFx.pptxRavak dropshipping via API with DroFx.pptx
Ravak dropshipping via API with DroFx.pptxolyaivanovalion
 
Carero dropshipping via API with DroFx.pptx
Carero dropshipping via API with DroFx.pptxCarero dropshipping via API with DroFx.pptx
Carero dropshipping via API with DroFx.pptxolyaivanovalion
 
Generative AI on Enterprise Cloud with NiFi and Milvus
Generative AI on Enterprise Cloud with NiFi and MilvusGenerative AI on Enterprise Cloud with NiFi and Milvus
Generative AI on Enterprise Cloud with NiFi and MilvusTimothy Spann
 
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...amitlee9823
 
Capstone Project on IBM Data Analytics Program
Capstone Project on IBM Data Analytics ProgramCapstone Project on IBM Data Analytics Program
Capstone Project on IBM Data Analytics ProgramMoniSankarHazra
 
Log Analysis using OSSEC sasoasasasas.pptx
Log Analysis using OSSEC sasoasasasas.pptxLog Analysis using OSSEC sasoasasasas.pptx
Log Analysis using OSSEC sasoasasasas.pptxJohnnyPlasten
 
꧁❤ Greater Noida Call Girls Delhi ❤꧂ 9711199171 ☎️ Hard And Sexy Vip Call
꧁❤ Greater Noida Call Girls Delhi ❤꧂ 9711199171 ☎️ Hard And Sexy Vip Call꧁❤ Greater Noida Call Girls Delhi ❤꧂ 9711199171 ☎️ Hard And Sexy Vip Call
꧁❤ Greater Noida Call Girls Delhi ❤꧂ 9711199171 ☎️ Hard And Sexy Vip Callshivangimorya083
 

Dernier (20)

Invezz.com - Grow your wealth with trading signals
Invezz.com - Grow your wealth with trading signalsInvezz.com - Grow your wealth with trading signals
Invezz.com - Grow your wealth with trading signals
 
Determinants of health, dimensions of health, positive health and spectrum of...
Determinants of health, dimensions of health, positive health and spectrum of...Determinants of health, dimensions of health, positive health and spectrum of...
Determinants of health, dimensions of health, positive health and spectrum of...
 
CALL ON ➥8923113531 🔝Call Girls Chinhat Lucknow best sexual service Online
CALL ON ➥8923113531 🔝Call Girls Chinhat Lucknow best sexual service OnlineCALL ON ➥8923113531 🔝Call Girls Chinhat Lucknow best sexual service Online
CALL ON ➥8923113531 🔝Call Girls Chinhat Lucknow best sexual service Online
 
Halmar dropshipping via API with DroFx
Halmar  dropshipping  via API with DroFxHalmar  dropshipping  via API with DroFx
Halmar dropshipping via API with DroFx
 
Al Barsha Escorts $#$ O565212860 $#$ Escort Service In Al Barsha
Al Barsha Escorts $#$ O565212860 $#$ Escort Service In Al BarshaAl Barsha Escorts $#$ O565212860 $#$ Escort Service In Al Barsha
Al Barsha Escorts $#$ O565212860 $#$ Escort Service In Al Barsha
 
(PARI) Call Girls Wanowrie ( 7001035870 ) HI-Fi Pune Escorts Service
(PARI) Call Girls Wanowrie ( 7001035870 ) HI-Fi Pune Escorts Service(PARI) Call Girls Wanowrie ( 7001035870 ) HI-Fi Pune Escorts Service
(PARI) Call Girls Wanowrie ( 7001035870 ) HI-Fi Pune Escorts Service
 
April 2024 - Crypto Market Report's Analysis
April 2024 - Crypto Market Report's AnalysisApril 2024 - Crypto Market Report's Analysis
April 2024 - Crypto Market Report's Analysis
 
Chintamani Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore ...
Chintamani Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore ...Chintamani Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore ...
Chintamani Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore ...
 
Market Analysis in the 5 Largest Economic Countries in Southeast Asia.pdf
Market Analysis in the 5 Largest Economic Countries in Southeast Asia.pdfMarket Analysis in the 5 Largest Economic Countries in Southeast Asia.pdf
Market Analysis in the 5 Largest Economic Countries in Southeast Asia.pdf
 
Abortion pills in Doha Qatar (+966572737505 ! Get Cytotec
Abortion pills in Doha Qatar (+966572737505 ! Get CytotecAbortion pills in Doha Qatar (+966572737505 ! Get Cytotec
Abortion pills in Doha Qatar (+966572737505 ! Get Cytotec
 
ALSO dropshipping via API with DroFx.pptx
ALSO dropshipping via API with DroFx.pptxALSO dropshipping via API with DroFx.pptx
ALSO dropshipping via API with DroFx.pptx
 
{Pooja: 9892124323 } Call Girl in Mumbai | Jas Kaur Rate 4500 Free Hotel Del...
{Pooja:  9892124323 } Call Girl in Mumbai | Jas Kaur Rate 4500 Free Hotel Del...{Pooja:  9892124323 } Call Girl in Mumbai | Jas Kaur Rate 4500 Free Hotel Del...
{Pooja: 9892124323 } Call Girl in Mumbai | Jas Kaur Rate 4500 Free Hotel Del...
 
Ravak dropshipping via API with DroFx.pptx
Ravak dropshipping via API with DroFx.pptxRavak dropshipping via API with DroFx.pptx
Ravak dropshipping via API with DroFx.pptx
 
Carero dropshipping via API with DroFx.pptx
Carero dropshipping via API with DroFx.pptxCarero dropshipping via API with DroFx.pptx
Carero dropshipping via API with DroFx.pptx
 
Generative AI on Enterprise Cloud with NiFi and Milvus
Generative AI on Enterprise Cloud with NiFi and MilvusGenerative AI on Enterprise Cloud with NiFi and Milvus
Generative AI on Enterprise Cloud with NiFi and Milvus
 
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
 
Capstone Project on IBM Data Analytics Program
Capstone Project on IBM Data Analytics ProgramCapstone Project on IBM Data Analytics Program
Capstone Project on IBM Data Analytics Program
 
Log Analysis using OSSEC sasoasasasas.pptx
Log Analysis using OSSEC sasoasasasas.pptxLog Analysis using OSSEC sasoasasasas.pptx
Log Analysis using OSSEC sasoasasasas.pptx
 
꧁❤ Aerocity Call Girls Service Aerocity Delhi ❤꧂ 9999965857 ☎️ Hard And Sexy ...
꧁❤ Aerocity Call Girls Service Aerocity Delhi ❤꧂ 9999965857 ☎️ Hard And Sexy ...꧁❤ Aerocity Call Girls Service Aerocity Delhi ❤꧂ 9999965857 ☎️ Hard And Sexy ...
꧁❤ Aerocity Call Girls Service Aerocity Delhi ❤꧂ 9999965857 ☎️ Hard And Sexy ...
 
꧁❤ Greater Noida Call Girls Delhi ❤꧂ 9711199171 ☎️ Hard And Sexy Vip Call
꧁❤ Greater Noida Call Girls Delhi ❤꧂ 9711199171 ☎️ Hard And Sexy Vip Call꧁❤ Greater Noida Call Girls Delhi ❤꧂ 9711199171 ☎️ Hard And Sexy Vip Call
꧁❤ Greater Noida Call Girls Delhi ❤꧂ 9711199171 ☎️ Hard And Sexy Vip Call
 

Microservices with Micronaut

  • 1. Microservices with Micronaut 2021-09-01 - Moritz Kammerer WeAreDevelopers
  • 2. About me ● 2013 M.Sc. Computer Science @ Munich University of Applied Sciences ● 2013 Software Engineer @ QAware ● … ● 2021 Expert Software Engineer @ QAware Working on backend stuff, mostly Java. LinkedIn | GitHub
  • 5. Why does it take so long? ● Start time of Spring (Boot) ○ Depends on the number of beans in the context ○ Reading of bytecode [3] ○ Creating proxies at runtime ○ Runtime AOP ○ Reflection ○ Annotation Synthesizing [1] [2] ● Memory usage ○ Reflective Metadata Cache ● Debugging ○ Very very long stacktraces ○ … with code in dynamically generated proxy classes [1] https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/annotation/AnnotationUtils.html [2] https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/annotation/AliasFor.html [3] https://github.com/spring-projects/spring-framework/blob/master/spring-core/src/main/java/org/springframework/core/type/classreading/AbstractRecursiveAnnotationVisitor.java
  • 7. What’s the (promised) solution? ● Create stuff at compile time ○ Proxies ○ Dependency Injection ○ AOP ● Why? ○ Compiled once, run often ○ Tradeoff: Compile time vs. Runtime ● Goal: ○ No reflection - or as little as possible ○ No proxies ○ Minimize startup time ○ Minimize memory usage ○ Readable stacktraces
  • 8. And how does that work? ● Annotation Processor ○ Reads bytecode & annotations of the classes ○ Creates new classes ○ Doesn’t touch your code, just extends it ● Gradle ○ annotationProcessor "io.micronaut:micronaut-inject-java" ○ annotationProcessor "io.micronaut:micronaut-validation" ● Also runs with Maven ○ < Insert 500 KB of XML here >
  • 9.
  • 10. And this is really working? ● Spring Boot 2.1.2 (starter-web), Java 11, @Component on empty class ○ 0 Beans: 1.236 seconds ○ 1000 Beans: 1.808 seconds ○ 2000 Beans: 2.356 seconds ○ 4000 Beans: 3.259 seconds ○ 8000 Beans: 6.498 seconds ○ 16000 Beans: 9.231 seconds ● Micronaut 1.0.4, Java 11, @Singleton on empty class ○ 0 Beans: 1085ms ○ 1000 Beans: 1870ms ○ 2000 Beans: 2757ms ○ 4000 Beans: 4529ms ○ 8000 Beans: 8038ms ○ 16000 Beans: 15861ms
  • 12. Debunked: It’s not the classpath scanning ● Not so expensive: ○ Classpath scanning (Spring) ○ Injection with reflection (Spring) ● Expensive ○ Class Loading (Micronaut + Spring) ○ Runtime AOP Proxies (Spring) ○ Annotation Synthesizing (Spring) ○ Read bytecode on big classes (Spring) ○ Auto-Configuration Magic (Spring) ● Most of the expensive stuff is done at Micronaut compile time
  • 13. Looks great, so not disadvantages?
  • 14. The price you pay: Compile time (16k Beans) Spring: [INFO] Total time: 7.958 s Micronaut: BUILD SUCCESSFUL in 5m 3s
  • 15. Benchmarking is hard! ● This was NOT a real benchmark ● Most time spent in the applications shown on the first slides: Spring autoconfiguration magic ● It really depends on the needed feature of your application ○ Actuator ○ JPA / Hibernate ○ Tracing ○ Metrics ○ @FeignClient ○ @Transactional ○ @Cacheable ○ … ● Real benchmarks later in the slides :)
  • 16. Okay... what else does Micronaut bring to the table? ● Dependency Injection ○ @Inject, @Named, @Singleton, @Prototype, ... ● REST Controller ○ @Controller, @GET, @POST, … ● Events ○ @PostConstruct ○ @EventListener ● AOP ○ Around Advice, Introduction Advice, … ● Validation ○ @Validated, @NotNull, ...
  • 17. ... ● Caching ○ @Cachable, @CacheInvalidate, … ● Retry ○ @Retryable ● Circuit Breaking ○ @CircuitBreaker ● Fallback / Recovery ○ @Recoverable / @Fallback ● Scheduling ○ @Scheduled
  • 18. ... ● Reactive & Blocking HTTP with Netty ○ Compile Time Route Validation ○ @Error Exception Handling ala Spring ● Websocket Server & Clients ● Server side views ○ Thymeleaf, Handlebars, Velocity ● OpenAPI / Swagger ○ Open API spec is created on compile time! ● HTTP Clients ○ @Client ○ Client-side load balancing ○ Service discovery (Consul, Eureka, K8S, Route 53, DNS based) ○ OpenTracing (Zipkin, Jaeger)
  • 19. ... ● Application Configuration ○ application.yml / .json / .groovy ○ Different Environments ○ Property Sources (ENV, System Properties, …) ○ @ConfigurationProperties, @Value ○ Distributed config with Consul, AWS Parameter Store ● Database support ○ JPA, Mongo, Neo4J, Postgres-Reactive, Redis, Cassandra ● Monitoring ○ @Endpoint (/beans, /info, /health, …) ○ Metrics with Micrometer ○ Change log level at runtime
  • 20. ... ● Security ○ Like Spring Security with users and roles (RBAC) ○ Basic Auth / Session based ○ JWT (JWS and JWE) incl. automatic token propagation ○ Auth with LDAP ● Function-as-a-Service (AWS Lambda, OpenFaaS) ● Message driven services (RabbitMQ / Kafka) ● CLI applications ● Good documentation! ○ e.g. with tutorials for Let’s Encrypt, starting Consul, etc.
  • 21. Enough bla bla, show code!
  • 22. Service to be written github.com My browser HTTP Server HTTP Client The Internet
  • 24.
  • 25.
  • 27.
  • 28. Creating a HTTP endpoint
  • 29.
  • 30.
  • 32.
  • 33.
  • 34. Message: No bean of type [demo.service.ProjectService] exists. Path Taken: new ProjectsController(ProjectService projectService) --> new ProjectsController([ProjectService projectService]) Failed to inject value for parameter [projectService] of class: demo.ProjectsController
  • 35.
  • 36.
  • 37. Service to be written github.com My browser HTTP Server HTTP Client The Internet
  • 38. Creating a HTTP client
  • 40.
  • 41.
  • 42.
  • 43.
  • 45.
  • 46.
  • 48. 1st request 2nd request
  • 50.
  • 51.
  • 52.
  • 54.
  • 57.
  • 59. Spring vs. Micronaut - GitHub Scraper Micronaut 2.2.1 BUILD SUCCESSFUL in 3s 0,89s user 0,07s system 22% cpu 4,199 total Startup completed in 625ms
  • 60. Spring vs. Micronaut - GitHub Scraper Spring 2.4.1 BUILD SUCCESSFUL in 1s 0,86s user 0,09s system 67% cpu 1,414 total Started DemoApplication in 1.21 seconds (JVM running for 1.556)
  • 61. Micronaut (JAR: 14.8 MB) java -Xms16M -Xmx512M -jar github-scraper-0.1-all.jar / OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.9+11)
  • 62. Micronaut wrk -t 8 -c 80 -d 30s --latency http://localhost:8080/github/stars Running 30s test @ http://localhost:8080/github/stars 8 threads and 80 connections Thread Stats Avg Stdev Max +/- Stdev Latency 2.21ms 5.33ms 139.33ms 91.82% Req/Sec 15.22k 5.34k 27.39k 72.74% Latency Distribution 50% 286.00us 75% 1.98ms 90% 6.44ms 99% 22.34ms 2765210 requests in 30.07s, 1.38GB read Requests/sec: 91956.68 Transfer/sec: 47.01MB
  • 63. Spring Boot (JAR: 30.6 MB) java -Xms16M -Xmx512M -jar github-scraper-spring-0.0.1-SNAPSHOT.jar / OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.9+11)
  • 64. Spring Boot wrk -t 8 -c 80 -d 30s --latency http://localhost:8080/github/stars Running 30s test @ http://localhost:8080/github/stars 8 threads and 80 connections Thread Stats Avg Stdev Max +/- Stdev Latency 10.23ms 65.15ms 778.07ms 97.82% Req/Sec 9.29k 2.69k 14.24k 78.93% Latency Distribution 50% 0.87ms 75% 1.55ms 90% 3.36ms 99% 414.50ms 2169903 requests in 30.10s, 1.07GB read Requests/sec: 72091.42 Transfer/sec: 36.38MB
  • 65. How much RAM do I have to use?
  • 66. Minimal Heap Size - Micronaut (-Xmx32M)
  • 67. Minimal Heap Size - Micronaut (-Xmx32M) wrk -t 8 -c 80 -d 30s --latency http://localhost:8080/github/stars Running 30s test @ http://localhost:8080/github/stars 8 threads and 80 connections Thread Stats Avg Stdev Max +/- Stdev Latency 2.68ms 6.40ms 135.54ms 91.54% Req/Sec 11.34k 4.58k 23.37k 68.22% Latency Distribution 50% 270.00us 75% 2.58ms 90% 8.02ms 99% 27.00ms 1717518 requests in 30.06s, 631.95MB read Socket errors: connect 0, read 0, write 0, timeout 80 Requests/sec: 57134.45 Transfer/sec: 21.02MB
  • 68. Minimal Heap Size - Spring (-Xmx32M)
  • 69. Minimal Heap Size - Spring (-Xmx32M) wrk -t 8 -c 80 -d 30s --latency http://localhost:8080/github/stars Running 30s test @ http://localhost:8080/github/stars 8 threads and 80 connections Thread Stats Avg Stdev Max +/- Stdev Latency 16.38ms 87.16ms 955.97ms 97.33% Req/Sec 3.92k 1.19k 6.21k 75.93% Latency Distribution 50% 2.11ms 75% 4.21ms 90% 8.59ms 99% 578.98ms 905844 requests in 30.05s, 457.16MB read Requests/sec: 30148.82 Transfer/sec: 15.22MB
  • 70. Minimal Heap Size - Spring (-Xmx64M)
  • 71. Minimal Heap Size - Spring (-Xmx64M) wrk -t 8 -c 80 -d 30s --latency http://localhost:8080/github/stars Running 30s test @ http://localhost:8080/github/stars 8 threads and 80 connections Thread Stats Avg Stdev Max +/- Stdev Latency 10.50ms 66.17ms 786.18ms 97.73% Req/Sec 8.60k 2.27k 13.25k 79.23% Latency Distribution 50% 0.95ms 75% 1.68ms 90% 3.30ms 99% 423.31ms 2006502 requests in 30.09s, 0.99GB read Requests/sec: 66689.38 Transfer/sec: 33.66MB
  • 72. Minimal Heap Size - Micronaut (-Xmx64M)
  • 73. Minimal Heap Size - Micronaut (-Xmx64M) wrk -t 8 -c 80 -d 30s --latency http://localhost:8080/github/stars Running 30s test @ http://localhost:8080/github/stars 8 threads and 80 connections Thread Stats Avg Stdev Max +/- Stdev Latency 2.28ms 5.05ms 95.77ms 90.92% Req/Sec 14.11k 5.15k 25.09k 73.51% Latency Distribution 50% 283.00us 75% 2.12ms 90% 6.78ms 99% 23.54ms 2451595 requests in 30.06s, 1.22GB read Requests/sec: 81556.51 Transfer/sec: 41.69MB
  • 74. Graal VM “High-performance polyglot VM” (and AOT compiler)
  • 75. Graal Substrate VM $ ./gradlew nativeImage (or ./mvnw package -Dpackaging=native-image) … 2 minutes later … $ file application application: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2 for GNU/Linux 3.2.0, with debug_info, not stripped $ ll application -rwxr-xr-x. 1 moe moe 62M 18. Dez 11:29 application $ ldd application linux-vdso.so.1 (0x00007ffd7cbbe000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fc717414000) libdl.so.2 => /lib64/libdl.so.2 (0x00007fc71740d000) libz.so.1 => /lib64/libz.so.1 (0x00007fc7173f3000) librt.so.1 => /lib64/librt.so.1 (0x00007fc7173e8000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fc7173cd000) libc.so.6 => /lib64/libc.so.6 (0x00007fc717202000) /lib64/ld-linux-x86-64.so.2 (0x00007fc717456000)
  • 76. Graal (no -Xmx set) KB = 92 MB Idle: Under load: Startup completed in 67ms.
  • 77. Graal - Benchmark wrk -t 8 -c 80 -d 30s --latency http://localhost:8080/github/stars Running 30s test @ http://localhost:8080/github/stars 8 threads and 80 connections Thread Stats Avg Stdev Max +/- Stdev Latency 1.60ms 2.28ms 41.76ms 86.51% Req/Sec 8.88k 1.21k 12.09k 79.71% Latency Distribution 50% 416.00us 75% 2.34ms 90% 4.61ms 99% 10.16ms 1355757 requests in 30.04s, 305.29MB read Socket errors: connect 0, read 0, write 0, timeout 80 Requests/sec: 45130.28 Transfer/sec: 10.16MB
  • 79. Experience from the trenches Pro: ● Services start faster than Spring Boot ● Smaller JARs ● Tests are faster, as the embedded server starts fast ○ Spring mitigates this with application context caching! Contra: ● No separation of management and API port ● Spring Boot is more common (more documentation, blog posts, Stack Overflow answers) ● Extension story from Spring is better (e.g. OAuth2)
  • 80. Conclusion ● Good documentation ● Recommendation for writing small services ○ I have no experience with bigger services in Micronaut. If you have, please contact me :) ● Development is fun ● If the features are sufficient: Try it! ● GraalVM Substrate VM, if you get it to run, is really cool ○ This is NOT a JVM, so profilers / metrics / thread dumps etc. won’t work ○ Build times like it’s C++ (> 30s) ○ Not all libraries are compatible and workarounds must be used ■ I ran into trouble with Caffeine Cache (GitHub Issue)
  • 81. Literature ● GitHub Repo: https://github.com/qaware/microservices-with-micronaut ● Micronaut documentation: https://docs.micronaut.io/latest/guide/index.html ● GraalVM: https://www.graalvm.org/