SlideShare a Scribd company logo
Adopting Java for the
Serverless world
from the perspective of the AWS developer
By Vadym Kazulkin, ip.labs GmbH
Contact
Vadym Kazulkin, ip.labs GmbH
v.kazulkin@gmail.com
https://www.linkedin.com/in/vadymkazulkin/
@VKazulkin
Co-Organizer of Java User Group Bonn &
Serverless Bonn Meetup
https://www.iplabs.de/
ip.labs GmbH
https://www.iplabs.de/
Java popluarity
https://www.cleveroad.com/blog/programming-languages-ranking Vadym Kazulkin @VKazulkin , ip.labs GmbH
AWS and Serverless
2020 Magic Quadrant for Cloud Infrastructure & Platform Services
https://pages.awscloud.com/GLOBAL-multi-DL-gartner-mq-cips-2020-learn.html?pg=LWIAWS
Vadym Kazulkin @VKazulkin , ip.labs GmbH
Vadym Kazulkin @VKazulkin , ip.labs GmbH“State of Serverless 2020 report” https://codingsans.com/blog/serverless-trends
2020 AWS Lambda Benchmark Report for Developers, DevOps, and Decision Makers
https://newrelic.com/resources/ebooks/serverless-benchmark-report-aws-lambda-2020
Vadym Kazulkin @VKazulkin , ip.labs GmbH
Life of the Java Serverless developer
on AWS
Java Versions Support
• Java 8
• with long-term support
• Java 11 (since 2019)
Vadym Kazulkin @VKazulkin , ip.labs GmbH
Source: https://aws.amazon.com/de/corretto/
Java ist very fast
and mature
programming
language…
Image: burst.shopify.com/photos/a-look-across-the-landscape-with-view-of-the-sea Christian Bannes and Vadym Kazulkin @VKazulkin , ip.labs GmbH
… but
Serverless
adoption of Java
looks like this
Vadym Kazulkin @VKazulkin , ip.labs GmbH“State of Serverless 2020 report” https://codingsans.com/blog/serverless-trends
2020 AWS Lambda Benchmark Report for Developers, DevOps, and Decision Makers
https://newrelic.com/resources/ebooks/serverless-benchmark-report-aws-lambda-2020
Vadym Kazulkin @VKazulkin , ip.labs GmbH
Developers love Java and will be happy
to use it for Serverless
Vadym Kazulkin @VKazulkin , ip.labs GmbH
Creating AWS Lambda with Java 1/2
:
Source https://blog.runscope.com/posts/how-to-write-your-first-aws-lambda-function
Creating AWS Lambda with Java 2/2
:
Source https://blog.runscope.com/posts/how-to-write-your-first-aws-lambda-function
Challenge Number 1 with Java is a
big cold-start
Vadym Kazulkin @VKazulkin , ip.labs GmbH
Source: https://www.serverless.com/blog/keep-your-lambdas-warm
Cold Start
:
Source: Ajay Nair „Become a Serverless Black Belt” https://www.youtube.com/watch?v=oQFORsso2go
Bootstrap the Java Runtime Phase
• AWS Lambda starts the JVM
• Java runtime loads and initializes
handler class
• Static initializer block of the handler class is
executed
• Boosted host full CPU access up to 10 seconds
• Lambda calls the handler method
• Full CPU access only approx. from 1.8 GB
“assigned” memory to the function
Vadym Kazulkin @VKazulkin , ip.labs GmbH
Source: Stefano Buliani : "Best practices for AWS Lambda and Java„ https://www.youtube.com/watch?v=ddg1u5HLwg8
AWS Lambda cold start duration
per programming language
Source: Mikhail Shilkov: „AWS Lambda: Cold Start Duration per Language. 2020 edition” https://mikhail.io/serverless/coldstarts/aws/languages/
Cold start duration with Java
• Below 1 second is best-case cold start duration for
very simple Lambda like HelloWorld
• It goes up significantly with more complex scenarios
• Dependencies to multiple OS projects
• Clients instantiation to communicate with other (AWS)
services (e.g. DynamoDB, SNS, SQS, 3rd party)
• To achieve the minimal cold start duration apply all
best practices from these talk
• Worst-case cold starts can be higher than 10 and even 20
seconds
Source: Stefano Buliani : "Best practices for AWS Lambda and Java„ https://www.youtube.com/watch?v=ddg1u5HLwg8
Sean O‘Toole „AWS Lambda Java Tutorial: Best Practices to Lower Cold Starts” https://www.capitalone.com/tech/cloud/aws-lambda-java-tutorial-reduce-cold-starts/
2020 AWS Lambda Benchmark Report for Developers, DevOps, and Decision Makers
https://newrelic.com/resources/ebooks/serverless-benchmark-report-aws-lambda-2020
Vadym Kazulkin @VKazulkin , ip.labs GmbH
Provisioned
Concurrency for
Lambda Functions
Vadym Kazulkin @VKazulkin , ip.labs GmbH
Source: Yan Cui: https://lumigo.io/blog/provisioned-concurrency-the-end-of-cold-starts/
Jeremy Daly: “Mixing VPC and Non-VPC Lambda Functions for Higher Performing Microservices”
https://www.jeremydaly.com/mixing-vpc-and-non-vpc-lambda-functions-for-higher-performing-microservices/ Vadym Kazulkin @VKazulkin , ip.labs GmbH
Lambda behind the
Virtual Private
Cloud (VPC)
Lambda in VPC
As function’s execution environment
scales
• More network interfaces are created and
attached to the Lambda infrastructure
• The exact number of network interfaces
created and attached is a factor of your
function configuration and concurrency
• Caused additional the cold start up to
approx. 10 seconds
Chris Munns: "Announcing improved VPC networking for AWS Lambda functions”
https://aws.amazon.com/de/blogs/compute/announcing-improved-vpc-networking-for-aws-lambda-functions/
Lambda in VPC Improvements:
• The network interface creation happens
when Lambda function is created or its
VPC settings are updated.
• Because the network interfaces are shared
across execution environments, only a
handful of network interfaces are required
per function
• Reduced additional cold start from approx.
10 seconds to below 1 second
Chris Munns: "Announcing improved VPC networking for AWS Lambda functions”
https://aws.amazon.com/de/blogs/compute/announcing-improved-vpc-networking-for-aws-lambda-functions/
Improvements 1/4
• Switch to the AWS SDK 2.0 for Java
• Lower footprint and more modular
• Allows to configure HTTP Client of our choice (e.g. Java own Basic HTTP Client)
• Initialize and prime dependencies during initialization phase
• Use static initialization in the handler class
• Provide all known values (for building clients e.g.
DynamoDBClient) to avoid auto-discovery
• credential provider, region, endpoint
• Less (dependencies, classes) is more
Vadym Kazulkin @VKazulkin , ip.labs GmbH
Source: Stefano Buliani : "Best practices for AWS Lambda and Java„ https://www.youtube.com/watch?v=ddg1u5HLwg8
Sean O‘Toole „AWS Lambda Java Tutorial: Best Practices to Lower Cold Starts” https://www.capitalone.com/tech/cloud/aws-lambda-java-tutorial-reduce-cold-starts/
Improvements 2/4
Avoid Reflection
Or use DI Frameworks like Dagger which aren‘t reflection-based
Vadym Kazulkin @VKazulkin , ip.labs GmbH
Source: Stefano Buliani : "Best practices for AWS Lambda and Java„ https://www.youtube.com/watch?v=ddg1u5HLwg8
Sean O‘Toole „AWS Lambda Java Tutorial: Best Practices to Lower Cold Starts” https://www.capitalone.com/tech/cloud/aws-lambda-java-tutorial-reduce-cold-starts/
Improvements 3/4
Strive for cost optimization
Vadym Kazulkin @VKazulkin , ip.labs GmbH
AWS Lambda pricing model
Vadym Kazulkin @VKazulkin , ip.labs GmbH
Cost for Lambda
REQUEST DURATION
Vadym Kazulkin @VKazulkin , ip.labs GmbH
Request Tier
$ 0.20
Per 1 Mio Requests
Vadym Kazulkin @VKazulkin , ip.labs GmbH
Duration Tier
$ 0.00001667
Per GB-Second
Christian Bannes and Vadym Kazulkin @VKazulkin , ip.labs GmbH
GB-Second
ONE SECOND ONE GB
Christian Bannes and Vadym Kazulkin @VKazulkin , ip.labs GmbH
Example
• 1 Mio requests
• Lambda with 512MiB
• Each lambda takes 200ms
0.5 GiB * 0.2 sec * 1 Mio
= 100 000 GB-Seconds
Requests:
$0.20
GB-Seconds:
$1.67
Vadym Kazulkin @VKazulkin , ip.labs GmbH
Cost scales
linearly with
memory
Vadym Kazulkin @VKazulkin , ip.labs GmbH
Improvements 4/4
More memory = more expensive?
Christian Bannes and Vadym Kazulkin @VKazulkin , ip.labs GmbH
Lambda Power Tuning
• Executes different
settings in parallel
• Outputs the optimal
setting
Image: https://github.com/alexcasalboni/aws-lambda-power-tuning Vadym Kazulkin @VKazulkin , ip.labs GmbH
Monitor the Java Virtual Machine
Garbage Collection on AWS
Lambda
Source: Steffen Grunwald „Monitoring the Java Virtual Machine Garbage Collection on AWS Lambda”
https://aws.amazon.com/de/blogs/architecture/field-notes-monitoring-the-java-virtual-machine-garbage-collection-on-aws-lambda/
Cost optimization
• Java is well optimized for long running server applications
• High startup times
• High memory utilization
Vadym Kazulkin @VKazulkin , ip.labs GmbH
And both memory and execution time are cost dimensions,
when using Serverless in the cloud
GraalVM enters the scene
Source: https://www.graalvm.org/
Project Metropolis
Goals:
Low footprint ahead-of-time mode for JVM-based languages
High performance for all languages
Convenient language interoperability and polyglot tooling
Source: „Everything you need to know about GraalVM by Oleg Šelajev & Thomas Wuerthinger” https://www.youtube.com/watch?v=ANN9rxYo5Hg
Adapting Java for the Serverless World at JUG Barcelona
GraalVM
Architecture
Sources: Practical Partial Evaluation for High-Performance Dynamic Language Runtimes http://chrisseaton.com/rubytruffle/pldi17-truffle/pldi17-truffle.pdf
„The LLVM Compiler Infrastructure“ https://llvm.org/
GraalVM
Architecture
Sources: Practical Partial Evaluation for High-Performance Dynamic Language Runtimes http://chrisseaton.com/rubytruffle/pldi17-truffle/pldi17-truffle.pdf
„The LLVM Compiler Infrastructure“ https://llvm.org/
SubstrateVM
Source: Oleg Šelajev, Thomas Wuerthinger, Oracle: “Deep dive into using GraalVM for Java and JavaScript”
https://www.youtube.com/watch?v=a-XEZobXspo
GraalVM and SubstrateVM
Source: Oleg Selajev, Oracle : “Run Code in Any Language Anywhere with GraalVM” https://www.youtube.com/watch?v=JoDOo4FyYMU
GraalVM on SubstrateVM
A game changer for Java & Serverless?
Java Function compiled into a native executable using
GraalVM on SubstrateVM reduces
• “cold start” times
• memory footprint
by order of magnitude compared to running on JVM.
And both memory and execution time are cost dimensions,
when using Serverless in the cloud
GraalVM on SubstrateVM
A game changer for Java & Serverless?
Current challenges with native executable using GraalVM :
• Most Cloud Providers (AWS) doesn’t provide GraalVM as Java
Runtime out of the box, only Open JDK (e.g. AWS provides
Corretto)
• Some Cloud Providers (e.g. AWS) provide Custom Runtime Option
Lambda Layers
& Lambda
Runtime API
Christian Bannes and Vadym Kazulkin @VKazulkin , ip.labs GmbH
Custom Lambda Runtimes
GraalVM Complitation Modes
Source: „Everything you need to know about GraalVM by Oleg Šelajev & Thomas Wuerthinger” https://www.youtube.com/watch?v=ANN9rxYo5Hg
AOT vs JIT
Source: „Everything you need to know about GraalVM by Oleg Šelajev & Thomas Wuerthinger” https://www.youtube.com/watch?v=ANN9rxYo5Hg
GraalVM Profile-Guided Optimizations
Source: „https://www.graalvm.org/reference-manual/native-image/PGO”
Support of GraalVM native images in Frameworks
Spring Framework: working toward GraalVM native image support
without requiring additional configuration or workaround is one of the
themes of upcoming Spring Framework 5.3
Spring Boot: Ongoing work on experimental Spring Graal Native
project. Probably ready for the 2.4 release
Quarkus: a Kubernetes Native Java framework developed by Red Hat
tailored for GraalVM and HotSpot, crafted from best-of-breed Java
libraries and standards.
Micronaut: a modern, JVM-based, full-stack framework for building
modular, easily testable microservice and serverless applications.
Source: „GraalVM native image support“ https://github.com/spring-projects/spring-framework/wiki/GraalVM-native-image-support
Steps to deploy to AWS
• Installation prerequisites
• Framework of your choice (Micronaut, Quarkus, Spring)
• Java 8 or 11
• Apache Maven or Gradle
• AWS CLI and AWS SAM CLI (for local testing)
• Build Linux executable of your application with GraalVM native-image
• Deploy Linux executable as AWS Lambda Custom Runtime
• Function.zip with bootstrap Linux executable
Vadym Kazulkin @VKazulkin , ip.labs GmbH
Source: https://github.com/awslabs/aws-serverless-java-container/tree/master/samples/micronaut/pet-store
AWS Lambda Deployment of Custom Runtime with SAM
Source: https://github.com/awslabs/aws-serverless-java-container/tree/master/samples/micronaut/pet-store
Micronaut Framework
Source: https://micronaut.io/
AWS Lambda with Micronaut Framework
Testing AWS Lambda with Micronaut Framework
Micronaut Additional Features
• Custom Validators
• AWS API Gateway integration
• Spring annotation processor available
Vadym Kazulkin @VKazulkin , ip.labs GmbH
Source: Stefano Buliani : "Best practices for AWS Lambda and Java„ https://www.youtube.com/watch?v=ddg1u5HLwg8
Build GraalVM Native Image with Micronaut Framework
Quarkus
Source: https://quarkus.io/
AWS Lambda with Quarkus Framework
Testing AWS Lambda with Quarkus Framework
Build GraalVM Native Image with Quarkus Framework
mvn –Pnative package
Quarkus Additional Features
• Website for creating the App
• AWS API Gateway integration
• Funqy
Vadym Kazulkin @VKazulkin , ip.labs GmbH
Source: Stefano Buliani : "Best practices for AWS Lambda and Java„ https://www.youtube.com/watch?v=ddg1u5HLwg8
Quarkus Fanqy
Source: https://quarkus.io/guides/funqy
Quarkus-Fanqy AWS
Serverless Support
• AWS Lambda
• AWS API Gateway
Vadym Kazulkin @VKazulkin , ip.labs GmbH
Spring (Boot) Framework
Source: https://spring.io/
Spring GraalVM Native Project
Vadym Kazulkin @VKazulkin , ip.labs GmbH
AWS Lambda with Spring Framework
using Spring Graal Native and Spring Cloud Functions
Bean Registration with Spring Framework
using Spring Graal Native and Spring Cloud Functions
Build GraalVM Native Image with Spring Framework
mvn –Pnative package
Framework Comparison
• Project Initializer
• Programming Model
• Database Support
• Test Support
• Native Image
• Native image size
• Startup time
• Heap size
Vadym Kazulkin @VKazulkin , ip.labs GmbH
Source: „Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition! by Michel Schudel“ https://www.youtube.com/watch?v=hnEXOqcNXPs
„Micronaut 2.0 vs Quarkus 1.3.1 vs Spring Boot 2.3 Performance on JDK 14“ https://www.youtube.com/watch?v=rJFgdFIs_k8
Conclusion
• GraalVM and Frameworks are really powerful with a lot of potential
• But in combination with Native Image currently not without challenges
• AWS Lambda Custom runtime requires Linux executable only
• Windows and Mac developers may only build Linux executable via Docker
• plenty of 'No instances of … are allowed in the image heap’ and other errors when
building a native image
• Lots of experimentation with additional build arguments like “initialize-at-runtime” or
“delay-class-initialization-to-runtime“ required
• Once again: Less (dependencies, classes) is more
• AWS Lambda function should be small and shouldn’t have many dependencies
Vadym Kazulkin @VKazulkin , ip.labs GmbH
Source: „https://stackoverflow.com/questions/63328298/how-do-you-debug-a-no-instances-of-are-allowed-in-the-image-heap-when-buil
Try it yourselves
• Micronaut
• https://github.com/micronaut-guides/micronaut-function-aws-lambda
• Quarkus
• https://github.com/JosemyDuarte/quarkus-terraform-lambda-demo/tree/dynamo-terraform
• Spring Boot
• https://github.com/spring-projects-experimental/spring-graalvm-native/tree/master/spring-
graalvm-native-samples/function-aws
• Misc
• https://github.com/awslabs/aws-serverless-java-container/tree/master/samples
Vadym Kazulkin @VKazulkin , ip.labs GmbH
Project Leyden
Source: https://mail.openjdk.java.net/pipermail/discuss/2020-April/005429.html
Adapting Java for the Serverless World at JUG Barcelona
www.iplabs.de
Thank You!

More Related Content

PDF
Adopting Java for the Serverless world at Serverless Meetup Italy
PDF
Adopting Java for the Serverless world at JUG Hamburg
PDF
Adopting Java for the Serverless world at IT Tage
PDF
Adopting Java for the Serverless world at JUG London
PDF
Adopting Java for the Serverless world at Serverless Meetup Singapore
PDF
Adopting Java for the Serverless world at AWS User Group Pretoria
PDF
Adopting Java for the Serverless world at Serverless Meetup New York and Boston
PDF
Continuous Integration and Deployment Best Practices on AWS
Adopting Java for the Serverless world at Serverless Meetup Italy
Adopting Java for the Serverless world at JUG Hamburg
Adopting Java for the Serverless world at IT Tage
Adopting Java for the Serverless world at JUG London
Adopting Java for the Serverless world at Serverless Meetup Singapore
Adopting Java for the Serverless world at AWS User Group Pretoria
Adopting Java for the Serverless world at Serverless Meetup New York and Boston
Continuous Integration and Deployment Best Practices on AWS

What's hot (10)

PPTX
DevOps On AWS - Deep Dive on Continuous Delivery
PPTX
DevOps, Microservices and Serverless Architecture
PDF
AWS Lambda from the Trenches
PDF
Whizlabs webinar - Deploying Portfolio Site with AWS Serverless
PPTX
Getting Started With Docker on AWS
PDF
Security in serverless world
PDF
Building Serverless APIs (January 2017)
PDF
Serverless Frameworks on AWS
PDF
Open stack ocata summit enabling aws lambda-like functionality with openstac...
PDF
AWS Lambda and Serverless framework: lessons learned while building a serverl...
DevOps On AWS - Deep Dive on Continuous Delivery
DevOps, Microservices and Serverless Architecture
AWS Lambda from the Trenches
Whizlabs webinar - Deploying Portfolio Site with AWS Serverless
Getting Started With Docker on AWS
Security in serverless world
Building Serverless APIs (January 2017)
Serverless Frameworks on AWS
Open stack ocata summit enabling aws lambda-like functionality with openstac...
AWS Lambda and Serverless framework: lessons learned while building a serverl...
Ad

Similar to Adapting Java for the Serverless World at JUG Barcelona (20)

PDF
Adopting Java for the Serverless World at JUG Hessen 2022
PDF
Adopting Java for the Serverless World at JUG Darmstadt 2022
PDF
Adopting Java for the Serverless World at JUG Bonn 2022
PPTX
Adopting Java for the Serverless World at JAX 2022
PDF
Adopting Java for the Serverless World at Voxxed Days Bruxelles 2023
PDF
Adopting Java for the Serverless World at VoxxedDays Luxemburg
PDF
How to reduce cold starts for Java Serverless applications in AWS at JCON Wor...
PDF
How to reduce cold starts for Java Serverless applications in AWS at InfoShar...
PDF
How to reduce cold starts for Java Serverless applications in AWS at Serverle...
PDF
High performance Serverless Java on AWS at Froscon 2024
PDF
High performance Serverless Java on AWS- Serverless Architecture Conference B...
PDF
High performance Serverless Java on AWS- AWS Community Day Budapest 2024
PDF
High performance Serverless Java on AWS- Serverless Architecture Javaland 2025
PDF
High performance Serverless Java on AWS- JavaDays Lviv 2024
PDF
High performance Serverless Java on AWS at GeeCon 2024 Krakow
PDF
High performance Serverless Java on AWS at We Are Developers 2024
PDF
High performance Serverless Java on AWS- GoTo Amsterdam 2024
PDF
Serverless in Java Lessons learnt
PDF
High performance Serverless Java on AWS- Serverless Meetup Toronto
PDF
High performance Serverless Java on AWS at AWS Community Day Belfast 2024
Adopting Java for the Serverless World at JUG Hessen 2022
Adopting Java for the Serverless World at JUG Darmstadt 2022
Adopting Java for the Serverless World at JUG Bonn 2022
Adopting Java for the Serverless World at JAX 2022
Adopting Java for the Serverless World at Voxxed Days Bruxelles 2023
Adopting Java for the Serverless World at VoxxedDays Luxemburg
How to reduce cold starts for Java Serverless applications in AWS at JCON Wor...
How to reduce cold starts for Java Serverless applications in AWS at InfoShar...
How to reduce cold starts for Java Serverless applications in AWS at Serverle...
High performance Serverless Java on AWS at Froscon 2024
High performance Serverless Java on AWS- Serverless Architecture Conference B...
High performance Serverless Java on AWS- AWS Community Day Budapest 2024
High performance Serverless Java on AWS- Serverless Architecture Javaland 2025
High performance Serverless Java on AWS- JavaDays Lviv 2024
High performance Serverless Java on AWS at GeeCon 2024 Krakow
High performance Serverless Java on AWS at We Are Developers 2024
High performance Serverless Java on AWS- GoTo Amsterdam 2024
Serverless in Java Lessons learnt
High performance Serverless Java on AWS- Serverless Meetup Toronto
High performance Serverless Java on AWS at AWS Community Day Belfast 2024
Ad

More from Vadym Kazulkin (20)

PDF
How to develop, run and optimize Spring Boot 3 application on AWS Lambda - Wa...
PDF
Event-driven architecture patterns in highly scalable image storage solution-...
PDF
How to develop, run and optimize Spring Boot 3 application on AWS Lambda-OBI ...
PPTX
Making sense of AWS Serverless operations- AWS User Group Nuremberg
PDF
How to develop, run and optimize Spring Boot 3 application on AWS Lambda at V...
PPTX
Making sense of AWS Serverless operations at Believe in Serverless community ...
PDF
How to develop, run and optimize Spring Boot 3 application on AWS Lambda at I...
PDF
Making sense of AWS Serverless operations - Amarathon Geek China 2024
PDF
Event-driven architecture patterns in highly scalable image storage solution-...
PDF
Making sense of AWS Serverless operations- Serverless Architecture Conference...
PDF
Detect operational anomalies in Serverless Applications with Amazon DevOps Gu...
PDF
Detect operational anomalies in Serverless Applications with Amazon DevOps Gu...
PDF
Making sense of AWS Serverless operations AWS Community Day NL 2024-
PDF
Event-driven architecture patterns in highly scalable image storage solution ...
PDF
Detect operational anomalies in Serverless Applications with Amazon DevOps Gu...
PDF
Amazon DevOps Guru for Serverless Applications at JAWS Pankration 2024
PDF
How to develop, run and optimize Spring Boot 3 application on AWS Lambda at J...
PDF
How to develop, run and optimize Spring Boot 3 application on AWS Lambda at A...
PDF
How to develop, run and optimize Spring Boot 3 application on AWS Lambda at J...
PDF
How to develop, run and optimize Spring Boot 3 application on AWS Lambda at ...
How to develop, run and optimize Spring Boot 3 application on AWS Lambda - Wa...
Event-driven architecture patterns in highly scalable image storage solution-...
How to develop, run and optimize Spring Boot 3 application on AWS Lambda-OBI ...
Making sense of AWS Serverless operations- AWS User Group Nuremberg
How to develop, run and optimize Spring Boot 3 application on AWS Lambda at V...
Making sense of AWS Serverless operations at Believe in Serverless community ...
How to develop, run and optimize Spring Boot 3 application on AWS Lambda at I...
Making sense of AWS Serverless operations - Amarathon Geek China 2024
Event-driven architecture patterns in highly scalable image storage solution-...
Making sense of AWS Serverless operations- Serverless Architecture Conference...
Detect operational anomalies in Serverless Applications with Amazon DevOps Gu...
Detect operational anomalies in Serverless Applications with Amazon DevOps Gu...
Making sense of AWS Serverless operations AWS Community Day NL 2024-
Event-driven architecture patterns in highly scalable image storage solution ...
Detect operational anomalies in Serverless Applications with Amazon DevOps Gu...
Amazon DevOps Guru for Serverless Applications at JAWS Pankration 2024
How to develop, run and optimize Spring Boot 3 application on AWS Lambda at J...
How to develop, run and optimize Spring Boot 3 application on AWS Lambda at A...
How to develop, run and optimize Spring Boot 3 application on AWS Lambda at J...
How to develop, run and optimize Spring Boot 3 application on AWS Lambda at ...

Recently uploaded (20)

PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
PDF
Electronic commerce courselecture one. Pdf
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Advanced Soft Computing BINUS July 2025.pdf
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Empathic Computing: Creating Shared Understanding
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PPTX
MYSQL Presentation for SQL database connectivity
PPTX
Cloud computing and distributed systems.
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PPTX
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
cuic standard and advanced reporting.pdf
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Understanding_Digital_Forensics_Presentation.pptx
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
The Rise and Fall of 3GPP – Time for a Sabbatical?
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
Electronic commerce courselecture one. Pdf
Spectral efficient network and resource selection model in 5G networks
Advanced Soft Computing BINUS July 2025.pdf
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Empathic Computing: Creating Shared Understanding
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Mobile App Security Testing_ A Comprehensive Guide.pdf
MYSQL Presentation for SQL database connectivity
Cloud computing and distributed systems.
Diabetes mellitus diagnosis method based random forest with bat algorithm
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....
Advanced methodologies resolving dimensionality complications for autism neur...
cuic standard and advanced reporting.pdf

Adapting Java for the Serverless World at JUG Barcelona

  • 1. Adopting Java for the Serverless world from the perspective of the AWS developer By Vadym Kazulkin, ip.labs GmbH
  • 2. Contact Vadym Kazulkin, ip.labs GmbH v.kazulkin@gmail.com https://www.linkedin.com/in/vadymkazulkin/ @VKazulkin Co-Organizer of Java User Group Bonn & Serverless Bonn Meetup https://www.iplabs.de/
  • 7. 2020 Magic Quadrant for Cloud Infrastructure & Platform Services https://pages.awscloud.com/GLOBAL-multi-DL-gartner-mq-cips-2020-learn.html?pg=LWIAWS Vadym Kazulkin @VKazulkin , ip.labs GmbH
  • 8. Vadym Kazulkin @VKazulkin , ip.labs GmbH“State of Serverless 2020 report” https://codingsans.com/blog/serverless-trends
  • 9. 2020 AWS Lambda Benchmark Report for Developers, DevOps, and Decision Makers https://newrelic.com/resources/ebooks/serverless-benchmark-report-aws-lambda-2020 Vadym Kazulkin @VKazulkin , ip.labs GmbH
  • 10. Life of the Java Serverless developer on AWS
  • 11. Java Versions Support • Java 8 • with long-term support • Java 11 (since 2019) Vadym Kazulkin @VKazulkin , ip.labs GmbH Source: https://aws.amazon.com/de/corretto/
  • 12. Java ist very fast and mature programming language… Image: burst.shopify.com/photos/a-look-across-the-landscape-with-view-of-the-sea Christian Bannes and Vadym Kazulkin @VKazulkin , ip.labs GmbH … but Serverless adoption of Java looks like this
  • 13. Vadym Kazulkin @VKazulkin , ip.labs GmbH“State of Serverless 2020 report” https://codingsans.com/blog/serverless-trends
  • 14. 2020 AWS Lambda Benchmark Report for Developers, DevOps, and Decision Makers https://newrelic.com/resources/ebooks/serverless-benchmark-report-aws-lambda-2020 Vadym Kazulkin @VKazulkin , ip.labs GmbH
  • 15. Developers love Java and will be happy to use it for Serverless Vadym Kazulkin @VKazulkin , ip.labs GmbH
  • 16. Creating AWS Lambda with Java 1/2 : Source https://blog.runscope.com/posts/how-to-write-your-first-aws-lambda-function
  • 17. Creating AWS Lambda with Java 2/2 : Source https://blog.runscope.com/posts/how-to-write-your-first-aws-lambda-function
  • 18. Challenge Number 1 with Java is a big cold-start Vadym Kazulkin @VKazulkin , ip.labs GmbH Source: https://www.serverless.com/blog/keep-your-lambdas-warm
  • 19. Cold Start : Source: Ajay Nair „Become a Serverless Black Belt” https://www.youtube.com/watch?v=oQFORsso2go
  • 20. Bootstrap the Java Runtime Phase • AWS Lambda starts the JVM • Java runtime loads and initializes handler class • Static initializer block of the handler class is executed • Boosted host full CPU access up to 10 seconds • Lambda calls the handler method • Full CPU access only approx. from 1.8 GB “assigned” memory to the function Vadym Kazulkin @VKazulkin , ip.labs GmbH Source: Stefano Buliani : "Best practices for AWS Lambda and Java„ https://www.youtube.com/watch?v=ddg1u5HLwg8
  • 21. AWS Lambda cold start duration per programming language Source: Mikhail Shilkov: „AWS Lambda: Cold Start Duration per Language. 2020 edition” https://mikhail.io/serverless/coldstarts/aws/languages/
  • 22. Cold start duration with Java • Below 1 second is best-case cold start duration for very simple Lambda like HelloWorld • It goes up significantly with more complex scenarios • Dependencies to multiple OS projects • Clients instantiation to communicate with other (AWS) services (e.g. DynamoDB, SNS, SQS, 3rd party) • To achieve the minimal cold start duration apply all best practices from these talk • Worst-case cold starts can be higher than 10 and even 20 seconds Source: Stefano Buliani : "Best practices for AWS Lambda and Java„ https://www.youtube.com/watch?v=ddg1u5HLwg8 Sean O‘Toole „AWS Lambda Java Tutorial: Best Practices to Lower Cold Starts” https://www.capitalone.com/tech/cloud/aws-lambda-java-tutorial-reduce-cold-starts/
  • 23. 2020 AWS Lambda Benchmark Report for Developers, DevOps, and Decision Makers https://newrelic.com/resources/ebooks/serverless-benchmark-report-aws-lambda-2020 Vadym Kazulkin @VKazulkin , ip.labs GmbH
  • 24. Provisioned Concurrency for Lambda Functions Vadym Kazulkin @VKazulkin , ip.labs GmbH Source: Yan Cui: https://lumigo.io/blog/provisioned-concurrency-the-end-of-cold-starts/
  • 25. Jeremy Daly: “Mixing VPC and Non-VPC Lambda Functions for Higher Performing Microservices” https://www.jeremydaly.com/mixing-vpc-and-non-vpc-lambda-functions-for-higher-performing-microservices/ Vadym Kazulkin @VKazulkin , ip.labs GmbH Lambda behind the Virtual Private Cloud (VPC)
  • 26. Lambda in VPC As function’s execution environment scales • More network interfaces are created and attached to the Lambda infrastructure • The exact number of network interfaces created and attached is a factor of your function configuration and concurrency • Caused additional the cold start up to approx. 10 seconds Chris Munns: "Announcing improved VPC networking for AWS Lambda functions” https://aws.amazon.com/de/blogs/compute/announcing-improved-vpc-networking-for-aws-lambda-functions/
  • 27. Lambda in VPC Improvements: • The network interface creation happens when Lambda function is created or its VPC settings are updated. • Because the network interfaces are shared across execution environments, only a handful of network interfaces are required per function • Reduced additional cold start from approx. 10 seconds to below 1 second Chris Munns: "Announcing improved VPC networking for AWS Lambda functions” https://aws.amazon.com/de/blogs/compute/announcing-improved-vpc-networking-for-aws-lambda-functions/
  • 28. Improvements 1/4 • Switch to the AWS SDK 2.0 for Java • Lower footprint and more modular • Allows to configure HTTP Client of our choice (e.g. Java own Basic HTTP Client) • Initialize and prime dependencies during initialization phase • Use static initialization in the handler class • Provide all known values (for building clients e.g. DynamoDBClient) to avoid auto-discovery • credential provider, region, endpoint • Less (dependencies, classes) is more Vadym Kazulkin @VKazulkin , ip.labs GmbH Source: Stefano Buliani : "Best practices for AWS Lambda and Java„ https://www.youtube.com/watch?v=ddg1u5HLwg8 Sean O‘Toole „AWS Lambda Java Tutorial: Best Practices to Lower Cold Starts” https://www.capitalone.com/tech/cloud/aws-lambda-java-tutorial-reduce-cold-starts/
  • 29. Improvements 2/4 Avoid Reflection Or use DI Frameworks like Dagger which aren‘t reflection-based Vadym Kazulkin @VKazulkin , ip.labs GmbH Source: Stefano Buliani : "Best practices for AWS Lambda and Java„ https://www.youtube.com/watch?v=ddg1u5HLwg8 Sean O‘Toole „AWS Lambda Java Tutorial: Best Practices to Lower Cold Starts” https://www.capitalone.com/tech/cloud/aws-lambda-java-tutorial-reduce-cold-starts/
  • 30. Improvements 3/4 Strive for cost optimization Vadym Kazulkin @VKazulkin , ip.labs GmbH
  • 31. AWS Lambda pricing model Vadym Kazulkin @VKazulkin , ip.labs GmbH
  • 32. Cost for Lambda REQUEST DURATION Vadym Kazulkin @VKazulkin , ip.labs GmbH
  • 33. Request Tier $ 0.20 Per 1 Mio Requests Vadym Kazulkin @VKazulkin , ip.labs GmbH
  • 34. Duration Tier $ 0.00001667 Per GB-Second Christian Bannes and Vadym Kazulkin @VKazulkin , ip.labs GmbH
  • 35. GB-Second ONE SECOND ONE GB Christian Bannes and Vadym Kazulkin @VKazulkin , ip.labs GmbH
  • 36. Example • 1 Mio requests • Lambda with 512MiB • Each lambda takes 200ms 0.5 GiB * 0.2 sec * 1 Mio = 100 000 GB-Seconds Requests: $0.20 GB-Seconds: $1.67 Vadym Kazulkin @VKazulkin , ip.labs GmbH
  • 37. Cost scales linearly with memory Vadym Kazulkin @VKazulkin , ip.labs GmbH
  • 38. Improvements 4/4 More memory = more expensive? Christian Bannes and Vadym Kazulkin @VKazulkin , ip.labs GmbH
  • 39. Lambda Power Tuning • Executes different settings in parallel • Outputs the optimal setting Image: https://github.com/alexcasalboni/aws-lambda-power-tuning Vadym Kazulkin @VKazulkin , ip.labs GmbH
  • 40. Monitor the Java Virtual Machine Garbage Collection on AWS Lambda Source: Steffen Grunwald „Monitoring the Java Virtual Machine Garbage Collection on AWS Lambda” https://aws.amazon.com/de/blogs/architecture/field-notes-monitoring-the-java-virtual-machine-garbage-collection-on-aws-lambda/
  • 41. Cost optimization • Java is well optimized for long running server applications • High startup times • High memory utilization Vadym Kazulkin @VKazulkin , ip.labs GmbH And both memory and execution time are cost dimensions, when using Serverless in the cloud
  • 42. GraalVM enters the scene Source: https://www.graalvm.org/
  • 43. Project Metropolis Goals: Low footprint ahead-of-time mode for JVM-based languages High performance for all languages Convenient language interoperability and polyglot tooling Source: „Everything you need to know about GraalVM by Oleg Šelajev & Thomas Wuerthinger” https://www.youtube.com/watch?v=ANN9rxYo5Hg
  • 45. GraalVM Architecture Sources: Practical Partial Evaluation for High-Performance Dynamic Language Runtimes http://chrisseaton.com/rubytruffle/pldi17-truffle/pldi17-truffle.pdf „The LLVM Compiler Infrastructure“ https://llvm.org/
  • 46. GraalVM Architecture Sources: Practical Partial Evaluation for High-Performance Dynamic Language Runtimes http://chrisseaton.com/rubytruffle/pldi17-truffle/pldi17-truffle.pdf „The LLVM Compiler Infrastructure“ https://llvm.org/
  • 47. SubstrateVM Source: Oleg Šelajev, Thomas Wuerthinger, Oracle: “Deep dive into using GraalVM for Java and JavaScript” https://www.youtube.com/watch?v=a-XEZobXspo
  • 48. GraalVM and SubstrateVM Source: Oleg Selajev, Oracle : “Run Code in Any Language Anywhere with GraalVM” https://www.youtube.com/watch?v=JoDOo4FyYMU
  • 49. GraalVM on SubstrateVM A game changer for Java & Serverless? Java Function compiled into a native executable using GraalVM on SubstrateVM reduces • “cold start” times • memory footprint by order of magnitude compared to running on JVM. And both memory and execution time are cost dimensions, when using Serverless in the cloud
  • 50. GraalVM on SubstrateVM A game changer for Java & Serverless? Current challenges with native executable using GraalVM : • Most Cloud Providers (AWS) doesn’t provide GraalVM as Java Runtime out of the box, only Open JDK (e.g. AWS provides Corretto) • Some Cloud Providers (e.g. AWS) provide Custom Runtime Option
  • 51. Lambda Layers & Lambda Runtime API Christian Bannes and Vadym Kazulkin @VKazulkin , ip.labs GmbH
  • 53. GraalVM Complitation Modes Source: „Everything you need to know about GraalVM by Oleg Šelajev & Thomas Wuerthinger” https://www.youtube.com/watch?v=ANN9rxYo5Hg
  • 54. AOT vs JIT Source: „Everything you need to know about GraalVM by Oleg Šelajev & Thomas Wuerthinger” https://www.youtube.com/watch?v=ANN9rxYo5Hg
  • 55. GraalVM Profile-Guided Optimizations Source: „https://www.graalvm.org/reference-manual/native-image/PGO”
  • 56. Support of GraalVM native images in Frameworks Spring Framework: working toward GraalVM native image support without requiring additional configuration or workaround is one of the themes of upcoming Spring Framework 5.3 Spring Boot: Ongoing work on experimental Spring Graal Native project. Probably ready for the 2.4 release Quarkus: a Kubernetes Native Java framework developed by Red Hat tailored for GraalVM and HotSpot, crafted from best-of-breed Java libraries and standards. Micronaut: a modern, JVM-based, full-stack framework for building modular, easily testable microservice and serverless applications. Source: „GraalVM native image support“ https://github.com/spring-projects/spring-framework/wiki/GraalVM-native-image-support
  • 57. Steps to deploy to AWS • Installation prerequisites • Framework of your choice (Micronaut, Quarkus, Spring) • Java 8 or 11 • Apache Maven or Gradle • AWS CLI and AWS SAM CLI (for local testing) • Build Linux executable of your application with GraalVM native-image • Deploy Linux executable as AWS Lambda Custom Runtime • Function.zip with bootstrap Linux executable Vadym Kazulkin @VKazulkin , ip.labs GmbH Source: https://github.com/awslabs/aws-serverless-java-container/tree/master/samples/micronaut/pet-store
  • 58. AWS Lambda Deployment of Custom Runtime with SAM Source: https://github.com/awslabs/aws-serverless-java-container/tree/master/samples/micronaut/pet-store
  • 60. AWS Lambda with Micronaut Framework
  • 61. Testing AWS Lambda with Micronaut Framework
  • 62. Micronaut Additional Features • Custom Validators • AWS API Gateway integration • Spring annotation processor available Vadym Kazulkin @VKazulkin , ip.labs GmbH Source: Stefano Buliani : "Best practices for AWS Lambda and Java„ https://www.youtube.com/watch?v=ddg1u5HLwg8
  • 63. Build GraalVM Native Image with Micronaut Framework
  • 65. AWS Lambda with Quarkus Framework
  • 66. Testing AWS Lambda with Quarkus Framework
  • 67. Build GraalVM Native Image with Quarkus Framework mvn –Pnative package
  • 68. Quarkus Additional Features • Website for creating the App • AWS API Gateway integration • Funqy Vadym Kazulkin @VKazulkin , ip.labs GmbH Source: Stefano Buliani : "Best practices for AWS Lambda and Java„ https://www.youtube.com/watch?v=ddg1u5HLwg8
  • 70. Quarkus-Fanqy AWS Serverless Support • AWS Lambda • AWS API Gateway Vadym Kazulkin @VKazulkin , ip.labs GmbH
  • 71. Spring (Boot) Framework Source: https://spring.io/
  • 72. Spring GraalVM Native Project Vadym Kazulkin @VKazulkin , ip.labs GmbH
  • 73. AWS Lambda with Spring Framework using Spring Graal Native and Spring Cloud Functions
  • 74. Bean Registration with Spring Framework using Spring Graal Native and Spring Cloud Functions
  • 75. Build GraalVM Native Image with Spring Framework mvn –Pnative package
  • 76. Framework Comparison • Project Initializer • Programming Model • Database Support • Test Support • Native Image • Native image size • Startup time • Heap size Vadym Kazulkin @VKazulkin , ip.labs GmbH Source: „Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition! by Michel Schudel“ https://www.youtube.com/watch?v=hnEXOqcNXPs „Micronaut 2.0 vs Quarkus 1.3.1 vs Spring Boot 2.3 Performance on JDK 14“ https://www.youtube.com/watch?v=rJFgdFIs_k8
  • 77. Conclusion • GraalVM and Frameworks are really powerful with a lot of potential • But in combination with Native Image currently not without challenges • AWS Lambda Custom runtime requires Linux executable only • Windows and Mac developers may only build Linux executable via Docker • plenty of 'No instances of … are allowed in the image heap’ and other errors when building a native image • Lots of experimentation with additional build arguments like “initialize-at-runtime” or “delay-class-initialization-to-runtime“ required • Once again: Less (dependencies, classes) is more • AWS Lambda function should be small and shouldn’t have many dependencies Vadym Kazulkin @VKazulkin , ip.labs GmbH Source: „https://stackoverflow.com/questions/63328298/how-do-you-debug-a-no-instances-of-are-allowed-in-the-image-heap-when-buil
  • 78. Try it yourselves • Micronaut • https://github.com/micronaut-guides/micronaut-function-aws-lambda • Quarkus • https://github.com/JosemyDuarte/quarkus-terraform-lambda-demo/tree/dynamo-terraform • Spring Boot • https://github.com/spring-projects-experimental/spring-graalvm-native/tree/master/spring- graalvm-native-samples/function-aws • Misc • https://github.com/awslabs/aws-serverless-java-container/tree/master/samples Vadym Kazulkin @VKazulkin , ip.labs GmbH